From 2f1c3dd538257eb1405ea52908db4b758ff12835 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Wed, 29 Jul 2020 00:12:35 -0400 Subject: Remove unneeded macro. --- app/include/dt-bindings/zmk/keys.h | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/app/include/dt-bindings/zmk/keys.h b/app/include/dt-bindings/zmk/keys.h index e2c3160..726d200 100644 --- a/app/include/dt-bindings/zmk/keys.h +++ b/app/include/dt-bindings/zmk/keys.h @@ -55,7 +55,7 @@ #define QUOT 0x34 #define GRAV 0x35 #define CMMA 0x36 -#define DOT 0x37 +#define DOT 0x37 #define FSLH 0x38 #define CLCK 0x39 #define F1 0x3A @@ -141,6 +141,4 @@ #define MOD_RCTL (1 << 0x04) #define MOD_RSFT (1 << 0x05) #define MOD_RALT (1 << 0x06) -#define MOD_RGUI (1 << 0x07) - -#define ZK_IS_CONSUMER(k) (ZK_KEY(k) >= 0x100) +#define MOD_RGUI (1 << 0x07) \ No newline at end of file -- cgit v1.2.3 From cf8c7856ff4251c72b53d29f1b48cc266badab98 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Thu, 30 Jul 2020 00:13:32 -0400 Subject: Add the ability to capture event and release later --- app/include/zmk/event-manager.h | 14 +++++++++++--- app/src/event_manager.c | 34 +++++++++++++++++++++++++++++----- 2 files changed, 40 insertions(+), 8 deletions(-) diff --git a/app/include/zmk/event-manager.h b/app/include/zmk/event-manager.h index 2ef55e9..3938171 100644 --- a/app/include/zmk/event-manager.h +++ b/app/include/zmk/event-manager.h @@ -17,8 +17,12 @@ struct zmk_event_type struct zmk_event_header { const struct zmk_event_type* event; + u8_t last_listener_index; }; +#define ZMK_EV_EVENT_HANDLED 1 +#define ZMK_EV_EVENT_CAPTURED 2 + typedef int (*zmk_listener_callback_t)(const struct zmk_event_header *eh); struct zmk_listener { @@ -33,7 +37,7 @@ struct zmk_event_subscription { #define ZMK_EVENT_DECLARE(event_type) \ struct event_type* new_##event_type(); \ bool is_##event_type(const struct zmk_event_header *eh); \ - const struct event_type* cast_##event_type(const struct zmk_event_header *eh); \ + struct event_type* cast_##event_type(const struct zmk_event_header *eh); \ extern const struct zmk_event_type zmk_event_##event_type; #define ZMK_EVENT_IMPL(event_type) \ @@ -49,8 +53,8 @@ struct zmk_event_subscription { bool is_##event_type(const struct zmk_event_header *eh) { \ return eh->event == &zmk_event_##event_type; \ }; \ - const struct event_type* cast_##event_type(const struct zmk_event_header *eh) {\ - return (const struct event_type*)eh; \ + struct event_type* cast_##event_type(const struct zmk_event_header *eh) {\ + return (struct event_type*)eh; \ }; @@ -68,4 +72,8 @@ struct zmk_event_subscription { #define ZMK_EVENT_RAISE(ev) \ zmk_event_manager_raise((struct zmk_event_header *)ev); +#define ZMK_EVENT_RELEASE(ev) \ + zmk_event_manager_release((struct zmk_event_header *)ev); + int zmk_event_manager_raise(struct zmk_event_header *event); +int zmk_event_manager_release(struct zmk_event_header *event); diff --git a/app/src/event_manager.c b/app/src/event_manager.c index 567cdf0..3edba10 100644 --- a/app/src/event_manager.c +++ b/app/src/event_manager.c @@ -17,16 +17,30 @@ extern struct zmk_event_type* __event_type_end[]; extern struct zmk_event_subscription __event_subscriptions_start[]; extern struct zmk_event_subscription __event_subscriptions_end[]; -int zmk_event_manager_raise(struct zmk_event_header *event) + +int zmk_event_manager_handle_from(struct zmk_event_header *event, u8_t start_index) { - int ret; - struct zmk_event_subscription *ev_sub; - for (ev_sub = __event_subscriptions_start; ev_sub != __event_subscriptions_end; ev_sub++) { + int ret = 0; + u8_t len = __event_subscriptions_end - __event_subscriptions_start; + for (int i = start_index + 1; i < len; i++) { + struct zmk_event_subscription *ev_sub = __event_subscriptions_start + i; if (ev_sub->event_type == event->event) { ret = ev_sub->listener->callback(event); - if (ret) { + if (ret < 0) { LOG_DBG("Listener returned an error: %d", ret); goto release; + } else if (ret > 0) { + switch (ret) { + case ZMK_EV_EVENT_HANDLED: + LOG_DBG("Listener handled the event"); + ret = 0; + goto release; + case ZMK_EV_EVENT_CAPTURED: + LOG_DBG("Listener captured the event"); + event->last_listener_index = i; + // Listeners are expected to free events they capture + return 0; + } } } } @@ -34,4 +48,14 @@ int zmk_event_manager_raise(struct zmk_event_header *event) release: k_free(event); return ret; +} + +int zmk_event_manager_raise(struct zmk_event_header *event) +{ + return zmk_event_manager_handle_from(event, 0); +} + +int zmk_event_manager_release(struct zmk_event_header *event) +{ + return zmk_event_manager_handle_from(event, event->last_listener_index + 1); } \ No newline at end of file -- cgit v1.2.3 From f548f2a87c670a2b56507bc104e1af39fa3846e7 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Fri, 31 Jul 2020 00:07:16 -0400 Subject: Initial stab at mod-tap improvements. * Not working: Roll over + mod-tap with multiple mod-tap bindings! --- app/CMakeLists.txt | 3 +- app/Kconfig | 4 +- app/include/zmk/event-manager.h | 4 + app/src/behaviors/behavior_key_press.c | 14 +-- app/src/behaviors/behavior_mod_tap.c | 173 ++++++++++++++++++++++++++++++--- app/src/event_manager.c | 16 +++ app/src/events/keycode_state_changed.c | 2 +- 7 files changed, 186 insertions(+), 30 deletions(-) diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 3734101..b05d16b 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -30,7 +30,6 @@ target_include_directories(app PRIVATE include) target_sources(app PRIVATE src/kscan.c) target_sources(app PRIVATE src/matrix_transform.c) target_sources(app PRIVATE src/keymap.c) -target_sources(app PRIVATE src/hid_listener.c) target_sources(app PRIVATE src/hid.c) target_sources(app PRIVATE src/sensors.c) target_sources_ifdef(CONFIG_ZMK_DISPLAY app PRIVATE src/display.c) @@ -56,5 +55,5 @@ target_sources_ifdef(CONFIG_ZMK_USB app PRIVATE src/usb_hid.c) target_sources_ifdef(CONFIG_ZMK_BLE app PRIVATE src/hog.c) target_sources_ifdef(CONFIG_ZMK_RGB_UNDERGLOW app PRIVATE src/rgb_underglow.c) target_sources(app PRIVATE src/endpoints.c) +target_sources(app PRIVATE src/hid_listener.c) target_sources(app PRIVATE src/main.c) - diff --git a/app/Kconfig b/app/Kconfig index 01384a0..55c5bae 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -40,8 +40,8 @@ menuconfig ZMK_BLE select BT_PERIPHERAL select BT_GATT_DIS select BT_GATT_BAS - select SETTINGS - select BT_SETTINGS + # select SETTINGS + # select BT_SETTINGS if ZMK_BLE diff --git a/app/include/zmk/event-manager.h b/app/include/zmk/event-manager.h index 3938171..43d3f29 100644 --- a/app/include/zmk/event-manager.h +++ b/app/include/zmk/event-manager.h @@ -72,8 +72,12 @@ struct zmk_event_subscription { #define ZMK_EVENT_RAISE(ev) \ zmk_event_manager_raise((struct zmk_event_header *)ev); +#define ZMK_EVENT_RAISE_AFTER(ev, mod) \ + zmk_event_manager_raise_after((struct zmk_event_header *)ev, &zmk_listener_##mod); + #define ZMK_EVENT_RELEASE(ev) \ zmk_event_manager_release((struct zmk_event_header *)ev); int zmk_event_manager_raise(struct zmk_event_header *event); +int zmk_event_manager_raise_after(struct zmk_event_header *event, const struct zmk_listener *listener); int zmk_event_manager_release(struct zmk_event_header *event); diff --git a/app/src/behaviors/behavior_key_press.c b/app/src/behaviors/behavior_key_press.c index 34df1c0..7404c79 100644 --- a/app/src/behaviors/behavior_key_press.c +++ b/app/src/behaviors/behavior_key_press.c @@ -28,27 +28,17 @@ static int behavior_key_press_init(struct device *dev) static int on_keymap_binding_pressed(struct device *dev, u32_t position, u32_t keycode, u32_t _) { const struct behavior_key_press_config *cfg = dev->config_info; - struct keycode_state_changed *ev; LOG_DBG("position %d usage_page 0x%02X keycode 0x%02X", position, cfg->usage_page, keycode); - ev = new_keycode_state_changed(); - ev->usage_page = cfg->usage_page; - ev->keycode = keycode; - ev->state = true; - return ZMK_EVENT_RAISE(ev); + return ZMK_EVENT_RAISE(create_keycode_state_changed(cfg->usage_page, keycode, true)); } static int on_keymap_binding_released(struct device *dev, u32_t position, u32_t keycode, u32_t _) { const struct behavior_key_press_config *cfg = dev->config_info; - struct keycode_state_changed *ev; LOG_DBG("position %d usage_page 0x%02X keycode 0x%02X", position, cfg->usage_page, keycode); - ev = new_keycode_state_changed(); - ev->usage_page = cfg->usage_page; - ev->keycode = keycode; - ev->state = false; - return ZMK_EVENT_RAISE(ev); + return ZMK_EVENT_RAISE(create_keycode_state_changed(cfg->usage_page, keycode, false)); } static const struct behavior_driver_api behavior_key_press_driver_api = { diff --git a/app/src/behaviors/behavior_mod_tap.c b/app/src/behaviors/behavior_mod_tap.c index 62604eb..df3eec2 100644 --- a/app/src/behaviors/behavior_mod_tap.c +++ b/app/src/behaviors/behavior_mod_tap.c @@ -10,25 +10,110 @@ #include #include +#include +#include #include #include #include +#include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); +#define ZMK_BHV_MOD_TAP_MAX_HELD 4 +#define ZMK_BHV_MOD_TAP_MAX_PENDING_KC 4 + +#define TOGGLE_FIRST(arr, len, match, val) \ + for (int idx = 0; idx < len; idx++) \ + { \ + if (arr[idx] != match) \ + { \ + continue; \ + } \ + arr[idx] = val; \ + break; \ + } + +struct pending_mod_tap_item { + u32_t keycode; + u8_t mods; +}; + struct behavior_mod_tap_config { }; struct behavior_mod_tap_data { - u16_t pending_press_positions; + struct pending_mod_tap_item pending_mod_taps[ZMK_BHV_MOD_TAP_MAX_HELD]; + struct pending_mod_tap_item triggered_mod_taps[ZMK_BHV_MOD_TAP_MAX_HELD]; + struct keycode_state_changed* pending_key_presses[ZMK_BHV_MOD_TAP_MAX_PENDING_KC]; }; +bool have_pending_mods(char *label) { + struct device *dev = device_get_binding(label); + struct behavior_mod_tap_data *data = dev->driver_data; + + for (int i = 0; i < ZMK_BHV_MOD_TAP_MAX_HELD; i++) { + if (data->pending_mod_taps[i].mods) { + LOG_DBG("Found pending mods for %d and keycode 0x%02X", data->pending_mod_taps[i].mods, data->pending_mod_taps[i].keycode); + return true; + } + } + + return false; +} + +bool have_pending_keycode(struct behavior_mod_tap_data *data, u32_t keycode) +{ + for (int i = 0; i < ZMK_BHV_MOD_TAP_MAX_PENDING_KC; i++) { + if (data->pending_key_presses[i] == NULL) { + continue; + } + + if (data->pending_key_presses[i]->keycode == keycode) { + return true; + } + } + + return false; +} + +// How to pass context to subscription?! int behavior_mod_tap_listener(const struct zmk_event_header *eh) { - if (is_keycode_state_changed(eh)) { + if (is_keycode_state_changed(eh) && have_pending_mods(DT_INST_LABEL(0))) { struct device *dev = device_get_binding(DT_INST_LABEL(0)); - const struct keycode_state_changed *ev = cast_keycode_state_changed(eh); + struct keycode_state_changed *ev = cast_keycode_state_changed(eh); + struct behavior_mod_tap_data *data = dev->driver_data; if (ev->state) { - struct behavior_mod_tap_data *data = dev->driver_data; - data->pending_press_positions = 0; + LOG_DBG("Have pending mods, capturing keycode 0x%02X event to ressend later", ev->keycode); + TOGGLE_FIRST(data->pending_key_presses, ZMK_BHV_MOD_TAP_MAX_PENDING_KC, NULL, ev); + return ZMK_EV_EVENT_CAPTURED; + } else if (have_pending_keycode(data, ev->keycode)) { + zmk_mod_flags mods = 0; + + LOG_DBG("Key released, going to activate mods then send pending key presses"); + for (int i = 0; i < ZMK_BHV_MOD_TAP_MAX_HELD; i++) { + memcpy(&data->triggered_mod_taps[i], &data->pending_mod_taps[i], sizeof(struct pending_mod_tap_item)); + data->pending_mod_taps[i].mods = 0; + data->pending_mod_taps[i].keycode = 0; + } + LOG_DBG("After swapping, do I have pending mods? %s", (have_pending_mods(DT_INST_LABEL(0)) ? "true" : "false")); + + for (int i = 0; i < ZMK_BHV_MOD_TAP_MAX_HELD; i++) { + mods |= data->triggered_mod_taps[i].mods; + } + + LOG_DBG("Setting mods: %d", mods); + + zmk_hid_register_mods(mods); + + for (int i = 0; i < ZMK_BHV_MOD_TAP_MAX_PENDING_KC; i++) { + if (data->pending_key_presses[i] == NULL) { + continue; + } + + struct keycode_state_changed *ev = data->pending_key_presses[i]; + data->pending_key_presses[i] = NULL; + ZMK_EVENT_RAISE(ev); + k_msleep(10); + } } } return 0; @@ -46,22 +131,84 @@ static int behavior_mod_tap_init(struct device *dev) static int on_keymap_binding_pressed(struct device *dev, u32_t position, u32_t mods, u32_t keycode) { struct behavior_mod_tap_data *data = dev->driver_data; - LOG_DBG("mods: %d, keycode: %d", mods, keycode); - WRITE_BIT(data->pending_press_positions, position, true); - return ZMK_EVENT_RAISE(create_modifiers_state_changed(mods, true)); + LOG_DBG("mods: %d, keycode: 0x%02X", mods, keycode); + for (int i = 0; i < ZMK_BHV_MOD_TAP_MAX_HELD; i++) { + if (data->pending_mod_taps[i].mods != 0) { + continue; + } + + data->pending_mod_taps[i].mods = mods; + data->pending_mod_taps[i].keycode = keycode; + + return 0; + } + + return -ENOMEM; } static int on_keymap_binding_released(struct device *dev, u32_t position, u32_t mods, u32_t keycode) { struct behavior_mod_tap_data *data = dev->driver_data; + bool sending_keycode = false; + bool sent_pending_key_presses = false; + struct keycode_state_changed *pending_key_presses[ZMK_BHV_MOD_TAP_MAX_PENDING_KC]; LOG_DBG("mods: %d, keycode: %d", mods, keycode); - ZMK_EVENT_RAISE(create_modifiers_state_changed(mods, false)); - k_msleep(10); // TODO: Better approach than k_msleep to avoid USB send failures? Retries in the USB endpoint layer? - if (data->pending_press_positions & BIT(position)) { - ZMK_EVENT_RAISE(create_keycode_state_changed(USAGE_KEYPAD, keycode, true)); + for (int i = 0; i < ZMK_BHV_MOD_TAP_MAX_HELD; i++) { + if (data->triggered_mod_taps[i].mods == mods && data->triggered_mod_taps[i].keycode == keycode) { + LOG_DBG("Releasing triggered mods: %d", mods); + zmk_hid_unregister_mods(mods); + data->triggered_mod_taps[i].mods = 0; + data->triggered_mod_taps[i].keycode = 0; + break; + } + } + + for (int i = 0; i < ZMK_BHV_MOD_TAP_MAX_HELD; i++) { + if (data->pending_mod_taps[i].mods == mods && data->pending_mod_taps[i].keycode == keycode) { + sending_keycode = true; + data->pending_mod_taps[i].mods = 0; + data->pending_mod_taps[i].keycode = 0; + break; + } + } + + for (int i = 0; i < ZMK_BHV_MOD_TAP_MAX_PENDING_KC; i++) { + pending_key_presses[i] = data->pending_key_presses[i]; + data->pending_key_presses[i] = NULL; + } + + + if (sending_keycode) { + struct keycode_state_changed *key_press = create_keycode_state_changed(USAGE_KEYPAD, keycode, true); + LOG_DBG("Sending un-triggered mod-tap for keycode: 0x%02X", keycode); + ZMK_EVENT_RAISE(key_press); + k_msleep(10); + } + + + for (int i = 0; i < ZMK_BHV_MOD_TAP_MAX_PENDING_KC; i++) { + if (pending_key_presses[i] == NULL) { + continue; + } + + struct keycode_state_changed *ev = pending_key_presses[i]; + sent_pending_key_presses = true; + LOG_DBG("Re-sending latched key press for usage page 0x%02X keycode 0x%02X state %s", ev->usage_page, ev->keycode, (ev->state ? "pressed" : "released")); + ZMK_EVENT_RELEASE(ev); k_msleep(10); - ZMK_EVENT_RAISE(create_keycode_state_changed(USAGE_KEYPAD, keycode, false)); + } + + if (sending_keycode) { + struct keycode_state_changed *key_release = create_keycode_state_changed(USAGE_KEYPAD, keycode, false); + LOG_DBG("Sending un-triggered mod-tap release for keycode: 0x%02X", keycode); + ZMK_EVENT_RAISE(key_release); + } + + if (!sending_keycode && !sent_pending_key_presses) { + // Need to ensure the mod release is propagated. + zmk_endpoints_send_report(USAGE_KEYPAD); + } return 0; diff --git a/app/src/event_manager.c b/app/src/event_manager.c index 3edba10..5d2e9ed 100644 --- a/app/src/event_manager.c +++ b/app/src/event_manager.c @@ -55,6 +55,22 @@ int zmk_event_manager_raise(struct zmk_event_header *event) return zmk_event_manager_handle_from(event, 0); } +int zmk_event_manager_raise_after(struct zmk_event_header *event, const struct zmk_listener *listener) +{ + u8_t len = __event_subscriptions_end - __event_subscriptions_start; + for (int i = 0; i < len; i++) { + struct zmk_event_subscription *ev_sub = __event_subscriptions_start + i; + + if (ev_sub->event_type == event->event && ev_sub->listener == listener) { + return zmk_event_manager_handle_from(event, i+1); + } + } + + LOG_WRN("Unable to find where to raise this after event"); + + return -EINVAL; +} + int zmk_event_manager_release(struct zmk_event_header *event) { return zmk_event_manager_handle_from(event, event->last_listener_index + 1); diff --git a/app/src/events/keycode_state_changed.c b/app/src/events/keycode_state_changed.c index 964b24a..73508e1 100644 --- a/app/src/events/keycode_state_changed.c +++ b/app/src/events/keycode_state_changed.c @@ -7,4 +7,4 @@ #include #include -ZMK_EVENT_IMPL(keycode_state_changed); \ No newline at end of file +ZMK_EVENT_IMPL(keycode_state_changed); -- cgit v1.2.3 From 8bba1fb7384c473bc6aa8ba700f3ee5eabadee4e Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Fri, 31 Jul 2020 14:38:10 -0400 Subject: Major mod-tap improvements. * Track active mods when mods or keycode events occur. * Use the tracked mods when releasing or generating keycode events. * Track pending/used status in one array, for improved storage efficency. --- app/src/behaviors/behavior_mod_tap.c | 211 ++++++++++++++++++++--------------- 1 file changed, 123 insertions(+), 88 deletions(-) diff --git a/app/src/behaviors/behavior_mod_tap.c b/app/src/behaviors/behavior_mod_tap.c index df3eec2..b7d4f4e 100644 --- a/app/src/behaviors/behavior_mod_tap.c +++ b/app/src/behaviors/behavior_mod_tap.c @@ -33,16 +33,22 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); break; \ } -struct pending_mod_tap_item { +struct active_mod_tap_item { u32_t keycode; u8_t mods; + bool pending; + zmk_mod_flags active_mods; +}; + +struct captured_keycode_state_change_item { + struct keycode_state_changed* event; + zmk_mod_flags active_mods; }; struct behavior_mod_tap_config { }; struct behavior_mod_tap_data { - struct pending_mod_tap_item pending_mod_taps[ZMK_BHV_MOD_TAP_MAX_HELD]; - struct pending_mod_tap_item triggered_mod_taps[ZMK_BHV_MOD_TAP_MAX_HELD]; - struct keycode_state_changed* pending_key_presses[ZMK_BHV_MOD_TAP_MAX_PENDING_KC]; + struct active_mod_tap_item active_mod_taps[ZMK_BHV_MOD_TAP_MAX_HELD]; + struct captured_keycode_state_change_item captured_keycode_events[ZMK_BHV_MOD_TAP_MAX_PENDING_KC]; }; bool have_pending_mods(char *label) { @@ -50,8 +56,8 @@ bool have_pending_mods(char *label) { struct behavior_mod_tap_data *data = dev->driver_data; for (int i = 0; i < ZMK_BHV_MOD_TAP_MAX_HELD; i++) { - if (data->pending_mod_taps[i].mods) { - LOG_DBG("Found pending mods for %d and keycode 0x%02X", data->pending_mod_taps[i].mods, data->pending_mod_taps[i].keycode); + if (data->active_mod_taps[i].mods) { + LOG_DBG("Found pending mods for %d and keycode 0x%02X", data->active_mod_taps[i].mods, data->active_mod_taps[i].keycode); return true; } } @@ -59,19 +65,54 @@ bool have_pending_mods(char *label) { return false; } -bool have_pending_keycode(struct behavior_mod_tap_data *data, u32_t keycode) +struct captured_keycode_state_change_item* find_pending_keycode(struct behavior_mod_tap_data *data, u32_t keycode) { for (int i = 0; i < ZMK_BHV_MOD_TAP_MAX_PENDING_KC; i++) { - if (data->pending_key_presses[i] == NULL) { + if (data->captured_keycode_events[i].event == NULL) { continue; } - if (data->pending_key_presses[i]->keycode == keycode) { - return true; + if (data->captured_keycode_events[i].event->keycode == keycode) { + return &data->captured_keycode_events[i]; } } - return false; + return NULL; +} + +zmk_mod_flags behavior_mod_tap_active_mods(struct behavior_mod_tap_data *data) +{ + zmk_mod_flags mods = 0; + + for (int i = 0; i < ZMK_BHV_MOD_TAP_MAX_HELD; i++) { + mods |= data->active_mod_taps[i].mods; + } + + return mods; +} + +int behavior_mod_tap_capture_keycode_event(struct behavior_mod_tap_data *data, struct keycode_state_changed *ev) +{ + for (int i = 0; i < ZMK_BHV_MOD_TAP_MAX_PENDING_KC; i++) { + if (data->captured_keycode_events[i].event != NULL) { + continue; + } + + data->captured_keycode_events[i].event = ev; + data->captured_keycode_events[i].active_mods = behavior_mod_tap_active_mods(data); + return 0; + } + + return -ENOMEM; +} + +void behavior_mod_tap_update_active_mods_state(struct behavior_mod_tap_data *data, zmk_mod_flags used_flags) +{ + for (int i = 0; i < ZMK_BHV_MOD_TAP_MAX_HELD; i++) { + if ((data->active_mod_taps[i].mods & used_flags) == data->active_mod_taps[i].mods) { + data->active_mod_taps[i].pending = false; + } + } } // How to pass context to subscription?! @@ -81,39 +122,25 @@ int behavior_mod_tap_listener(const struct zmk_event_header *eh) struct device *dev = device_get_binding(DT_INST_LABEL(0)); struct keycode_state_changed *ev = cast_keycode_state_changed(eh); struct behavior_mod_tap_data *data = dev->driver_data; + struct captured_keycode_state_change_item* pending_keycode; if (ev->state) { LOG_DBG("Have pending mods, capturing keycode 0x%02X event to ressend later", ev->keycode); - TOGGLE_FIRST(data->pending_key_presses, ZMK_BHV_MOD_TAP_MAX_PENDING_KC, NULL, ev); + behavior_mod_tap_capture_keycode_event(data, ev); return ZMK_EV_EVENT_CAPTURED; - } else if (have_pending_keycode(data, ev->keycode)) { - zmk_mod_flags mods = 0; - + } else if ((pending_keycode = find_pending_keycode(data, ev->keycode)) != NULL) { LOG_DBG("Key released, going to activate mods then send pending key presses"); - for (int i = 0; i < ZMK_BHV_MOD_TAP_MAX_HELD; i++) { - memcpy(&data->triggered_mod_taps[i], &data->pending_mod_taps[i], sizeof(struct pending_mod_tap_item)); - data->pending_mod_taps[i].mods = 0; - data->pending_mod_taps[i].keycode = 0; - } - LOG_DBG("After swapping, do I have pending mods? %s", (have_pending_mods(DT_INST_LABEL(0)) ? "true" : "false")); - for (int i = 0; i < ZMK_BHV_MOD_TAP_MAX_HELD; i++) { - mods |= data->triggered_mod_taps[i].mods; - } - LOG_DBG("Setting mods: %d", mods); + LOG_DBG("Setting mods: %d", pending_keycode->active_mods); - zmk_hid_register_mods(mods); + zmk_hid_register_mods(pending_keycode->active_mods); + behavior_mod_tap_update_active_mods_state(data, pending_keycode->active_mods); - for (int i = 0; i < ZMK_BHV_MOD_TAP_MAX_PENDING_KC; i++) { - if (data->pending_key_presses[i] == NULL) { - continue; - } + ZMK_EVENT_RELEASE(pending_keycode->event); + k_msleep(10); - struct keycode_state_changed *ev = data->pending_key_presses[i]; - data->pending_key_presses[i] = NULL; - ZMK_EVENT_RAISE(ev); - k_msleep(10); - } + pending_keycode->event = NULL; + pending_keycode->active_mods = 0; } } return 0; @@ -133,82 +160,90 @@ static int on_keymap_binding_pressed(struct device *dev, u32_t position, u32_t m struct behavior_mod_tap_data *data = dev->driver_data; LOG_DBG("mods: %d, keycode: 0x%02X", mods, keycode); for (int i = 0; i < ZMK_BHV_MOD_TAP_MAX_HELD; i++) { - if (data->pending_mod_taps[i].mods != 0) { + if (data->active_mod_taps[i].mods != 0) { continue; } - data->pending_mod_taps[i].mods = mods; - data->pending_mod_taps[i].keycode = keycode; + zmk_mod_flags active_mods = behavior_mod_tap_active_mods(data); + + data->active_mod_taps[i].active_mods = active_mods; + data->active_mod_taps[i].mods = mods; + data->active_mod_taps[i].keycode = keycode; + data->active_mod_taps[i].pending = true; return 0; } + LOG_WRN("Failed to record mod-tap activation, at maximum concurrent mod-tap activations"); + return -ENOMEM; } static int on_keymap_binding_released(struct device *dev, u32_t position, u32_t mods, u32_t keycode) { struct behavior_mod_tap_data *data = dev->driver_data; - bool sending_keycode = false; - bool sent_pending_key_presses = false; - struct keycode_state_changed *pending_key_presses[ZMK_BHV_MOD_TAP_MAX_PENDING_KC]; LOG_DBG("mods: %d, keycode: %d", mods, keycode); for (int i = 0; i < ZMK_BHV_MOD_TAP_MAX_HELD; i++) { - if (data->triggered_mod_taps[i].mods == mods && data->triggered_mod_taps[i].keycode == keycode) { - LOG_DBG("Releasing triggered mods: %d", mods); - zmk_hid_unregister_mods(mods); - data->triggered_mod_taps[i].mods = 0; - data->triggered_mod_taps[i].keycode = 0; - break; - } - } - - for (int i = 0; i < ZMK_BHV_MOD_TAP_MAX_HELD; i++) { - if (data->pending_mod_taps[i].mods == mods && data->pending_mod_taps[i].keycode == keycode) { - sending_keycode = true; - data->pending_mod_taps[i].mods = 0; - data->pending_mod_taps[i].keycode = 0; - break; - } - } - - for (int i = 0; i < ZMK_BHV_MOD_TAP_MAX_PENDING_KC; i++) { - pending_key_presses[i] = data->pending_key_presses[i]; - data->pending_key_presses[i] = NULL; - } + struct active_mod_tap_item *item = &data->active_mod_taps[i]; + if (item->mods == mods && item->keycode == keycode) { + if (item->pending) { + LOG_DBG("Sending un-triggered mod-tap for keycode: 0x%02X", keycode); + + if (item->active_mods) { + LOG_DBG("Registering recorded active mods captured when mod-tap initially activated: 0x%02X", item->active_mods); + behavior_mod_tap_update_active_mods_state(data, item->active_mods); + zmk_hid_register_mods(item->active_mods); + } + struct keycode_state_changed *key_press = create_keycode_state_changed(USAGE_KEYPAD, item->keycode, true); + ZMK_EVENT_RAISE_AFTER(key_press, behavior_mod_tap); + k_msleep(10); - if (sending_keycode) { - struct keycode_state_changed *key_press = create_keycode_state_changed(USAGE_KEYPAD, keycode, true); - LOG_DBG("Sending un-triggered mod-tap for keycode: 0x%02X", keycode); - ZMK_EVENT_RAISE(key_press); - k_msleep(10); - } - + for (int j = 0; j < ZMK_BHV_MOD_TAP_MAX_PENDING_KC; j++) { + if (data->captured_keycode_events[j].event == NULL) { + continue; + } + + struct keycode_state_changed *ev = data->captured_keycode_events[j].event; + data->captured_keycode_events[i].event = NULL; + data->captured_keycode_events[i].active_mods = 0; + LOG_DBG("Re-sending latched key press for usage page 0x%02X keycode 0x%02X state %s", ev->usage_page, ev->keycode, (ev->state ? "pressed" : "released")); + ZMK_EVENT_RELEASE(ev); + k_msleep(10); + } - for (int i = 0; i < ZMK_BHV_MOD_TAP_MAX_PENDING_KC; i++) { - if (pending_key_presses[i] == NULL) { - continue; - } + struct keycode_state_changed *key_release = create_keycode_state_changed(USAGE_KEYPAD, keycode, false); + LOG_DBG("Sending un-triggered mod-tap release for keycode: 0x%02X", keycode); + ZMK_EVENT_RAISE_AFTER(key_release, behavior_mod_tap); + k_msleep(10); - struct keycode_state_changed *ev = pending_key_presses[i]; - sent_pending_key_presses = true; - LOG_DBG("Re-sending latched key press for usage page 0x%02X keycode 0x%02X state %s", ev->usage_page, ev->keycode, (ev->state ? "pressed" : "released")); - ZMK_EVENT_RELEASE(ev); - k_msleep(10); - } + if (item->active_mods) { + LOG_DBG("Unregistering recorded active mods captured when mod-tap initially activated: 0x%02X", item->active_mods); + zmk_hid_unregister_mods(item->active_mods); + zmk_endpoints_send_report(USAGE_KEYPAD); + } - if (sending_keycode) { - struct keycode_state_changed *key_release = create_keycode_state_changed(USAGE_KEYPAD, keycode, false); - LOG_DBG("Sending un-triggered mod-tap release for keycode: 0x%02X", keycode); - ZMK_EVENT_RAISE(key_release); - } + + } else { + LOG_DBG("Releasing triggered mods: %d", mods); + zmk_hid_unregister_mods(mods); + zmk_endpoints_send_report(USAGE_KEYPAD); + } - if (!sending_keycode && !sent_pending_key_presses) { - // Need to ensure the mod release is propagated. - zmk_endpoints_send_report(USAGE_KEYPAD); + item->mods = 0; + item->keycode = 0; + item->active_mods = 0; + LOG_DBG("Removing mods %d from active_mods for other held mod-taps", mods); + for (int j = 0; j < ZMK_BHV_MOD_TAP_MAX_HELD; j++) { + if (data->active_mod_taps[j].active_mods & mods) { + LOG_DBG("Removing 0x%02X from active mod tap mods 0x%02X keycode 0x%02X", mods, data->active_mod_taps[j].mods, data->active_mod_taps[j].keycode); + data->active_mod_taps[j].active_mods &= ~mods; + } + } + break; + } } return 0; -- cgit v1.2.3 From 8a07938d9b03567ba11fc3e86a4fefb0ac098646 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Fri, 31 Jul 2020 23:29:32 -0400 Subject: Minor cleanup. --- app/src/behaviors/behavior_mod_tap.c | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/app/src/behaviors/behavior_mod_tap.c b/app/src/behaviors/behavior_mod_tap.c index b7d4f4e..6151f7e 100644 --- a/app/src/behaviors/behavior_mod_tap.c +++ b/app/src/behaviors/behavior_mod_tap.c @@ -22,17 +22,6 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #define ZMK_BHV_MOD_TAP_MAX_HELD 4 #define ZMK_BHV_MOD_TAP_MAX_PENDING_KC 4 -#define TOGGLE_FIRST(arr, len, match, val) \ - for (int idx = 0; idx < len; idx++) \ - { \ - if (arr[idx] != match) \ - { \ - continue; \ - } \ - arr[idx] = val; \ - break; \ - } - struct active_mod_tap_item { u32_t keycode; u8_t mods; @@ -128,10 +117,8 @@ int behavior_mod_tap_listener(const struct zmk_event_header *eh) behavior_mod_tap_capture_keycode_event(data, ev); return ZMK_EV_EVENT_CAPTURED; } else if ((pending_keycode = find_pending_keycode(data, ev->keycode)) != NULL) { - LOG_DBG("Key released, going to activate mods then send pending key presses"); - - - LOG_DBG("Setting mods: %d", pending_keycode->active_mods); + LOG_DBG("Key released, going to activate mods 0x%02X then send pending key press for keycode 0x%02X", + pending_keycode->active_mods, pending_keycode->event->keycode); zmk_hid_register_mods(pending_keycode->active_mods); behavior_mod_tap_update_active_mods_state(data, pending_keycode->active_mods); -- cgit v1.2.3 From cd30f440d9d860e856da5a14d88c87f8c595522f Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Sun, 2 Aug 2020 14:10:56 -0400 Subject: Fix for the right start index for event releases. --- app/src/event_manager.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/event_manager.c b/app/src/event_manager.c index 5d2e9ed..c405176 100644 --- a/app/src/event_manager.c +++ b/app/src/event_manager.c @@ -22,7 +22,7 @@ int zmk_event_manager_handle_from(struct zmk_event_header *event, u8_t start_ind { int ret = 0; u8_t len = __event_subscriptions_end - __event_subscriptions_start; - for (int i = start_index + 1; i < len; i++) { + for (int i = start_index; i < len; i++) { struct zmk_event_subscription *ev_sub = __event_subscriptions_start + i; if (ev_sub->event_type == event->event) { ret = ev_sub->listener->callback(event); -- cgit v1.2.3 From f26bd495ea0dad0a9b610752555ce428197e9cc8 Mon Sep 17 00:00:00 2001 From: Nick Date: Sun, 2 Aug 2020 14:51:42 -0500 Subject: Fix interval update, add PHY update --- app/Kconfig | 1 + app/src/ble.c | 6 +++++- app/src/split/bluetooth/central.c | 21 ++++++++++++++++++++- 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/app/Kconfig b/app/Kconfig index 55c5bae..4086955 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -88,6 +88,7 @@ config ZMK_SPLIT_BLE bool "Split keyboard support via BLE transport" depends on ZMK_BLE default y + select BT_USER_PHY_UPDATE if ZMK_SPLIT_BLE diff --git a/app/src/ble.c b/app/src/ble.c index 559b04f..2afc983 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -37,7 +37,11 @@ static void connected(struct bt_conn *conn, u8_t err) printk("Connected %s\n", addr); - bt_conn_le_param_update(conn, BT_LE_CONN_PARAM(0x0006, 0x000c, 5, 400)); + bt_conn_le_param_update(conn, BT_LE_CONN_PARAM(0x0006, 0x000c, 30, 400)); + +#if IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL) + bt_conn_le_phy_update(default_conn, BT_CONN_LE_PHY_PARAM_2M); +#endif if (bt_conn_set_security(conn, BT_SECURITY_L2)) { diff --git a/app/src/split/bluetooth/central.c b/app/src/split/bluetooth/central.c index b6d7222..905cbd7 100644 --- a/app/src/split/bluetooth/central.c +++ b/app/src/split/bluetooth/central.c @@ -67,6 +67,13 @@ static u8_t split_central_notify_func(struct bt_conn *conn, } } + bt_conn_le_param_update(conn, BT_LE_CONN_PARAM(0x0006, 0x0006, 30, 400)); + + struct bt_conn_info info; + + bt_conn_get_info(conn, &info); + + LOG_DBG("Interval: %d, Latency: %d, PHY: %d", info.le.interval, info.le.latency, info.le.phy->rx_phy); return BT_GATT_ITER_CONTINUE; } @@ -149,6 +156,12 @@ static void split_central_process_connection(struct bt_conn *conn) { return; } } + + struct bt_conn_info info; + + bt_conn_get_info(conn, &info); + + LOG_DBG("New connection params: Interval: %d, Latency: %d, PHY: %d", info.le.interval, info.le.latency, info.le.phy->rx_phy); } static bool split_central_eir_found(struct bt_data *data, void *user_data) @@ -199,13 +212,19 @@ static bool split_central_eir_found(struct bt_data *data, void *user_data) LOG_DBG("Found existing connection"); split_central_process_connection(default_conn); } else { - param = BT_LE_CONN_PARAM(0x0006, 0x000c, 5, 400); + param = BT_LE_CONN_PARAM(0x0006, 0x0006, 30, 400); err = bt_conn_le_create(addr, BT_CONN_LE_CREATE_CONN, param, &default_conn); if (err) { LOG_ERR("Create conn failed (err %d)", err); start_scan(); } + + err = bt_conn_le_phy_update(default_conn, BT_CONN_LE_PHY_PARAM_2M); + if (err) { + LOG_ERR("Update phy conn failed (err %d)", err); + start_scan(); + } } return false; -- cgit v1.2.3 From 880c6e0601b6313e26bc73e913843805666f4cf3 Mon Sep 17 00:00:00 2001 From: Nick Date: Sun, 2 Aug 2020 15:01:32 -0500 Subject: Fix variable name in peripheral PHY update --- app/src/ble.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/ble.c b/app/src/ble.c index 2afc983..3a7755f 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -40,7 +40,7 @@ static void connected(struct bt_conn *conn, u8_t err) bt_conn_le_param_update(conn, BT_LE_CONN_PARAM(0x0006, 0x000c, 30, 400)); #if IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL) - bt_conn_le_phy_update(default_conn, BT_CONN_LE_PHY_PARAM_2M); + bt_conn_le_phy_update(conn, BT_CONN_LE_PHY_PARAM_2M); #endif if (bt_conn_set_security(conn, BT_SECURITY_L2)) -- cgit v1.2.3 From f23ca9d7ee7481ebdbbed3234e902e5b7753ae41 Mon Sep 17 00:00:00 2001 From: Nick Date: Sun, 2 Aug 2020 15:51:38 -0500 Subject: Add two solutions to param updates --- app/src/ble.c | 29 +++++++++++++++++++++++++++++ app/src/split/bluetooth/central.c | 7 ------- 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/app/src/ble.c b/app/src/ble.c index 3a7755f..db80a36 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -76,10 +76,39 @@ static void security_changed(struct bt_conn *conn, bt_security_t level, } } +static bool le_param_req(struct bt_conn *conn, struct bt_le_conn_param *param) { + static struct bt_conn_info info; + + bt_conn_get_info(conn, &info); + + if (info.role == BT_CONN_ROLE_MASTER && (param->interval_min != 6 || param->latency != 30)) { + return false; + } + + return true; +} + +static void le_param_updated(struct bt_conn *conn, u16_t interval, + u16_t latency, u16_t timeout) { + static struct bt_conn_info info; + + bt_conn_get_info(conn, &info); + + if (info.role == BT_CONN_ROLE_MASTER && (interval != 6 || latency != 30)) { + bt_conn_le_param_update(conn, BT_LE_CONN_PARAM(0x0006, 0x0006, 30, 400)); + } + + LOG_DBG("Params updated: Interval: %d, Latency: %d", interval, latency); +}; + static struct bt_conn_cb conn_callbacks = { .connected = connected, .disconnected = disconnected, .security_changed = security_changed, +#if !IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL) + .le_param_req = le_param_req, + .le_param_updated = le_param_updated, +#endif }; static void auth_passkey_display(struct bt_conn *conn, unsigned int passkey) diff --git a/app/src/split/bluetooth/central.c b/app/src/split/bluetooth/central.c index 905cbd7..237096f 100644 --- a/app/src/split/bluetooth/central.c +++ b/app/src/split/bluetooth/central.c @@ -67,13 +67,6 @@ static u8_t split_central_notify_func(struct bt_conn *conn, } } - bt_conn_le_param_update(conn, BT_LE_CONN_PARAM(0x0006, 0x0006, 30, 400)); - - struct bt_conn_info info; - - bt_conn_get_info(conn, &info); - - LOG_DBG("Interval: %d, Latency: %d, PHY: %d", info.le.interval, info.le.latency, info.le.phy->rx_phy); return BT_GATT_ITER_CONTINUE; } -- cgit v1.2.3 From fbaeb9560165deaa0f13847a48215f470845a5f8 Mon Sep 17 00:00:00 2001 From: Nick Date: Sun, 2 Aug 2020 20:46:56 -0500 Subject: Add better default keymap for lily58 --- app/boards/shields/lily58/keymap/keymap.overlay | 54 ++++++++++++++++++++----- app/include/dt-bindings/zmk/keys.h | 2 +- 2 files changed, 45 insertions(+), 11 deletions(-) diff --git a/app/boards/shields/lily58/keymap/keymap.overlay b/app/boards/shields/lily58/keymap/keymap.overlay index 9d1f9c6..e9da1e7 100644 --- a/app/boards/shields/lily58/keymap/keymap.overlay +++ b/app/boards/shields/lily58/keymap/keymap.overlay @@ -10,7 +10,7 @@ keymap0: keymap { compatible = "zmk,keymap"; label ="Default Lily58 Keymap"; - layers = <&default>; + layers = <&default &lower &raise>; }; layers { @@ -18,18 +18,52 @@ default: layer_0 { label = "DEFAULT"; -// --------------------------------------------------------------------------------------------------------------------------------- -// | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` | -// | TAB | Q | W | E | R | T | | Y | U | I | O | P | \ | -// | CTRL | A | S | D | F | G | | H | J | K | L | ; | ' | -// | SHIFT | Z | X | C | V | B | "[" | | "]" | N | M | , | . | / | CTRL | -// | GUI | DEL | RET | SPACE | | SPACE | TAB | BSPC | R-ALT | +// ------------------------------------------------------------------------------------------------------------ +// | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` | +// | TAB | Q | W | E | R | T | | Y | U | I | O | P | - | +// | CTRL | A | S | D | F | G | | H | J | K | L | ; | ' | +// | SHIFT | Z | X | C | V | B | "[" | | "]" | N | M | , | . | / | SHIFT | +// | ALT | GUI | LOWER| SPACE | | ENTER | RAISE| BSPC | GUI | bindings = < &kp ESC &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 &kp GRAV -&kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH +&kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp MINUS &kp LCTL &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SCLN &kp QUOT -&kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp LBKT &kp RBKT &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RCTL - &kp LGUI &kp DEL &kp RET &kp SPC &kp SPC &kp TAB &kp BKSP &kp RALT +&kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp LBKT &kp RBKT &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RSFT + &kp LALT &kp LGUI &mo 1 &kp SPC &kp RET &mo 2 &kp BKSP &kp RGUI + >; + }; + + lower: layer_1 { + label = "LOWER"; +// ------------------------------------------------------------------------------------------------------------ +// | | | | | | | | | | | | | | +// | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | +// | ` | ! | @ | # | $ | % | | ^ | & | * | ( | ) | ~ | +// | | | | | | | | | | | _ | + | { | } | "|" | +// | | | | | | | | | | + bindings = < +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans +&kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 +&kp GRAV &kp BANG &kp ATSN &kp HASH &kp CURU &kp PRCT &kp CRRT &kp AMPS &kp KMLT &kp LPRN &kp RPRN &kp TILD +&trans &trans &trans &trans &trans &trans &trans &trans &trans &kp MINUS &kp KPLS &kp LCUR &kp RCUR &kp PIPE + &trans &trans &trans &trans &trans &trans &trans &trans + >; + }; + + raise: layer_3 { + label = "RAISE"; +// ------------------------------------------------------------------------------------------------------------ +// | | | | | | | | | | | | | | +// | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | | +// | F1 | F2 | F3 | F4 | F5 | F6 | | | <- | ^ | v | -> | | +// | F7 | F8 | F9 | F10 | F11 | F12 | | | | + | - | = | [ | ] | \ | +// | | | | | | | | | | + bindings = < +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans +&kp GRAV &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 &trans +&kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &trans &kp LARW &kp DARW &kp UARW &kp RARW &trans +&kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &trans &trans &kp KPLS &kp MINUS &kp EQL &kp LBKT &kp RBKT &kp BSLH + &trans &trans &trans &trans &trans &trans &trans &trans >; }; }; diff --git a/app/include/dt-bindings/zmk/keys.h b/app/include/dt-bindings/zmk/keys.h index 726d200..0a52857 100644 --- a/app/include/dt-bindings/zmk/keys.h +++ b/app/include/dt-bindings/zmk/keys.h @@ -50,7 +50,7 @@ #define LBKT 0x2F #define RBKT 0x30 #define BSLH 0x31 - +#define TILD 0x32 #define SCLN 0x33 #define QUOT 0x34 #define GRAV 0x35 -- cgit v1.2.3 From cdec1645e2e199eabdca408543134fbe7898d337 Mon Sep 17 00:00:00 2001 From: Nick Date: Sun, 2 Aug 2020 20:52:28 -0500 Subject: Fix tabs in keymap bottom row --- app/boards/shields/lily58/keymap/keymap.overlay | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/boards/shields/lily58/keymap/keymap.overlay b/app/boards/shields/lily58/keymap/keymap.overlay index e9da1e7..a198770 100644 --- a/app/boards/shields/lily58/keymap/keymap.overlay +++ b/app/boards/shields/lily58/keymap/keymap.overlay @@ -29,7 +29,7 @@ &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp MINUS &kp LCTL &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SCLN &kp QUOT &kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp LBKT &kp RBKT &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RSFT - &kp LALT &kp LGUI &mo 1 &kp SPC &kp RET &mo 2 &kp BKSP &kp RGUI + &kp LALT &kp LGUI &mo 1 &kp SPC &kp RET &mo 2 &kp BKSP &kp RGUI >; }; @@ -46,7 +46,7 @@ &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp GRAV &kp BANG &kp ATSN &kp HASH &kp CURU &kp PRCT &kp CRRT &kp AMPS &kp KMLT &kp LPRN &kp RPRN &kp TILD &trans &trans &trans &trans &trans &trans &trans &trans &trans &kp MINUS &kp KPLS &kp LCUR &kp RCUR &kp PIPE - &trans &trans &trans &trans &trans &trans &trans &trans + &trans &trans &trans &trans &trans &trans &trans &trans >; }; @@ -63,7 +63,7 @@ &kp GRAV &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 &trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &trans &kp LARW &kp DARW &kp UARW &kp RARW &trans &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &trans &trans &kp KPLS &kp MINUS &kp EQL &kp LBKT &kp RBKT &kp BSLH - &trans &trans &trans &trans &trans &trans &trans &trans + &trans &trans &trans &trans &trans &trans &trans &trans >; }; }; -- cgit v1.2.3 From cfea5cceb1ecb5dc2984ac6e6c0a389d8392f79e Mon Sep 17 00:00:00 2001 From: Nick Date: Mon, 3 Aug 2020 17:22:11 -0500 Subject: Remove updated callback --- app/src/ble.c | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/app/src/ble.c b/app/src/ble.c index db80a36..6526357 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -88,26 +88,12 @@ static bool le_param_req(struct bt_conn *conn, struct bt_le_conn_param *param) { return true; } -static void le_param_updated(struct bt_conn *conn, u16_t interval, - u16_t latency, u16_t timeout) { - static struct bt_conn_info info; - - bt_conn_get_info(conn, &info); - - if (info.role == BT_CONN_ROLE_MASTER && (interval != 6 || latency != 30)) { - bt_conn_le_param_update(conn, BT_LE_CONN_PARAM(0x0006, 0x0006, 30, 400)); - } - - LOG_DBG("Params updated: Interval: %d, Latency: %d", interval, latency); -}; - static struct bt_conn_cb conn_callbacks = { .connected = connected, .disconnected = disconnected, .security_changed = security_changed, #if !IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL) .le_param_req = le_param_req, - .le_param_updated = le_param_updated, #endif }; -- cgit v1.2.3 From 35c8b6b434649db2d9e7b5b698fee9be88b33d94 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Mon, 3 Aug 2020 23:44:53 -0400 Subject: Improved hardware docs. --- docs/docs/hardware.md | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/docs/docs/hardware.md b/docs/docs/hardware.md index 9bd037c..cab1725 100644 --- a/docs/docs/hardware.md +++ b/docs/docs/hardware.md @@ -6,8 +6,34 @@ sidebar_label: Supported Hardware :::warning -ZMK Firmware is still _completely_ untested on real KB hardware. It is pre-pre-pre-alpha quality. +ZMK Firmware is still an early stage project. Many features are still waiting to be implemented, and only a select few keyboards +have had their hardware details codified in boards/shields for ZMK. ::: -Current development of ZMK is focused on ARM, in particular stm32, MCUs, including the stm32wb for BLE support. +Being built on a solid technical foundation of the Zephyr™ RTOS, it's possible to make ZMK support a wide diversity of hardware targets. +That being said, there are currently only a few specific [boards](/docs/faq#what-is-a-board)/[shields](/docs/faq#what-is-a-shield) that have been written and tested by the ZMK contributors. + +## Boards + +- [nice!nano](https://docs.nicekeyboards.com/#/nice!nano/) (`nice_nano`) +- [QMK Proton-C](https://qmk.fm/proton-c/) (`proton_c`) + +## Keyboard Shields + +- [Kyria](https://splitkb.com/products/kyria-pcb-kit) (`kyria_left` and `kyria_right`) +- [Lily58](https://github.com/kata0510/Lily58) (`lily58_left` and `lily58_right`) + +## Other Hardware + +In addition to the basic keyboard functionality, there is some initial support for additional keyboard hardware: + +- Encoders +- OLEDs +- RGB Underglow + +Until detailed documentation is available, feel free to ask questions about how these are supported in the [Discord server](/community/discord/invite). + +## Contributing + +If you'd like to add support for a new keyboard shield, head over to the [New Keyboard Shield](/docs/dev-guide-new-shield) documentation. -- cgit v1.2.3 From b7e150941351835dcdb115afbe97eaedd9b757e8 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Mon, 3 Aug 2020 23:48:17 -0400 Subject: Updated intro that better outlines features. --- docs/docs/intro.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/docs/docs/intro.md b/docs/docs/intro.md index 081f2fa..514c76e 100644 --- a/docs/docs/intro.md +++ b/docs/docs/intro.md @@ -16,20 +16,22 @@ feature. At this point, ZMK is _missing_ more features than it has. Currently, the mostly working bits include: -- HID Over GATT (HOG) - This is the official term for BLE HID devices. -- Keymaps and layers with basic keycodes. -- Some initial work on one "action", Mod-Tap. +- HID Over GATT (HOG) - This is the official term for BLE HID devices +- Keymaps and layers with basic keycodes +- Some initial work on one "behavior", Mod-Tap - Basic HID over USB - Basic consumer (media) keycodes. +- Basic OLED display logic +- Basic Split support +- Encoders ## Missing Features - One Shot - Layer Tap -- Split support -- Encoders +- Complete split support - Battery reporting -- Low power mode. +- Low power mode - Shell over BLE ## Code Of Conduct -- cgit v1.2.3 From 7b3bd01d9bc10aaad78ba259fadecff15704a492 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Tue, 4 Aug 2020 00:48:52 -0400 Subject: Tweak wording on progress of ZMK. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5c75a30..34854f2 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ [![Build](https://github.com/zmkfirmware/zmk/workflows/Build/badge.svg)](https://github.com/zmkfirmware/zmk/actions) [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-v2.0%20adopted-ff69b4.svg)](CODE_OF_CONDUCT.md) -This project is a complete work in progress, with absolutely nothing functioning yet. The goal is to explore a new MK firmware +This project is a complete work in progress, with only basic things functioning. The goal is to explore a new MK firmware with a less restritive license and better BLE support, built on top of the [Zephyr™ Project](https://www.zephyrproject.org/) Check out the website to learn more: https://zmkfirmware.dev/ -- cgit v1.2.3 From e9c2b84c8258499d7e9f2a05a5b88d71718fdc88 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Tue, 4 Aug 2020 13:41:07 -0400 Subject: Initial setup.sh version. --- docs/static/setup.sh | 104 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 docs/static/setup.sh diff --git a/docs/static/setup.sh b/docs/static/setup.sh new file mode 100644 index 0000000..c277449 --- /dev/null +++ b/docs/static/setup.sh @@ -0,0 +1,104 @@ +#!/bin/sh + +set -e + +repo_path="https://github.com/zmkfirmware/zmk-config-split-template.git" +title="ZMK Config Setup:" + + +# TODO: Check for git being installed +# TODO: Check for user.name and user.email git configs being set + +prompt="Pick an MCU board:" +options=("nice!nano" "QMK Proton-C") + +echo "$title" +echo "" +echo "MCU Board Selection:" +PS3="$prompt " +select opt in "${options[@]}" "Quit"; do + + case "$REPLY" in + + 1 ) board="nice_nano"; break;; + 2 ) board="proton_c"; break;; + + $(( ${#options[@]}+1 )) ) echo "Goodbye!"; exit;; + *) echo "Invalid option. Try another one.";continue;; + + esac +done + +#read -p "Is this board a complete keyboard [yN]: " complete +#echo "$complete" + +echo "" +echo "Keyboard Shield Selection:" + +prompt="Pick an keyboard:" +options=("Kyria" "Lily58") + +PS3="$prompt " +select opt in "${options[@]}" "Other" "Quit"; do + + case "$REPLY" in + + 1 ) shield_title="Kyria" shield="kyria"; split="y"; break;; + 2 ) shield_title="Lily58" shield="lily58"; split="y"; break;; + + # Add link to docs on adding your own custom shield in your ZMK config! + $(( ${#options[@]}+1 )) ) echo "Other!"; break;; + $(( ${#options[@]}+2 )) ) echo "Goodbye!"; exit;; + *) echo "Invalid option. Try another one.";continue;; + + esac +done + +read -p "GitHub Username (leave empty to skip GitHub repo creation): " github_user +if [ -n "$github_user" ]; then + read -p "GitHub Repo Name [zmk-config]: " repo_name + if [ -z "$repo_name" ]; then repo_name="zmk-config"; fi + + read -p "GitHub Repo [https://github.com/${github_user}/${repo_name}.git]: " github_repo + + if [ -z "$github_repo" ]; then github_repo="https://github.com/${github_user}/${repo_name}.git"; fi +else + repo_name="zmk-config" +fi + +echo "" +echo "Preparing a user config for:" +echo "* MCU Board: ${board}" +echo "* Shield: ${shield}" +if [ -n "$github_repo" ]; then + echo "* GitHub Repo To Push (please create this in GH first!): ${github_repo}" +fi + +echo "" +read -p "Continue? [Yn]: " do_it + +if [ -n "$do_it" ] && [ "$do_it" != "y" ]; then + echo "Aborting..." + exit +fi + +git clone --single-branch $repo_path ${repo_name} +cd ${repo_name} + +sed -i \ + -e "s/BOARD_NAME/$board/" \ + -e "s/SHIELD_NAME/$shield/" \ + -e "s/KEYBOARD_TITLE/$shield_title/" \ + .github/workflows/build.yml + +mv config/prj.conf "config/${shield}.conf" + +rm -rf .git +git init . +git add . +git commit -m "Initial User Config." + +if [ -n "$github_repo" ]; then + git remote add origin "$github_repo" + git push --set-upstream origin $(git branch --show-current) +fi -- cgit v1.2.3 From fedd4381c2ac5b76a12d6a6dd07e62af876949c8 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Tue, 4 Aug 2020 14:12:10 -0400 Subject: Initial user setup docs, setup script fixes. --- docs/docs/user-setup.md | 147 ++++++++++++++++++++++++++++++++++++++++++++++++ docs/sidebars.js | 2 +- docs/static/setup.sh | 11 +++- 3 files changed, 157 insertions(+), 3 deletions(-) create mode 100644 docs/docs/user-setup.md diff --git a/docs/docs/user-setup.md b/docs/docs/user-setup.md new file mode 100644 index 0000000..fba80ea --- /dev/null +++ b/docs/docs/user-setup.md @@ -0,0 +1,147 @@ +--- +id: user-setup +title: Installing ZMK +sidebar_label: Installing ZMK +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +Unless other keyboard firmwares, ZMK Firmware has been built from the ground up to allow users to manage +their own keyboard configurations, including keymaps, specific hardware details, etc. all outside of the +core ZMK Firmware source repository. + +In addition to this, a focus has been made on avoiding requiring end users who don't intend to develop +new ZMK features from having to install a plethora of complicated dependencies just to use ZMK. + +## Summary + +The following steps can be taken to obtain an installable firmware image for your device, without the need +to install any compiler or specialized toolchain. This is possible by leveraging [GitHub Actions](https://github.com/features/actions) +to build your firmware for you in the cloud, which you can then download and flash to your device. + +Following the steps in this guide, you will: + +1. Create a new repository in GitHub that will contain your user config. +1. Download and run a small shell script that will automate most of the setup. The script will: + 1. Prompt you for which board (e.g. nice!nano) and shield (e.g. Lily58 or Kyria) you want to create a configuration for. + 1. Prompt you for your GitHub username and repo where the config should be pushed. + 1. Use `git` to clone a template repository that will be the basis for your user's config repository. + 1. Use the given board and shield to update the included GitHub Action to build for the correct hardware. + 1. Commit the initial version. + 1. (If info was provided) Push the local repo to your GitHub repository. +1. Add your own keymap overlay (`keymap.overlay`) file to the repository, and change your keymap. +1. Update the configuration flags for your user config, to enable/disable any ZMK features you would like to include. +1. Commit and push the updates to trigger a new GitHub Action run. + +## Prerequisites + +The remainder of this guide assumes the following prequisites: + +1. You have an active, working [GitHub](https://github.com/) account. +1. You have installed and configured the [`git`](https://git-scm.com/) version control tool. + +## GitHub Repo + +Before running the setup script, you will first need to create a new GitHub repository to host the config. + +1. Navigate to [https://github.com/new](https://github.com/new) +1. When prompted for the repo name, enter `zmk-config`. +1. The repository can be public or private +1. Do **not** check any of the options to initialize the repository with a README or other files. +1. Click "Create repository" + +## User Config Setup Script + +To start the setup process, run the following from your command line prompt: + + + + +``` +sh -c "$(curl -fsSL https://zmkfirmware.dev/setup.sh)" +``` + + + + +``` +sh -c "$(wget https://zmkfirmware.dev/setup.sh -O -)" +``` + + + + +### MCU Board Selection + +When prompted, enter the number for the corresponding MCU board you would like to target: + +``` +MCU Board Selection: +1) nice!nano +2) QMK Proton-C +3) Quit +Pick an MCU board: +``` + +### Keyboard Shield Selection + +When prompted, enter the number for the corresponding keyboard shield you would like to target: + +``` +Keyboard Shield Selection: +1) Kyria +2) Lily58 +3) Quit +Pick an keyboard: +``` + +### GitHub Details + +In order to have your new configuration automatically pushed, and then built using GitHub Actions, enter +some information about your particular GitHub info: + +``` +GitHub Username (leave empty to skip GitHub repo creation): petejohanson +GitHub Repo Name [zmk-config]: +GitHub Repo [https://github.com/petejohanson/zmk-config.git]: +``` + +Only the GitHub username is required; if you are happy with the defaults offered in the square brackets, you can simply hit `Enter`. + +### Confirming Selections + +The setup script will confirm all of your selections one last time, before performing the setup: + +``` +Preparing a user config for: +* MCU Board: nice_nano +* Shield: kyria +* GitHub Repo To Push (please create this in GH first!): https://github.com/petejohanson/zmk-config.git + +Continue? [Yn]: +``` + +After hitting `Enter` or typing `y`, the script will create an initial config in a directory named after the repo name, +update the GitHub Action YAML file, commit the initial version, and then push to your repo. + +:::info + +If you used the default GitHub repo URL using the `https://` scheme, you may be prompted for your username + password in order to +push the initial commit. + +::: + +## Accessing Built Firmware + +Once the setup script is complete and the new user config repository has been pushed, GitHub will automatically run the action +to build your keyboard firmware files. You can view the actions by clicking on the "Actions" tab on your GitHub repository. + +## Keymap Changes + +TODO: Document how to add your own keymap! diff --git a/docs/sidebars.js b/docs/sidebars.js index 1ed1bdb..f6369a5 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -1,6 +1,6 @@ module.exports = { someSidebar: { - "Getting Started": ["intro", "faq", "hardware"], + "Getting Started": ["intro", "hardware", "user-setup", "faq"], Development: [ "dev-clean-room", "dev-setup", diff --git a/docs/static/setup.sh b/docs/static/setup.sh index c277449..23ab42b 100644 --- a/docs/static/setup.sh +++ b/docs/static/setup.sh @@ -39,6 +39,8 @@ prompt="Pick an keyboard:" options=("Kyria" "Lily58") PS3="$prompt " +# TODO: Add support for "Other" and linking to docs on adding custom shields in user config repos. +# select opt in "${options[@]}" "Other" "Quit"; do select opt in "${options[@]}" "Other" "Quit"; do case "$REPLY" in @@ -47,8 +49,8 @@ select opt in "${options[@]}" "Other" "Quit"; do 2 ) shield_title="Lily58" shield="lily58"; split="y"; break;; # Add link to docs on adding your own custom shield in your ZMK config! - $(( ${#options[@]}+1 )) ) echo "Other!"; break;; - $(( ${#options[@]}+2 )) ) echo "Goodbye!"; exit;; + # $(( ${#options[@]}+1 )) ) echo "Other!"; break;; + $(( ${#options[@]}+1 )) ) echo "Goodbye!"; exit;; *) echo "Invalid option. Try another one.";continue;; esac @@ -101,4 +103,9 @@ git commit -m "Initial User Config." if [ -n "$github_repo" ]; then git remote add origin "$github_repo" git push --set-upstream origin $(git branch --show-current) + + # TODO: Support determing the actions URL when non-https:// repo URL is used. + if [ "${github_repo}" != "${github_repo#https://}" ]; then + echo "Your firmware should be available from the GitHub Actions shortly: ${github_url%.git}/actions" + fi fi -- cgit v1.2.3 From 977259f906a5a73e60bff897cc4160dd617a59b9 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Tue, 4 Aug 2020 14:15:23 -0400 Subject: Better wording on user setup intro. --- docs/docs/user-setup.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docs/user-setup.md b/docs/docs/user-setup.md index fba80ea..410f948 100644 --- a/docs/docs/user-setup.md +++ b/docs/docs/user-setup.md @@ -11,8 +11,8 @@ Unless other keyboard firmwares, ZMK Firmware has been built from the ground up their own keyboard configurations, including keymaps, specific hardware details, etc. all outside of the core ZMK Firmware source repository. -In addition to this, a focus has been made on avoiding requiring end users who don't intend to develop -new ZMK features from having to install a plethora of complicated dependencies just to use ZMK. +In addition to this, most users do not need to install any complicated toolchains or tools to build ZMK, +instead using GitHub Actions to automatically build the user's configured firmware for them. ## Summary -- cgit v1.2.3 From 761601be5b9ecb4f4108249f34732d2490e614a6 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Tue, 4 Aug 2020 14:19:32 -0400 Subject: Typo fix. --- docs/docs/user-setup.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/user-setup.md b/docs/docs/user-setup.md index 410f948..de2f57d 100644 --- a/docs/docs/user-setup.md +++ b/docs/docs/user-setup.md @@ -7,7 +7,7 @@ sidebar_label: Installing ZMK import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; -Unless other keyboard firmwares, ZMK Firmware has been built from the ground up to allow users to manage +Unlike other keyboard firmwares, ZMK Firmware has been built from the ground up to allow users to manage their own keyboard configurations, including keymaps, specific hardware details, etc. all outside of the core ZMK Firmware source repository. -- cgit v1.2.3 From db586b1ce08b7ec286147c54896e3a42b56b94af Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Wed, 5 Aug 2020 14:02:37 -0400 Subject: Update to latest V2 Docusaurus. --- docs/docusaurus.config.js | 4 +- docs/package-lock.json | 3933 +++++++++++++++++++++++++-------------------- docs/package.json | 4 +- 3 files changed, 2197 insertions(+), 1744 deletions(-) diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index b17312d..a24f395 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -14,7 +14,7 @@ module.exports = { alt: "ZMK Logo", src: "img/zmk_logo.svg", }, - links: [ + items: [ { to: "docs/", activeBasePath: "docs", @@ -54,7 +54,7 @@ module.exports = { // }, { label: "Discord", - href: "/community/discord/invite", + href: "https://zmkfirmware.dev/community/discord/invite", }, { label: "Twitter", diff --git a/docs/package-lock.json b/docs/package-lock.json index ee3f1c2..ef531cd 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -4,20 +4,135 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@algolia/cache-browser-local-storage": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.3.1.tgz", + "integrity": "sha512-pNelJomUeeQS5ZagEeUti8HltrfJbqXHnZXB1fez4Ycdm7GsEQm0r6fRCfx+1/6hqQJNo5zQUSA4ZgWi8VMs4Q==", + "requires": { + "@algolia/cache-common": "4.3.1" + } + }, + "@algolia/cache-common": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.3.1.tgz", + "integrity": "sha512-BgZVQKfQ3rYSKHDbEuYeIHgQ7cIqbDVUe8gPib/YI6hB2FWdt3hQyDqKslulBt65MxZ5CLSrWg8mq/qL077Bog==" + }, + "@algolia/cache-in-memory": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.3.1.tgz", + "integrity": "sha512-bd2Aqn8efGJpR8snjUvBJIONyQ2uqYQSbFH9rTrLPmJPMYdoTKTcVLrtpOhOlmvTTfguhqlv+zIjYdJcraeBvg==", + "requires": { + "@algolia/cache-common": "4.3.1" + } + }, + "@algolia/client-account": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.3.1.tgz", + "integrity": "sha512-062Cxw61llvkeHS2bWghufNI0munw5fKGZBhUfDdnC7lsJpzYJwQdkdchzLqqIOXZa8k9vdLlnlKHk8f53E5fQ==", + "requires": { + "@algolia/client-common": "4.3.1", + "@algolia/client-search": "4.3.1", + "@algolia/transporter": "4.3.1" + } + }, + "@algolia/client-analytics": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.3.1.tgz", + "integrity": "sha512-+/gn1z3oAh2CE0xox7/Df9SseHcOuqgm4ngSXGh1cWpldsF+gioA9HWSh/4RSydViASKu3YIk5O61zFzVTKbOA==", + "requires": { + "@algolia/client-common": "4.3.1", + "@algolia/client-search": "4.3.1", + "@algolia/requester-common": "4.3.1", + "@algolia/transporter": "4.3.1" + } + }, + "@algolia/client-common": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.3.1.tgz", + "integrity": "sha512-1dcADKy3F/gMN+s+p5yvYdF6A4L5YEY0ll4JjSHGKXvZyWLDxKjyu/ToeUuHlrutWQu9w8UT2X7urES8BZU5WQ==", + "requires": { + "@algolia/requester-common": "4.3.1", + "@algolia/transporter": "4.3.1" + } + }, + "@algolia/client-recommendation": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@algolia/client-recommendation/-/client-recommendation-4.3.1.tgz", + "integrity": "sha512-4WZ9Pa2waOkpqv5acom4f8XBBlrnafeEwcSK4R0msubHJpUdkvD/+rxT5Ya1/0FAGvBPhOvtOJqsauaJYKM2Dw==", + "requires": { + "@algolia/client-common": "4.3.1", + "@algolia/requester-common": "4.3.1", + "@algolia/transporter": "4.3.1" + } + }, + "@algolia/client-search": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.3.1.tgz", + "integrity": "sha512-BGI8+8Gi3OELHtyXHflGz0Ms0DQLUQFu2Hs4us3L9gidyYhuvjl76x8EOOQRkXhQcWzEeqx+L2c2InTKtNfQfg==", + "requires": { + "@algolia/client-common": "4.3.1", + "@algolia/requester-common": "4.3.1", + "@algolia/transporter": "4.3.1" + } + }, + "@algolia/logger-common": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.3.1.tgz", + "integrity": "sha512-HOY89EkxFFR0LjeqE+fqaF3EeQUAYFdVdrAXsnrWhm/OsAlXiy+vsoHL4EaJLXvTQlJRBbgNyyQv8ZPAN9JLCw==" + }, + "@algolia/logger-console": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.3.1.tgz", + "integrity": "sha512-aIJ2N++eTVLkwGFxb1AY60hxYIrNf3FgaEMkokPOAV7sPoWThITSQPj/2vruRLJsYZS2EnD8jxiETrCwSet7mw==", + "requires": { + "@algolia/logger-common": "4.3.1" + } + }, + "@algolia/requester-browser-xhr": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.3.1.tgz", + "integrity": "sha512-aSkBWqt9IjZYzmJpP14ISO9tizjyumwAmGxnx2t/QuE3LUh/sJG2FL3Vvq44wjNk9yTPC/c1yiQA85IqeqGZ7g==", + "requires": { + "@algolia/requester-common": "4.3.1" + } + }, + "@algolia/requester-common": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.3.1.tgz", + "integrity": "sha512-2lu0gOB2Rt4mn9gKDxjB8rY2IvU4usDA8bZVGl5tf/E81kRovtDZcgZjuKQ5zMyJ/xuIYXjx+ECXAxjUnNhieA==" + }, + "@algolia/requester-node-http": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.3.1.tgz", + "integrity": "sha512-CnVQ5fHJVsvOZjOIagAIWW315NwGF/spBT5o8/+9ZFTuKQTeLk8/jdj7OXKZ2+vbWkqDM1sKMFXH2jyHOlZjtQ==", + "requires": { + "@algolia/requester-common": "4.3.1" + } + }, + "@algolia/transporter": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.3.1.tgz", + "integrity": "sha512-fbA/XHjdVoO+sp+rPVe/+oK/mCac0S6VugMycg7Etujb4+6nv3STIZxtPiC+Xppbouh5tEEOE81F1aALHXBkBQ==", + "requires": { + "@algolia/cache-common": "4.3.1", + "@algolia/logger-common": "4.3.1", + "@algolia/requester-common": "4.3.1" + } + }, "@babel/code-frame": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", - "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", "requires": { - "@babel/highlight": "^7.8.3" + "@babel/highlight": "^7.10.4" } }, "@babel/compat-data": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.9.6.tgz", - "integrity": "sha512-5QPTrNen2bm7RBc7dsOmcA5hbrS4O2Vhmk5XOL4zWW/zD/hV0iinpefDlkm+tBBy8kDtFaaeEvmAqt+nURAV2g==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.11.0.tgz", + "integrity": "sha512-TPSvJfv73ng0pfnEOh17bYMPQbI95+nGWc71Ss4vZdRBHTDqmM9Z8ZV4rYz8Ks7sfzc95n30k6ODIq5UGnXcYQ==", "requires": { - "browserslist": "^4.11.1", + "browserslist": "^4.12.0", "invariant": "^2.2.4", "semver": "^5.5.0" }, @@ -30,23 +145,23 @@ } }, "@babel/core": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.6.tgz", - "integrity": "sha512-nD3deLvbsApbHAHttzIssYqgb883yU/d9roe4RZymBCDaZryMJDbptVpEpeQuRh4BJ+SYI8le9YGxKvFEvl1Wg==", - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.9.6", - "@babel/helper-module-transforms": "^7.9.0", - "@babel/helpers": "^7.9.6", - "@babel/parser": "^7.9.6", - "@babel/template": "^7.8.6", - "@babel/traverse": "^7.9.6", - "@babel/types": "^7.9.6", + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.1.tgz", + "integrity": "sha512-XqF7F6FWQdKGGWAzGELL+aCO1p+lRY5Tj5/tbT3St1G8NaH70jhhDIKknIZaDans0OQBG5wRAldROLHSt44BgQ==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.11.0", + "@babel/helper-module-transforms": "^7.11.0", + "@babel/helpers": "^7.10.4", + "@babel/parser": "^7.11.1", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.11.0", + "@babel/types": "^7.11.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", "json5": "^2.1.2", - "lodash": "^4.17.13", + "lodash": "^4.17.19", "resolve": "^1.3.2", "semver": "^5.4.1", "source-map": "^0.5.0" @@ -60,59 +175,58 @@ } }, "@babel/generator": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.6.tgz", - "integrity": "sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.0.tgz", + "integrity": "sha512-fEm3Uzw7Mc9Xi//qU20cBKatTfs2aOtKqmvy/Vm7RkJEGFQ4xc9myCfbXxqK//ZS8MR/ciOHw6meGASJuKmDfQ==", "requires": { - "@babel/types": "^7.9.6", + "@babel/types": "^7.11.0", "jsesc": "^2.5.1", - "lodash": "^4.17.13", "source-map": "^0.5.0" } }, "@babel/helper-annotate-as-pure": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz", - "integrity": "sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", + "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", "requires": { - "@babel/types": "^7.8.3" + "@babel/types": "^7.10.4" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz", - "integrity": "sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", + "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", "requires": { - "@babel/helper-explode-assignable-expression": "^7.8.3", - "@babel/types": "^7.8.3" + "@babel/helper-explode-assignable-expression": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-builder-react-jsx": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.9.0.tgz", - "integrity": "sha512-weiIo4gaoGgnhff54GQ3P5wsUQmnSwpkvU0r6ZHq6TzoSzKy4JxHEgnxNytaKbov2a9z/CVNyzliuCOUPEX3Jw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.4.tgz", + "integrity": "sha512-5nPcIZ7+KKDxT1427oBivl9V9YTal7qk0diccnh7RrcgrT/pGFOjgGw1dgryyx1GvHEpXVfoDF6Ak3rTiWh8Rg==", "requires": { - "@babel/helper-annotate-as-pure": "^7.8.3", - "@babel/types": "^7.9.0" + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-builder-react-jsx-experimental": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.9.5.tgz", - "integrity": "sha512-HAagjAC93tk748jcXpZ7oYRZH485RCq/+yEv9SIWezHRPv9moZArTnkUNciUNzvwHUABmiWKlcxJvMcu59UwTg==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.10.5.tgz", + "integrity": "sha512-Buewnx6M4ttG+NLkKyt7baQn7ScC/Td+e99G914fRU8fGIUivDDgVIQeDHFa5e4CRSJQt58WpNHhsAZgtzVhsg==", "requires": { - "@babel/helper-annotate-as-pure": "^7.8.3", - "@babel/helper-module-imports": "^7.8.3", - "@babel/types": "^7.9.5" + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-module-imports": "^7.10.4", + "@babel/types": "^7.10.5" } }, "@babel/helper-compilation-targets": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.9.6.tgz", - "integrity": "sha512-x2Nvu0igO0ejXzx09B/1fGBxY9NXQlBW2kZsSxCJft+KHN8t9XWzIvFxtPHnBOAXpVsdxZKZFbRUC8TsNKajMw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz", + "integrity": "sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ==", "requires": { - "@babel/compat-data": "^7.9.6", - "browserslist": "^4.11.1", + "@babel/compat-data": "^7.10.4", + "browserslist": "^4.12.0", "invariant": "^2.2.4", "levenary": "^1.1.1", "semver": "^5.5.0" @@ -126,196 +240,204 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.9.6.tgz", - "integrity": "sha512-6N9IeuyHvMBRyjNYOMJHrhwtu4WJMrYf8hVbEHD3pbbbmNOk1kmXSQs7bA4dYDUaIx4ZEzdnvo6NwC3WHd/Qow==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz", + "integrity": "sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A==", "requires": { - "@babel/helper-function-name": "^7.9.5", - "@babel/helper-member-expression-to-functions": "^7.8.3", - "@babel/helper-optimise-call-expression": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/helper-replace-supers": "^7.9.6", - "@babel/helper-split-export-declaration": "^7.8.3" + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-member-expression-to-functions": "^7.10.5", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4" } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.8.8", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.8.tgz", - "integrity": "sha512-LYVPdwkrQEiX9+1R29Ld/wTrmQu1SSKYnuOk3g0CkcZMA1p0gsNxJFj/3gBdaJ7Cg0Fnek5z0DsMULePP7Lrqg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz", + "integrity": "sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g==", "requires": { - "@babel/helper-annotate-as-pure": "^7.8.3", - "@babel/helper-regex": "^7.8.3", + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-regex": "^7.10.4", "regexpu-core": "^4.7.0" } }, "@babel/helper-define-map": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz", - "integrity": "sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", + "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", "requires": { - "@babel/helper-function-name": "^7.8.3", - "@babel/types": "^7.8.3", - "lodash": "^4.17.13" + "@babel/helper-function-name": "^7.10.4", + "@babel/types": "^7.10.5", + "lodash": "^4.17.19" } }, "@babel/helper-explode-assignable-expression": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz", - "integrity": "sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.4.tgz", + "integrity": "sha512-4K71RyRQNPRrR85sr5QY4X3VwG4wtVoXZB9+L3r1Gp38DhELyHCtovqydRi7c1Ovb17eRGiQ/FD5s8JdU0Uy5A==", "requires": { - "@babel/traverse": "^7.8.3", - "@babel/types": "^7.8.3" + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-function-name": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz", - "integrity": "sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", "requires": { - "@babel/helper-get-function-arity": "^7.8.3", - "@babel/template": "^7.8.3", - "@babel/types": "^7.9.5" + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-get-function-arity": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", - "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", "requires": { - "@babel/types": "^7.8.3" + "@babel/types": "^7.10.4" } }, "@babel/helper-hoist-variables": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz", - "integrity": "sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", + "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", "requires": { - "@babel/types": "^7.8.3" + "@babel/types": "^7.10.4" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz", - "integrity": "sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz", + "integrity": "sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q==", "requires": { - "@babel/types": "^7.8.3" + "@babel/types": "^7.11.0" } }, "@babel/helper-module-imports": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz", - "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", + "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", "requires": { - "@babel/types": "^7.8.3" + "@babel/types": "^7.10.4" } }, "@babel/helper-module-transforms": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz", - "integrity": "sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz", + "integrity": "sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg==", "requires": { - "@babel/helper-module-imports": "^7.8.3", - "@babel/helper-replace-supers": "^7.8.6", - "@babel/helper-simple-access": "^7.8.3", - "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/template": "^7.8.6", - "@babel/types": "^7.9.0", - "lodash": "^4.17.13" + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-simple-access": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/template": "^7.10.4", + "@babel/types": "^7.11.0", + "lodash": "^4.17.19" } }, "@babel/helper-optimise-call-expression": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz", - "integrity": "sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", + "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", "requires": { - "@babel/types": "^7.8.3" + "@babel/types": "^7.10.4" } }, "@babel/helper-plugin-utils": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz", - "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==" + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" }, "@babel/helper-regex": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.8.3.tgz", - "integrity": "sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz", + "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==", "requires": { - "lodash": "^4.17.13" + "lodash": "^4.17.19" } }, "@babel/helper-remap-async-to-generator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz", - "integrity": "sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.4.tgz", + "integrity": "sha512-86Lsr6NNw3qTNl+TBcF1oRZMaVzJtbWTyTko+CQL/tvNvcGYEFKbLXDPxtW0HKk3McNOk4KzY55itGWCAGK5tg==", "requires": { - "@babel/helper-annotate-as-pure": "^7.8.3", - "@babel/helper-wrap-function": "^7.8.3", - "@babel/template": "^7.8.3", - "@babel/traverse": "^7.8.3", - "@babel/types": "^7.8.3" + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-wrap-function": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-replace-supers": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.9.6.tgz", - "integrity": "sha512-qX+chbxkbArLyCImk3bWV+jB5gTNU/rsze+JlcF6Nf8tVTigPJSI1o1oBow/9Resa1yehUO9lIipsmu9oG4RzA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", + "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", "requires": { - "@babel/helper-member-expression-to-functions": "^7.8.3", - "@babel/helper-optimise-call-expression": "^7.8.3", - "@babel/traverse": "^7.9.6", - "@babel/types": "^7.9.6" + "@babel/helper-member-expression-to-functions": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-simple-access": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz", - "integrity": "sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz", + "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==", + "requires": { + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.11.0.tgz", + "integrity": "sha512-0XIdiQln4Elglgjbwo9wuJpL/K7AGCY26kmEt0+pRP0TAj4jjyNq1MjoRvikrTVqKcx4Gysxt4cXvVFXP/JO2Q==", "requires": { - "@babel/template": "^7.8.3", - "@babel/types": "^7.8.3" + "@babel/types": "^7.11.0" } }, "@babel/helper-split-export-declaration": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", - "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", + "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", "requires": { - "@babel/types": "^7.8.3" + "@babel/types": "^7.11.0" } }, "@babel/helper-validator-identifier": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz", - "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==" + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" }, "@babel/helper-wrap-function": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz", - "integrity": "sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz", + "integrity": "sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug==", "requires": { - "@babel/helper-function-name": "^7.8.3", - "@babel/template": "^7.8.3", - "@babel/traverse": "^7.8.3", - "@babel/types": "^7.8.3" + "@babel/helper-function-name": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helpers": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.6.tgz", - "integrity": "sha512-tI4bUbldloLcHWoRUMAj4g1bF313M/o6fBKhIsb3QnGVPwRm9JsNf/gqMkQ7zjqReABiffPV6RWj7hEglID5Iw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.4.tgz", + "integrity": "sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==", "requires": { - "@babel/template": "^7.8.3", - "@babel/traverse": "^7.9.6", - "@babel/types": "^7.9.6" + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/highlight": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", - "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", "requires": { - "@babel/helper-validator-identifier": "^7.9.0", + "@babel/helper-validator-identifier": "^7.10.4", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -333,91 +455,128 @@ } }, "@babel/parser": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.6.tgz", - "integrity": "sha512-AoeIEJn8vt+d/6+PXDRPaksYhnlbMIiejioBZvvMQsOjW/JYK6k/0dKnvvP3EhK5GfMBWDPtrxRtegWdAcdq9Q==" + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.1.tgz", + "integrity": "sha512-u9QMIRdKVF7hfEkb3nu2LgZDIzCQPv+yHD9Eg6ruoJLjkrQ9fFz4IBSlF/9XwoNri9+2F1IY+dYuOfZrXq8t3w==" }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz", - "integrity": "sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz", + "integrity": "sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg==", "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/helper-remap-async-to-generator": "^7.8.3", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.10.4", "@babel/plugin-syntax-async-generators": "^7.8.0" } }, + "@babel/plugin-proposal-class-properties": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz", + "integrity": "sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, "@babel/plugin-proposal-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz", - "integrity": "sha512-NyaBbyLFXFLT9FP+zk0kYlUlA8XtCUbehs67F0nnEg7KICgMc2mNkIeu9TYhKzyXMkrapZFwAhXLdnt4IYHy1w==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz", + "integrity": "sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ==", "requires": { - "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-dynamic-import": "^7.8.0" } }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.10.4.tgz", + "integrity": "sha512-aNdf0LY6/3WXkhh0Fdb6Zk9j1NMD8ovj3F6r0+3j837Pn1S1PdNtcwJ5EG9WkVPNHPxyJDaxMaAOVq4eki0qbg==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, "@babel/plugin-proposal-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz", - "integrity": "sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz", + "integrity": "sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw==", "requires": { - "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.0" } }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.11.0.tgz", + "integrity": "sha512-/f8p4z+Auz0Uaf+i8Ekf1iM7wUNLcViFUGiPxKeXvxTSl63B875YPiVdUDdem7hREcI0E0kSpEhS8tF5RphK7Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz", + "integrity": "sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw==", "requires": { - "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" } }, "@babel/plugin-proposal-numeric-separator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.8.3.tgz", - "integrity": "sha512-jWioO1s6R/R+wEHizfaScNsAx+xKgwTLNXSh7tTC4Usj3ItsPEhYkEpU4h+lpnBwq7NBVOJXfO6cRFYcX69JUQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz", + "integrity": "sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA==", "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.6.tgz", - "integrity": "sha512-Ga6/fhGqA9Hj+y6whNpPv8psyaK5xzrQwSPsGPloVkvmH+PqW1ixdnfJ9uIO06OjQNYol3PMnfmJ8vfZtkzF+A==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz", + "integrity": "sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA==", "requires": { - "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.9.5" + "@babel/plugin-transform-parameters": "^7.10.4" } }, "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz", + "integrity": "sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g==", "requires": { - "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" } }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.9.0.tgz", - "integrity": "sha512-NDn5tu3tcv4W30jNhmc2hyD5c56G6cXx4TesJubhxrJeCvuuMpttxr0OnNCqbZGhFjLrg+NIhxxC+BK5F6yS3w==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.11.0.tgz", + "integrity": "sha512-v9fZIu3Y8562RRwhm1BbMRxtqZNFmFA2EG+pT2diuU8PT3H6T/KXoZ54KgYisfOFZHV6PfvAiBIZ9Rcz+/JCxA==", "requires": { - "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "^7.11.0", "@babel/plugin-syntax-optional-chaining": "^7.8.0" } }, + "@babel/plugin-proposal-private-methods": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz", + "integrity": "sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.8.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.8.tgz", - "integrity": "sha512-EVhjVsMpbhLw9ZfHWSx2iy13Q8Z/eg8e8ccVWt23sWQK5l1UdkoLJPN5w69UA4uITGBnEZD2JOe4QOHycYKv8A==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz", + "integrity": "sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.8.8", - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-syntax-async-generators": { @@ -428,6 +587,14 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-class-properties": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz", + "integrity": "sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, "@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", @@ -436,6 +603,14 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, "@babel/plugin-syntax-json-strings": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", @@ -445,11 +620,19 @@ } }, "@babel/plugin-syntax-jsx": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.8.3.tgz", - "integrity": "sha512-WxdW9xyLgBdefoo0Ynn3MRSkhe5tFVxxKNVdnZSh318WrG2e2jH+E9wd/++JsqcLJZPfz87njQJ8j2Upjm0M0A==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz", + "integrity": "sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g==", "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-syntax-nullish-coalescing-operator": { @@ -461,11 +644,11 @@ } }, "@babel/plugin-syntax-numeric-separator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.8.3.tgz", - "integrity": "sha512-H7dCMAdN83PcCmqmkHB5dtp+Xa9a6LKSvA2hiFBC/5alSHxM5VgWZXFqDi0YFe8XNGT6iCa+z4V4zSt/PdZ7Dw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-syntax-object-rest-spread": { @@ -493,307 +676,315 @@ } }, "@babel/plugin-syntax-top-level-await": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.3.tgz", - "integrity": "sha512-kwj1j9lL/6Wd0hROD3b/OZZ7MSrZLqqn9RAZ5+cYYsflQ9HZBIKCUkr3+uL1MEJ1NePiUbf98jjiMQSv0NMR9g==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz", + "integrity": "sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ==", "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-syntax-typescript": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.8.3.tgz", - "integrity": "sha512-GO1MQ/SGGGoiEXY0e0bSpHimJvxqB7lktLLIq2pv8xG7WZ8IMEle74jIe1FhprHBWjwjZtXHkycDLZXIWM5Wfg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.10.4.tgz", + "integrity": "sha512-oSAEz1YkBCAKr5Yiq8/BNtvSAPwkp/IyUnwZogd8p+F0RuYQQrLeRUzIQhueQTTBy/F+a40uS7OFKxnkRvmvFQ==", "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz", - "integrity": "sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz", + "integrity": "sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA==", "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz", - "integrity": "sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz", + "integrity": "sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ==", "requires": { - "@babel/helper-module-imports": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/helper-remap-async-to-generator": "^7.8.3" + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.10.4" } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz", - "integrity": "sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz", + "integrity": "sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA==", "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz", - "integrity": "sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w==", + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.11.1.tgz", + "integrity": "sha512-00dYeDE0EVEHuuM+26+0w/SCL0BH2Qy7LwHuI4Hi4MH5gkC8/AqMN5uWFJIsoXZrAphiMm1iXzBw6L2T+eA0ew==", "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "lodash": "^4.17.13" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-classes": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.5.tgz", - "integrity": "sha512-x2kZoIuLC//O5iA7PEvecB105o7TLzZo8ofBVhP79N+DO3jaX+KYfww9TQcfBEZD0nikNyYcGB1IKtRq36rdmg==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.8.3", - "@babel/helper-define-map": "^7.8.3", - "@babel/helper-function-name": "^7.9.5", - "@babel/helper-optimise-call-expression": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/helper-replace-supers": "^7.8.6", - "@babel/helper-split-export-declaration": "^7.8.3", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz", + "integrity": "sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-define-map": "^7.10.4", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", "globals": "^11.1.0" } }, "@babel/plugin-transform-computed-properties": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz", - "integrity": "sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz", + "integrity": "sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw==", "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-destructuring": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.9.5.tgz", - "integrity": "sha512-j3OEsGel8nHL/iusv/mRd5fYZ3DrOxWC82x0ogmdN/vHfAP4MYw+AFKYanzWlktNwikKvlzUV//afBW5FTp17Q==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz", + "integrity": "sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA==", "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz", - "integrity": "sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz", + "integrity": "sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz", - "integrity": "sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz", + "integrity": "sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA==", "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz", - "integrity": "sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz", + "integrity": "sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw==", "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-for-of": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz", - "integrity": "sha512-lTAnWOpMwOXpyDx06N+ywmF3jNbafZEqZ96CGYabxHrxNX8l5ny7dt4bK/rGwAh9utyP2b2Hv7PlZh1AAS54FQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz", + "integrity": "sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ==", "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-function-name": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz", - "integrity": "sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz", + "integrity": "sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg==", "requires": { - "@babel/helper-function-name": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-literals": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz", - "integrity": "sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz", + "integrity": "sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ==", "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-member-expression-literals": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.3.tgz", - "integrity": "sha512-3Wk2EXhnw+rP+IDkK6BdtPKsUE5IeZ6QOGrPYvw52NwBStw9V1ZVzxgK6fSKSxqUvH9eQPR3tm3cOq79HlsKYA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz", + "integrity": "sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw==", "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-modules-amd": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.6.tgz", - "integrity": "sha512-zoT0kgC3EixAyIAU+9vfaUVKTv9IxBDSabgHoUCBP6FqEJ+iNiN7ip7NBKcYqbfUDfuC2mFCbM7vbu4qJgOnDw==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz", + "integrity": "sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw==", "requires": { - "@babel/helper-module-transforms": "^7.9.0", - "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-module-transforms": "^7.10.5", + "@babel/helper-plugin-utils": "^7.10.4", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.6.tgz", - "integrity": "sha512-7H25fSlLcn+iYimmsNe3uK1at79IE6SKW9q0/QeEHTMC9MdOZ+4bA+T1VFB5fgOqBWoqlifXRzYD0JPdmIrgSQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz", + "integrity": "sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w==", "requires": { - "@babel/helper-module-transforms": "^7.9.0", - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/helper-simple-access": "^7.8.3", + "@babel/helper-module-transforms": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-simple-access": "^7.10.4", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.6.tgz", - "integrity": "sha512-NW5XQuW3N2tTHim8e1b7qGy7s0kZ2OH3m5octc49K1SdAKGxYxeIx7hiIz05kS1R2R+hOWcsr1eYwcGhrdHsrg==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz", + "integrity": "sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw==", "requires": { - "@babel/helper-hoist-variables": "^7.8.3", - "@babel/helper-module-transforms": "^7.9.0", - "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-hoist-variables": "^7.10.4", + "@babel/helper-module-transforms": "^7.10.5", + "@babel/helper-plugin-utils": "^7.10.4", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.9.0.tgz", - "integrity": "sha512-uTWkXkIVtg/JGRSIABdBoMsoIeoHQHPTL0Y2E7xf5Oj7sLqwVsNXOkNk0VJc7vF0IMBsPeikHxFjGe+qmwPtTQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz", + "integrity": "sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA==", "requires": { - "@babel/helper-module-transforms": "^7.9.0", - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-module-transforms": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz", - "integrity": "sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz", + "integrity": "sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.8.3" + "@babel/helper-create-regexp-features-plugin": "^7.10.4" } }, "@babel/plugin-transform-new-target": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz", - "integrity": "sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz", + "integrity": "sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw==", "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-object-super": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz", - "integrity": "sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz", + "integrity": "sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ==", "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/helper-replace-supers": "^7.8.3" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4" } }, "@babel/plugin-transform-parameters": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.5.tgz", - "integrity": "sha512-0+1FhHnMfj6lIIhVvS4KGQJeuhe1GI//h5uptK4PvLt+BGBxsoUJbd3/IW002yk//6sZPlFgsG1hY6OHLcy6kA==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz", + "integrity": "sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw==", "requires": { - "@babel/helper-get-function-arity": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-property-literals": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.3.tgz", - "integrity": "sha512-uGiiXAZMqEoQhRWMK17VospMZh5sXWg+dlh2soffpkAl96KAm+WZuJfa6lcELotSRmooLqg0MWdH6UUq85nmmg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz", + "integrity": "sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g==", "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-react-constant-elements": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.9.0.tgz", - "integrity": "sha512-wXMXsToAUOxJuBBEHajqKLFWcCkOSLshTI2ChCFFj1zDd7od4IOxiwLCOObNUvOpkxLpjIuaIdBMmNt6ocCPAw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.10.4.tgz", + "integrity": "sha512-cYmQBW1pXrqBte1raMkAulXmi7rjg3VI6ZLg9QIic8Hq7BtYXaWuZSxsr2siOMI6SWwpxjWfnwhTUrd7JlAV7g==", "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-react-display-name": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.8.3.tgz", - "integrity": "sha512-3Jy/PCw8Fe6uBKtEgz3M82ljt+lTg+xJaM4og+eyu83qLT87ZUSckn0wy7r31jflURWLO83TW6Ylf7lyXj3m5A==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.10.4.tgz", + "integrity": "sha512-Zd4X54Mu9SBfPGnEcaGcOrVAYOtjT2on8QZkLKEq1S/tHexG39d9XXGZv19VfRrDjPJzFmPfTAqOQS1pfFOujw==", "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-react-jsx": { - "version": "7.9.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.9.4.tgz", - "integrity": "sha512-Mjqf3pZBNLt854CK0C/kRuXAnE6H/bo7xYojP+WGtX8glDGSibcwnsWwhwoSuRg0+EBnxPC1ouVnuetUIlPSAw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.10.4.tgz", + "integrity": "sha512-L+MfRhWjX0eI7Js093MM6MacKU4M6dnCRa/QPDwYMxjljzSCzzlzKzj9Pk4P3OtrPcxr2N3znR419nr3Xw+65A==", "requires": { - "@babel/helper-builder-react-jsx": "^7.9.0", - "@babel/helper-builder-react-jsx-experimental": "^7.9.0", - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-jsx": "^7.8.3" + "@babel/helper-builder-react-jsx": "^7.10.4", + "@babel/helper-builder-react-jsx-experimental": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-jsx": "^7.10.4" } }, "@babel/plugin-transform-react-jsx-development": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.9.0.tgz", - "integrity": "sha512-tK8hWKrQncVvrhvtOiPpKrQjfNX3DtkNLSX4ObuGcpS9p0QrGetKmlySIGR07y48Zft8WVgPakqd/bk46JrMSw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.10.4.tgz", + "integrity": "sha512-RM3ZAd1sU1iQ7rI2dhrZRZGv0aqzNQMbkIUCS1txYpi9wHQ2ZHNjo5TwX+UD6pvFW4AbWqLVYvKy5qJSAyRGjQ==", "requires": { - "@babel/helper-builder-react-jsx-experimental": "^7.9.0", - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-jsx": "^7.8.3" + "@babel/helper-builder-react-jsx-experimental": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-jsx": "^7.10.4" } }, "@babel/plugin-transform-react-jsx-self": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.9.0.tgz", - "integrity": "sha512-K2ObbWPKT7KUTAoyjCsFilOkEgMvFG+y0FqOl6Lezd0/13kMkkjHskVsZvblRPj1PHA44PrToaZANrryppzTvQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.10.4.tgz", + "integrity": "sha512-yOvxY2pDiVJi0axdTWHSMi5T0DILN+H+SaeJeACHKjQLezEzhLx9nEF9xgpBLPtkZsks9cnb5P9iBEi21En3gg==", "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-jsx": "^7.8.3" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-jsx": "^7.10.4" } }, "@babel/plugin-transform-react-jsx-source": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.9.0.tgz", - "integrity": "sha512-K6m3LlSnTSfRkM6FcRk8saNEeaeyG5k7AVkBU2bZK3+1zdkSED3qNdsWrUgQBeTVD2Tp3VMmerxVO2yM5iITmw==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.10.5.tgz", + "integrity": "sha512-wTeqHVkN1lfPLubRiZH3o73f4rfon42HpgxUSs86Nc+8QIcm/B9s8NNVXu/gwGcOyd7yDib9ikxoDLxJP0UiDA==", "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-jsx": "^7.8.3" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-jsx": "^7.10.4" + } + }, + "@babel/plugin-transform-react-pure-annotations": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.10.4.tgz", + "integrity": "sha512-+njZkqcOuS8RaPakrnR9KvxjoG1ASJWpoIv/doyWngId88JoFlPlISenGXjrVacZUIALGUr6eodRs1vmPnF23A==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-regenerator": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.7.tgz", - "integrity": "sha512-TIg+gAl4Z0a3WmD3mbYSk+J9ZUH6n/Yc57rtKRnlA/7rcCvpekHXe0CMZHP1gYp7/KLe9GHTuIba0vXmls6drA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz", + "integrity": "sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw==", "requires": { "regenerator-transform": "^0.14.2" } }, "@babel/plugin-transform-reserved-words": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.3.tgz", - "integrity": "sha512-mwMxcycN3omKFDjDQUl+8zyMsBfjRFr0Zn/64I41pmjv4NJuqcYlEtezwYtw9TFd9WR1vN5kiM+O0gMZzO6L0A==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz", + "integrity": "sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ==", "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-runtime": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.9.6.tgz", - "integrity": "sha512-qcmiECD0mYOjOIt8YHNsAP1SxPooC/rDmfmiSK9BNY72EitdSc7l44WTEklaWuFtbOEBjNhWWyph/kOImbNJ4w==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.11.0.tgz", + "integrity": "sha512-LFEsP+t3wkYBlis8w6/kmnd6Kb1dxTd+wGJ8MlxTGzQo//ehtqlVL4S9DNUa53+dtPSQobN2CXx4d81FqC58cw==", "requires": { - "@babel/helper-module-imports": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", "resolve": "^1.8.1", "semver": "^5.5.1" }, @@ -806,127 +997,144 @@ } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz", - "integrity": "sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz", + "integrity": "sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q==", "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz", - "integrity": "sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.11.0.tgz", + "integrity": "sha512-UwQYGOqIdQJe4aWNyS7noqAnN2VbaczPLiEtln+zPowRNlD+79w3oi2TWfYe0eZgd+gjZCbsydN7lzWysDt+gw==", "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "^7.11.0" } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz", - "integrity": "sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz", + "integrity": "sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ==", "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/helper-regex": "^7.8.3" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-regex": "^7.10.4" } }, "@babel/plugin-transform-template-literals": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz", - "integrity": "sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz", + "integrity": "sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw==", "requires": { - "@babel/helper-annotate-as-pure": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz", - "integrity": "sha512-2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz", + "integrity": "sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA==", "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-typescript": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.9.6.tgz", - "integrity": "sha512-8OvsRdvpt3Iesf2qsAn+YdlwAJD7zJ+vhFZmDCa4b8dTp7MmHtKk5FF2mCsGxjZwuwsy/yIIay/nLmxST1ctVQ==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.11.0.tgz", + "integrity": "sha512-edJsNzTtvb3MaXQwj8403B7mZoGu9ElDJQZOKjGUnvilquxBA3IQoEIOvkX/1O8xfAsnHS/oQhe2w/IXrr+w0w==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.9.6", - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-typescript": "^7.8.3" + "@babel/helper-create-class-features-plugin": "^7.10.5", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-typescript": "^7.10.4" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz", + "integrity": "sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz", - "integrity": "sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz", + "integrity": "sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/preset-env": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.9.6.tgz", - "integrity": "sha512-0gQJ9RTzO0heXOhzftog+a/WyOuqMrAIugVYxMYf83gh1CQaQDjMtsOpqOwXyDL/5JcWsrCm8l4ju8QC97O7EQ==", - "requires": { - "@babel/compat-data": "^7.9.6", - "@babel/helper-compilation-targets": "^7.9.6", - "@babel/helper-module-imports": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-proposal-async-generator-functions": "^7.8.3", - "@babel/plugin-proposal-dynamic-import": "^7.8.3", - "@babel/plugin-proposal-json-strings": "^7.8.3", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-proposal-numeric-separator": "^7.8.3", - "@babel/plugin-proposal-object-rest-spread": "^7.9.6", - "@babel/plugin-proposal-optional-catch-binding": "^7.8.3", - "@babel/plugin-proposal-optional-chaining": "^7.9.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.8.3", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.11.0.tgz", + "integrity": "sha512-2u1/k7rG/gTh02dylX2kL3S0IJNF+J6bfDSp4DI2Ma8QN6Y9x9pmAax59fsCk6QUQG0yqH47yJWA+u1I1LccAg==", + "requires": { + "@babel/compat-data": "^7.11.0", + "@babel/helper-compilation-targets": "^7.10.4", + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-proposal-async-generator-functions": "^7.10.4", + "@babel/plugin-proposal-class-properties": "^7.10.4", + "@babel/plugin-proposal-dynamic-import": "^7.10.4", + "@babel/plugin-proposal-export-namespace-from": "^7.10.4", + "@babel/plugin-proposal-json-strings": "^7.10.4", + "@babel/plugin-proposal-logical-assignment-operators": "^7.11.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.4", + "@babel/plugin-proposal-numeric-separator": "^7.10.4", + "@babel/plugin-proposal-object-rest-spread": "^7.11.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.10.4", + "@babel/plugin-proposal-optional-chaining": "^7.11.0", + "@babel/plugin-proposal-private-methods": "^7.10.4", + "@babel/plugin-proposal-unicode-property-regex": "^7.10.4", "@babel/plugin-syntax-async-generators": "^7.8.0", + "@babel/plugin-syntax-class-properties": "^7.10.4", "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", - "@babel/plugin-syntax-numeric-separator": "^7.8.0", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.0", "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", "@babel/plugin-syntax-optional-chaining": "^7.8.0", - "@babel/plugin-syntax-top-level-await": "^7.8.3", - "@babel/plugin-transform-arrow-functions": "^7.8.3", - "@babel/plugin-transform-async-to-generator": "^7.8.3", - "@babel/plugin-transform-block-scoped-functions": "^7.8.3", - "@babel/plugin-transform-block-scoping": "^7.8.3", - "@babel/plugin-transform-classes": "^7.9.5", - "@babel/plugin-transform-computed-properties": "^7.8.3", - "@babel/plugin-transform-destructuring": "^7.9.5", - "@babel/plugin-transform-dotall-regex": "^7.8.3", - "@babel/plugin-transform-duplicate-keys": "^7.8.3", - "@babel/plugin-transform-exponentiation-operator": "^7.8.3", - "@babel/plugin-transform-for-of": "^7.9.0", - "@babel/plugin-transform-function-name": "^7.8.3", - "@babel/plugin-transform-literals": "^7.8.3", - "@babel/plugin-transform-member-expression-literals": "^7.8.3", - "@babel/plugin-transform-modules-amd": "^7.9.6", - "@babel/plugin-transform-modules-commonjs": "^7.9.6", - "@babel/plugin-transform-modules-systemjs": "^7.9.6", - "@babel/plugin-transform-modules-umd": "^7.9.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3", - "@babel/plugin-transform-new-target": "^7.8.3", - "@babel/plugin-transform-object-super": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.9.5", - "@babel/plugin-transform-property-literals": "^7.8.3", - "@babel/plugin-transform-regenerator": "^7.8.7", - "@babel/plugin-transform-reserved-words": "^7.8.3", - "@babel/plugin-transform-shorthand-properties": "^7.8.3", - "@babel/plugin-transform-spread": "^7.8.3", - "@babel/plugin-transform-sticky-regex": "^7.8.3", - "@babel/plugin-transform-template-literals": "^7.8.3", - "@babel/plugin-transform-typeof-symbol": "^7.8.4", - "@babel/plugin-transform-unicode-regex": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.10.4", + "@babel/plugin-transform-arrow-functions": "^7.10.4", + "@babel/plugin-transform-async-to-generator": "^7.10.4", + "@babel/plugin-transform-block-scoped-functions": "^7.10.4", + "@babel/plugin-transform-block-scoping": "^7.10.4", + "@babel/plugin-transform-classes": "^7.10.4", + "@babel/plugin-transform-computed-properties": "^7.10.4", + "@babel/plugin-transform-destructuring": "^7.10.4", + "@babel/plugin-transform-dotall-regex": "^7.10.4", + "@babel/plugin-transform-duplicate-keys": "^7.10.4", + "@babel/plugin-transform-exponentiation-operator": "^7.10.4", + "@babel/plugin-transform-for-of": "^7.10.4", + "@babel/plugin-transform-function-name": "^7.10.4", + "@babel/plugin-transform-literals": "^7.10.4", + "@babel/plugin-transform-member-expression-literals": "^7.10.4", + "@babel/plugin-transform-modules-amd": "^7.10.4", + "@babel/plugin-transform-modules-commonjs": "^7.10.4", + "@babel/plugin-transform-modules-systemjs": "^7.10.4", + "@babel/plugin-transform-modules-umd": "^7.10.4", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.10.4", + "@babel/plugin-transform-new-target": "^7.10.4", + "@babel/plugin-transform-object-super": "^7.10.4", + "@babel/plugin-transform-parameters": "^7.10.4", + "@babel/plugin-transform-property-literals": "^7.10.4", + "@babel/plugin-transform-regenerator": "^7.10.4", + "@babel/plugin-transform-reserved-words": "^7.10.4", + "@babel/plugin-transform-shorthand-properties": "^7.10.4", + "@babel/plugin-transform-spread": "^7.11.0", + "@babel/plugin-transform-sticky-regex": "^7.10.4", + "@babel/plugin-transform-template-literals": "^7.10.4", + "@babel/plugin-transform-typeof-symbol": "^7.10.4", + "@babel/plugin-transform-unicode-escapes": "^7.10.4", + "@babel/plugin-transform-unicode-regex": "^7.10.4", "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.9.6", - "browserslist": "^4.11.1", + "@babel/types": "^7.11.0", + "browserslist": "^4.12.0", "core-js-compat": "^3.6.2", "invariant": "^2.2.2", "levenary": "^1.1.1", @@ -953,68 +1161,78 @@ } }, "@babel/preset-react": { - "version": "7.9.4", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.9.4.tgz", - "integrity": "sha512-AxylVB3FXeOTQXNXyiuAQJSvss62FEotbX2Pzx3K/7c+MKJMdSg6Ose6QYllkdCFA8EInCJVw7M/o5QbLuA4ZQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.10.4.tgz", + "integrity": "sha512-BrHp4TgOIy4M19JAfO1LhycVXOPWdDbTRep7eVyatf174Hff+6Uk53sDyajqZPu8W1qXRBiYOfIamek6jA7YVw==", "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-transform-react-display-name": "^7.8.3", - "@babel/plugin-transform-react-jsx": "^7.9.4", - "@babel/plugin-transform-react-jsx-development": "^7.9.0", - "@babel/plugin-transform-react-jsx-self": "^7.9.0", - "@babel/plugin-transform-react-jsx-source": "^7.9.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-transform-react-display-name": "^7.10.4", + "@babel/plugin-transform-react-jsx": "^7.10.4", + "@babel/plugin-transform-react-jsx-development": "^7.10.4", + "@babel/plugin-transform-react-jsx-self": "^7.10.4", + "@babel/plugin-transform-react-jsx-source": "^7.10.4", + "@babel/plugin-transform-react-pure-annotations": "^7.10.4" } }, "@babel/preset-typescript": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.9.0.tgz", - "integrity": "sha512-S4cueFnGrIbvYJgwsVFKdvOmpiL0XGw9MFW9D0vgRys5g36PBhZRL8NX8Gr2akz8XRtzq6HuDXPD/1nniagNUg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.10.4.tgz", + "integrity": "sha512-SdYnvGPv+bLlwkF2VkJnaX/ni1sMNetcGI1+nThF1gyv6Ph8Qucc4ZZAjM5yZcE/AKRXIOTZz7eSRDWOEjPyRQ==", "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-transform-typescript": "^7.9.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-transform-typescript": "^7.10.4" } }, "@babel/runtime": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.6.tgz", - "integrity": "sha512-64AF1xY3OAkFHqOb9s4jpgk1Mm5vDZ4L3acHvAml+53nO1XbXLuDodsVpO4OIUsmemlUHMxNdYMNJmsvOwLrvQ==", + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.1.tgz", + "integrity": "sha512-nH5y8fLvVl3HAb+ezbgcgwrH8QbClWo8xzkOu7+oyqngo3EVorwpWJQaqXPjGRpfj7mQvsJCl/S8knkfkPWqrw==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/runtime-corejs3": { + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.11.1.tgz", + "integrity": "sha512-0gB7HCuTwvPxyCMWJTsRqh8muWkWR6U2c/o5x+oTJPR0xzaFl+thzQxHv4kzMkQadRIhe6KW1D/q1yVrjXmsKA==", "requires": { + "core-js-pure": "^3.0.0", "regenerator-runtime": "^0.13.4" } }, "@babel/template": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", - "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/parser": "^7.8.6", - "@babel/types": "^7.8.6" + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/traverse": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.6.tgz", - "integrity": "sha512-b3rAHSjbxy6VEAvlxM8OV/0X4XrG72zoxme6q1MOoe2vd0bEc+TwayhuC1+Dfgqh1QEG+pj7atQqvUprHIccsg==", - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.9.6", - "@babel/helper-function-name": "^7.9.5", - "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.9.6", - "@babel/types": "^7.9.6", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.0.tgz", + "integrity": "sha512-ZB2V+LskoWKNpMq6E5UUCrjtDUh5IOTAyIl0dTjIEoXum/iKWkoIEKIRDnUucO6f+2FzNkE0oD4RLKoPIufDtg==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.11.0", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/parser": "^7.11.0", + "@babel/types": "^7.11.0", "debug": "^4.1.0", "globals": "^11.1.0", - "lodash": "^4.17.13" + "lodash": "^4.17.19" } }, "@babel/types": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz", - "integrity": "sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", + "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", "requires": { - "@babel/helper-validator-identifier": "^7.9.5", - "lodash": "^4.17.13", + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } }, @@ -1023,40 +1241,66 @@ "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz", "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==" }, + "@docsearch/css": { + "version": "1.0.0-alpha.26", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-1.0.0-alpha.26.tgz", + "integrity": "sha512-YAa7R6O2MMdRtxTaMB3TTfeelhpf01J1xtnGZEQa7LNA64QO8BErceQIMQq5/ZMXnGViK/eUjqSVyCu7uzYE5w==" + }, + "@docsearch/react": { + "version": "1.0.0-alpha.26", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-1.0.0-alpha.26.tgz", + "integrity": "sha512-2eKIcUXuWbGgz6/xF+p7kYyd1IVGcnB8r+oIkTD6Tqtq0VGzZmf9ZPCOX37G38pVIJXAAxmtAb7oPO311xGWNQ==", + "requires": { + "@docsearch/css": "^1.0.0-alpha.26", + "@francoischalifour/autocomplete-core": "^1.0.0-alpha.26", + "@francoischalifour/autocomplete-preset-algolia": "^1.0.0-alpha.26", + "algoliasearch": "^4.0.0" + } + }, "@docusaurus/core": { - "version": "2.0.0-alpha.55", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-alpha.55.tgz", - "integrity": "sha512-C93nC4stTt10Bn8Wewh2o1bpli9DDy2GO01hDNV9sxsbPnRLxkjvAMTydLP5xwGecmfCI6bWU4L9tXVrStJpjA==", + "version": "2.0.0-alpha.61", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-alpha.61.tgz", + "integrity": "sha512-Ev0v5J7L/Pm3VJMdhhyR8I9tUQo8MhVRUUT+Bf0W3TMYG6jp2cIXE88yCfxOsTDducS7EMrdtUXfvePGH9CE/A==", "requires": { "@babel/core": "^7.9.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.1", + "@babel/plugin-proposal-optional-chaining": "^7.10.3", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-transform-runtime": "^7.9.0", "@babel/preset-env": "^7.9.0", "@babel/preset-react": "^7.9.4", "@babel/preset-typescript": "^7.9.0", "@babel/runtime": "^7.9.2", - "@docusaurus/utils": "^2.0.0-alpha.55", + "@babel/runtime-corejs3": "^7.10.4", + "@docusaurus/types": "^2.0.0-alpha.61", + "@docusaurus/utils": "^2.0.0-alpha.61", "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", + "@hapi/joi": "^17.1.1", "@svgr/webpack": "^5.4.0", "babel-loader": "^8.1.0", "babel-plugin-dynamic-import-node": "^2.3.0", + "boxen": "^4.2.0", "cache-loader": "^4.1.0", "chalk": "^3.0.0", "chokidar": "^3.3.0", - "classnames": "^2.2.6", "commander": "^4.0.1", "copy-webpack-plugin": "^5.0.5", "core-js": "^2.6.5", "css-loader": "^3.4.2", "del": "^5.1.0", + "detect-port": "^1.3.0", "eta": "^1.1.1", "express": "^4.17.1", + "file-loader": "^6.0.0", "fs-extra": "^8.1.0", "globby": "^10.0.1", "html-minifier-terser": "^5.0.5", "html-tags": "^3.1.0", "html-webpack-plugin": "^4.0.4", "import-fresh": "^3.2.1", + "inquirer": "^7.2.0", + "is-root": "^2.1.0", + "lodash": "^4.5.2", "lodash.has": "^4.5.2", "lodash.isplainobject": "^4.0.6", "lodash.isstring": "^4.0.1", @@ -1064,20 +1308,24 @@ "nprogress": "^0.2.0", "null-loader": "^3.0.0", "optimize-css-assets-webpack-plugin": "^5.0.3", - "portfinder": "^1.0.25", + "pnp-webpack-plugin": "^1.6.4", "postcss-loader": "^3.0.0", "postcss-preset-env": "^6.7.0", "react-dev-utils": "^10.2.1", "react-helmet": "^6.0.0-beta", "react-loadable": "^5.5.0", - "react-loadable-ssr-addon": "^0.2.0", + "react-loadable-ssr-addon": "^0.2.3", "react-router": "^5.1.2", "react-router-config": "^5.1.1", "react-router-dom": "^5.1.2", + "resolve-pathname": "^3.0.0", "semver": "^6.3.0", + "serve-handler": "^6.1.3", "shelljs": "^0.8.4", "std-env": "^2.2.1", "terser-webpack-plugin": "^2.3.5", + "update-notifier": "^4.1.0", + "url-loader": "^4.1.0", "wait-file": "^1.0.5", "webpack": "^4.41.2", "webpack-bundle-analyzer": "^3.6.1", @@ -1087,15 +1335,17 @@ } }, "@docusaurus/mdx-loader": { - "version": "2.0.0-alpha.55", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-alpha.55.tgz", - "integrity": "sha512-yKFqh+7SnOUQLiQJjsaY7VLtpCdHRgjczzRYDmjXoP0O/BmrKNNMiZrpov9xJla4gD/uyhAa4awCW3IoesFiBw==", + "version": "2.0.0-alpha.61", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-alpha.61.tgz", + "integrity": "sha512-n7VMfyshgMjoVI2YdQFlPVcMTSR+XOl2UbOTgJXDmD4yCeLOSaj63g8fwVoCy+NRkPgjpWGTGCeLNs63dk9jYg==", "requires": { "@babel/parser": "^7.9.4", "@babel/traverse": "^7.9.0", + "@docusaurus/core": "^2.0.0-alpha.61", "@mdx-js/mdx": "^1.5.8", "@mdx-js/react": "^1.5.8", "escape-html": "^1.0.3", + "file-loader": "^6.0.0", "fs-extra": "^8.1.0", "github-slugger": "^1.3.0", "gray-matter": "^4.0.2", @@ -1103,7 +1353,8 @@ "mdast-util-to-string": "^1.1.0", "remark-emoji": "^2.1.0", "stringify-object": "^3.3.0", - "unist-util-visit": "^2.0.2" + "unist-util-visit": "^2.0.2", + "url-loader": "^4.1.0" }, "dependencies": { "json5": { @@ -1127,12 +1378,16 @@ } }, "@docusaurus/plugin-content-blog": { - "version": "2.0.0-alpha.55", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-alpha.55.tgz", - "integrity": "sha512-EquoWt0dY/UfZUJgctuQ5IZ3Zg0kD/s19Ex28MbyGKQNqLGGgtgC2dV9mhJ55OR9XtaWZIOyBsmMIO0nHyA/mw==", - "requires": { - "@docusaurus/mdx-loader": "^2.0.0-alpha.55", - "@docusaurus/utils": "^2.0.0-alpha.55", + "version": "2.0.0-alpha.61", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-alpha.61.tgz", + "integrity": "sha512-C2U5NTKYeDm7AViMt4fqmkLuk2kwxvvkzAK84EvEA3tVy3Q58qTfRqbDyFJGN63OL1Os+1HwQvGjPjCUWVbJ3Q==", + "requires": { + "@docusaurus/core": "^2.0.0-alpha.61", + "@docusaurus/mdx-loader": "^2.0.0-alpha.61", + "@docusaurus/types": "^2.0.0-alpha.61", + "@docusaurus/utils": "^2.0.0-alpha.61", + "@docusaurus/utils-validation": "^2.0.0-alpha.61", + "@hapi/joi": "^17.1.1", "feed": "^4.1.0", "fs-extra": "^8.1.0", "globby": "^10.0.1", @@ -1163,12 +1418,16 @@ } }, "@docusaurus/plugin-content-docs": { - "version": "2.0.0-alpha.55", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-alpha.55.tgz", - "integrity": "sha512-1TAH5XE8IAxRUyW07zzsaviFTAOJTB/MrsHTsx1T8vB2hGgvX1YucNR84wcO6nXmQGd5rPeVGVYusc/PEXWR9w==", - "requires": { - "@docusaurus/mdx-loader": "^2.0.0-alpha.55", - "@docusaurus/utils": "^2.0.0-alpha.55", + "version": "2.0.0-alpha.61", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-alpha.61.tgz", + "integrity": "sha512-1WojgF+0ZQoARVF3I++2ghzG0sY4panxNiWv8Mzo2MdqECj3lgmR8jaVUSXj4bcTzX7uAEVS9MqKYIf3DBpgYg==", + "requires": { + "@docusaurus/core": "^2.0.0-alpha.61", + "@docusaurus/mdx-loader": "^2.0.0-alpha.61", + "@docusaurus/types": "^2.0.0-alpha.61", + "@docusaurus/utils": "^2.0.0-alpha.61", + "@docusaurus/utils-validation": "^2.0.0-alpha.61", + "@hapi/joi": "17.1.1", "execa": "^3.4.0", "fs-extra": "^8.1.0", "globby": "^10.0.1", @@ -1178,6 +1437,7 @@ "lodash.groupby": "^4.6.0", "lodash.pick": "^4.4.0", "lodash.pickby": "^4.6.0", + "lodash.sortby": "^4.6.0", "remark-admonitions": "^1.2.1", "shelljs": "^0.8.4" }, @@ -1246,98 +1506,141 @@ } }, "@docusaurus/plugin-content-pages": { - "version": "2.0.0-alpha.55", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-alpha.55.tgz", - "integrity": "sha512-Z3DMO5h9eeVtyBV28zKjFcRs1TTY2nK+Omgi0PPDd8SZP333V2meI/K5vRljPpkjv1Mxhs8IjAPc9f1IxckU6A==", + "version": "2.0.0-alpha.61", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-alpha.61.tgz", + "integrity": "sha512-UQmXnGQCQoMltnL0Zvf0Dhqis+tKPwAdtcoBcQN4dvaDp4iEsS8eJjG9QZqvPzqJv+giVyuCT/KeZj/pxCitNw==", + "requires": { + "@docusaurus/mdx-loader": "^2.0.0-alpha.61", + "@docusaurus/types": "^2.0.0-alpha.61", + "@docusaurus/utils": "^2.0.0-alpha.61", + "@docusaurus/utils-validation": "^2.0.0-alpha.61", + "@hapi/joi": "17.1.1", + "globby": "^10.0.1", + "loader-utils": "^1.2.3", + "remark-admonitions": "^1.2.1" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } + } + }, + "@docusaurus/plugin-debug": { + "version": "2.0.0-alpha.61", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-alpha.61.tgz", + "integrity": "sha512-v0qbGwT/yd5Dy/dcwn5fBCdlFE60IOOhllBDuKUsjJwKCvFDKHZ6jtxrZY+ujIlDfj/Tkc4ban0w46JGWnMj+w==", "requires": { - "@docusaurus/types": "^2.0.0-alpha.55", - "@docusaurus/utils": "^2.0.0-alpha.55", - "globby": "^10.0.1" + "@docusaurus/types": "^2.0.0-alpha.61", + "@docusaurus/utils": "^2.0.0-alpha.61" } }, "@docusaurus/plugin-google-analytics": { - "version": "2.0.0-alpha.55", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-alpha.55.tgz", - "integrity": "sha512-PbMXIPPMX9u3ld5YvNc24WQBIy5AVK/f+8OGqp2kFpEMiRtY/SIJp84W3/L6aq5Kplkeun3FtDwXmYrVgw3cVQ==" + "version": "2.0.0-alpha.61", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-alpha.61.tgz", + "integrity": "sha512-f+KmaoM6eTledmgyijMNREvekZVLJ3nll6aUNDXPod9+MF673Hs4RGDyveMAjLiq03+VCgtXAniTSYsFIHcuAQ==" }, "@docusaurus/plugin-google-gtag": { - "version": "2.0.0-alpha.55", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-alpha.55.tgz", - "integrity": "sha512-nxaj5n0+aZpWrPsJw9VkKH+N9cvQbrGr11mG5FjZq2Q2KWaHzyyAOhn+DmLRnEWL5aRs2H0n0cYmGh5B95wrWg==" + "version": "2.0.0-alpha.61", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-alpha.61.tgz", + "integrity": "sha512-9l/CUNtBIZqTKY7vD0dOOTrLRpbViXSQPsIOlfYDilS2AQmpsoJVQf6CcCts+GaxWMu0pTw3zeCNnFtJfDV5pA==" }, "@docusaurus/plugin-sitemap": { - "version": "2.0.0-alpha.55", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-alpha.55.tgz", - "integrity": "sha512-a5Yko1X64MTqnqrTc9P2AfI022kAlwIg/id+AC3r3pF1XojRSwqPMWS0H0b915O8PPMtax4pwhyyMuJ+/MScOQ==", + "version": "2.0.0-alpha.61", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-alpha.61.tgz", + "integrity": "sha512-7nXJl/zsnr8Hlzxn3bm9NhpwP4sRFGXWwSCWCC4FMrIw9ihXWTtMGe9hDuJx4DqC8xufyQMw26VGauH7XAWdMg==", "requires": { - "@docusaurus/types": "^2.0.0-alpha.55", + "@docusaurus/types": "^2.0.0-alpha.61", + "@hapi/joi": "17.1.1", + "fs-extra": "^8.1.0", "sitemap": "^3.2.2" } }, "@docusaurus/preset-classic": { - "version": "2.0.0-alpha.55", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.0.0-alpha.55.tgz", - "integrity": "sha512-rCQ7TjbubX+pvW+bkQqQVIuhVqkuldWP50FDi+j05YVg5jQHmQZx8kYVF5HdkCQxV6gdEP1bLtGwcEVO6Homwg==", + "version": "2.0.0-alpha.61", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.0.0-alpha.61.tgz", + "integrity": "sha512-/3HL468XiSZ1T4mdvqnfV6O80Qv4BxAseJGnmkBwS0u6+Q1VgkNxRxVk4B45OWPaurK/Dl+sCn4sAAUWUGRsZg==", "requires": { - "@docusaurus/plugin-content-blog": "^2.0.0-alpha.55", - "@docusaurus/plugin-content-docs": "^2.0.0-alpha.55", - "@docusaurus/plugin-content-pages": "^2.0.0-alpha.55", - "@docusaurus/plugin-google-analytics": "^2.0.0-alpha.55", - "@docusaurus/plugin-google-gtag": "^2.0.0-alpha.55", - "@docusaurus/plugin-sitemap": "^2.0.0-alpha.55", - "@docusaurus/theme-classic": "^2.0.0-alpha.55", - "@docusaurus/theme-search-algolia": "^2.0.0-alpha.55" + "@docusaurus/plugin-content-blog": "^2.0.0-alpha.61", + "@docusaurus/plugin-content-docs": "^2.0.0-alpha.61", + "@docusaurus/plugin-content-pages": "^2.0.0-alpha.61", + "@docusaurus/plugin-debug": "^2.0.0-alpha.61", + "@docusaurus/plugin-google-analytics": "^2.0.0-alpha.61", + "@docusaurus/plugin-google-gtag": "^2.0.0-alpha.61", + "@docusaurus/plugin-sitemap": "^2.0.0-alpha.61", + "@docusaurus/theme-classic": "^2.0.0-alpha.61", + "@docusaurus/theme-search-algolia": "^2.0.0-alpha.61" } }, "@docusaurus/theme-classic": { - "version": "2.0.0-alpha.55", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.0.0-alpha.55.tgz", - "integrity": "sha512-p7evyX6ITNx382p52BO1XwH3xJiIud9+eaqfxsBoWompdZJtqpkvbU/+U9Y3ZXbDWOIok+nxjfiTZ5EVbyAytA==", + "version": "2.0.0-alpha.61", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.0.0-alpha.61.tgz", + "integrity": "sha512-LPJwDi8iPzBe36+U65h4w5N5rXSuXuxPXWzBe/eF0/miR7VVCKydGSSubQLSMAXV0QWspGJIRSPnwuNH3DjJZg==", "requires": { + "@hapi/joi": "^17.1.1", "@mdx-js/mdx": "^1.5.8", "@mdx-js/react": "^1.5.8", - "classnames": "^2.2.6", - "clipboard": "^2.0.6", - "infima": "0.2.0-alpha.11", + "clsx": "^1.1.1", + "copy-text-to-clipboard": "^2.2.0", + "infima": "0.2.0-alpha.12", + "lodash": "^4.17.19", "parse-numeric-range": "^0.0.2", "prism-react-renderer": "^1.1.0", "prismjs": "^1.20.0", + "prop-types": "^15.7.2", "react-router-dom": "^5.1.2", "react-toggle": "^4.1.1" } }, "@docusaurus/theme-search-algolia": { - "version": "2.0.0-alpha.55", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-alpha.55.tgz", - "integrity": "sha512-FW37t/J5e/vf3sTaU4naAVR8LzHkQZajo12COLtQChvHCQE6HuIzCwJro7M/gc7BEwdLtoBd1c8QiftFR8ukQA==", + "version": "2.0.0-alpha.61", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-alpha.61.tgz", + "integrity": "sha512-B47SmuBdF2kguBo3Wkx8L/jhYgHXxgxEpcf9JCLPGzK0YiRJk111z43h6PLSwirEpxb4OE+sFqr5oPvnsgnwRw==", "requires": { - "algoliasearch": "^3.24.5", + "@docsearch/react": "^1.0.0-alpha.25", + "@hapi/joi": "^17.1.1", + "algoliasearch": "^4.0.0", "algoliasearch-helper": "^3.1.1", - "classnames": "^2.2.6", - "docsearch.js": "^2.6.3", + "clsx": "^1.1.1", "eta": "^1.1.1" } }, "@docusaurus/types": { - "version": "2.0.0-alpha.55", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-alpha.55.tgz", - "integrity": "sha512-VHls/qpHwYwqvZJQlw41BSw0tWtrWm1JHWATw++ypdAt10NAQa9ukhaGtfzFQfeXp/OQIFf6l5lCheKF+eT1PQ==", + "version": "2.0.0-alpha.61", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-alpha.61.tgz", + "integrity": "sha512-x1fBiL/KNfREvA6B40CCTABjK9KP+kj/H/7mHfiwdtOYvVt9GJSgnjThkVD62lpVFbOhQ5C0togZsSzKlw6H/w==", "requires": { "@types/webpack": "^4.41.0", "commander": "^4.0.1", - "querystring": "0.2.0" + "querystring": "0.2.0", + "webpack-merge": "^4.2.2" } }, "@docusaurus/utils": { - "version": "2.0.0-alpha.55", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-alpha.55.tgz", - "integrity": "sha512-qPWPMK0WJ/2hHJb3XC7R6QeGofoz87ZM4YUXaThmLV/c8Zhl/lh/mwZBgq6WEgJRTdkaA7C7/GRl18SiorWu6A==", + "version": "2.0.0-alpha.61", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-alpha.61.tgz", + "integrity": "sha512-MHvR3Rq8Kk9W6skBR3x7mLsDaNrnp6Mmobyc0ZVql+eiLrjiN7SPunvrVJDE90bQ50HZFLLoAkfgfrvbX5mecg==", "requires": { "escape-string-regexp": "^2.0.0", "fs-extra": "^8.1.0", "gray-matter": "^4.0.2", "lodash.camelcase": "^4.3.0", - "lodash.kebabcase": "^4.1.1" + "lodash.kebabcase": "^4.1.1", + "resolve-pathname": "^3.0.0" }, "dependencies": { "escape-string-regexp": { @@ -1347,6 +1650,14 @@ } } }, + "@docusaurus/utils-validation": { + "version": "2.0.0-alpha.61", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-alpha.61.tgz", + "integrity": "sha512-3QrJqZoR5eBz2XG0ijuTIp5AEOe1OHtuv7nkKArOCzFmjuBJLhUTRcECf0K+lcmdJ25zrRAWAYNgTvpVpBjaNg==", + "requires": { + "@hapi/joi": "17.1.1" + } + }, "@endiliey/static-site-generator-webpack-plugin": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@endiliey/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.0.tgz", @@ -1359,75 +1670,129 @@ "webpack-sources": "^1.4.3" } }, + "@francoischalifour/autocomplete-core": { + "version": "1.0.0-alpha.26", + "resolved": "https://registry.npmjs.org/@francoischalifour/autocomplete-core/-/autocomplete-core-1.0.0-alpha.26.tgz", + "integrity": "sha512-XUXAGVx0My9isShokR1QB/oPFQiaPYDCouoTZTN+DISQw5AK6kGZUCFFXJSRNHTxBq1/0e70DYEiQa8E+rT/Og==" + }, + "@francoischalifour/autocomplete-preset-algolia": { + "version": "1.0.0-alpha.26", + "resolved": "https://registry.npmjs.org/@francoischalifour/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.0.0-alpha.26.tgz", + "integrity": "sha512-RrayxZgvTzpwq+RqEIpVn2UOEFLwa+HADCr2I3UI05o/OGU7Wc6LltpQy54scR+FlAIk6qTJwp5Nw/ecJn6xXg==" + }, "@hapi/address": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", - "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-4.1.0.tgz", + "integrity": "sha512-SkszZf13HVgGmChdHo/PxchnSaCJ6cetVqLzyciudzZRT0jcOouIF/Q93mgjw8cce+D+4F4C1Z/WrfFN+O3VHQ==", + "requires": { + "@hapi/hoek": "^9.0.0" + } }, "@hapi/bourne": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz", "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==" }, + "@hapi/formula": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@hapi/formula/-/formula-2.0.0.tgz", + "integrity": "sha512-V87P8fv7PI0LH7LiVi8Lkf3x+KCO7pQozXRssAHNXXL9L1K+uyu4XypLXwxqVDKgyQai6qj3/KteNlrqDx4W5A==" + }, "@hapi/hoek": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz", - "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==" + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.0.4.tgz", + "integrity": "sha512-EwaJS7RjoXUZ2cXXKZZxZqieGtc7RbvQhUy8FwDoMQtxWVi14tFjeFCYPZAM1mBCpOpiBpyaZbb9NeHc7eGKgw==" }, "@hapi/joi": { - "version": "15.1.1", - "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz", - "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", + "version": "17.1.1", + "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-17.1.1.tgz", + "integrity": "sha512-p4DKeZAoeZW4g3u7ZeRo+vCDuSDgSvtsB/NpfjXEHTUjSeINAi/RrVOWiVQ1isaoLzMvFEhe8n5065mQq1AdQg==", "requires": { - "@hapi/address": "2.x.x", - "@hapi/bourne": "1.x.x", - "@hapi/hoek": "8.x.x", - "@hapi/topo": "3.x.x" + "@hapi/address": "^4.0.1", + "@hapi/formula": "^2.0.0", + "@hapi/hoek": "^9.0.0", + "@hapi/pinpoint": "^2.0.0", + "@hapi/topo": "^5.0.0" } }, + "@hapi/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@hapi/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-vzXR5MY7n4XeIvLpfl3HtE3coZYO4raKXW766R6DZw/6aLqR26iuZ109K7a0NtF2Db0jxqh7xz2AxkUwpUFybw==" + }, "@hapi/topo": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz", - "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.0.0.tgz", + "integrity": "sha512-tFJlT47db0kMqVm3H4nQYgn6Pwg10GTZHb1pwmSiv1K4ks6drQOtfEF5ZnPjkvC+y4/bUPHK+bc87QvLcL+WMw==", "requires": { - "@hapi/hoek": "^8.3.0" + "@hapi/hoek": "^9.0.0" } }, "@mdx-js/mdx": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.4.tgz", - "integrity": "sha512-TuKjwVrp0bhuv++SnqHp3k7agawS4d29sSL9p1B6Wv6IxJTfkJPMD1rI+Ahek45qTNY0Sxh4Q6kox9a7cq1tag==", + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.16.tgz", + "integrity": "sha512-jnYyJ0aCafCIehn3GjYcibIapaLBgs3YkoenNQBPcPFyyuUty7B3B07OE+pMllhJ6YkWeP/R5Ax19x0nqTzgJw==", "requires": { - "@babel/core": "7.9.6", - "@babel/plugin-syntax-jsx": "7.8.3", + "@babel/core": "7.10.5", + "@babel/plugin-syntax-jsx": "7.10.4", "@babel/plugin-syntax-object-rest-spread": "7.8.3", - "@mdx-js/util": "^1.6.4", - "babel-plugin-apply-mdx-type-prop": "^1.6.4", - "babel-plugin-extract-import-names": "^1.6.4", + "@mdx-js/util": "1.6.16", + "babel-plugin-apply-mdx-type-prop": "1.6.16", + "babel-plugin-extract-import-names": "1.6.16", "camelcase-css": "2.0.1", "detab": "2.0.3", - "hast-util-raw": "5.0.2", + "hast-util-raw": "6.0.0", "lodash.uniq": "4.5.0", "mdast-util-to-hast": "9.1.0", "remark-footnotes": "1.0.0", - "remark-mdx": "^1.6.4", - "remark-parse": "8.0.2", + "remark-mdx": "1.6.16", + "remark-parse": "8.0.3", "remark-squeeze-paragraphs": "4.0.0", "style-to-object": "0.3.0", - "unified": "9.0.0", + "unified": "9.1.0", "unist-builder": "2.0.3", - "unist-util-visit": "2.0.2" + "unist-util-visit": "2.0.3" + }, + "dependencies": { + "@babel/core": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.10.5.tgz", + "integrity": "sha512-O34LQooYVDXPl7QWCdW9p4NR+QlzOr7xShPPJz8GsuCU3/8ua/wqTr7gmnxXv+WBESiGU/G5s16i6tUvHkNb+w==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.10.5", + "@babel/helper-module-transforms": "^7.10.5", + "@babel/helpers": "^7.10.4", + "@babel/parser": "^7.10.5", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.5", + "@babel/types": "^7.10.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } } }, "@mdx-js/react": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.4.tgz", - "integrity": "sha512-3SwDgbr2Fc3i5LrOQnahRUTvx0x/wRf+i8+fJM1caGTeq1XwVb6OHztJzaYt3DSizJVzRsBZznReY+l39up5Pg==" + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.16.tgz", + "integrity": "sha512-+FhuSVOPo7+4fZaRwWuCSRUcZkJOkZu0rfAbBKvoCg1LWb1Td8Vzi0DTLORdSvgWNbU6+EL40HIgwTOs00x2Jw==" }, "@mdx-js/util": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.4.tgz", - "integrity": "sha512-cVGZ68yZwyJnOMhARAdgD1IhZ0bsbsKCvsj6I/XnJcT9hNV/8WXErSV98zFfZwH3LmSRPde58l9hln+zXdK/mQ==" + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.16.tgz", + "integrity": "sha512-SFtLGIGZummuyMDPRL5KdmpgI8U19Ble28UjEWihPjGxF1Lgj8aDjLWY8KiaUy9eqb9CKiVCqEIrK9jbnANfkw==" }, "@mrmlnc/readdir-enhanced": { "version": "2.2.1", @@ -1461,6 +1826,11 @@ "fastq": "^1.6.0" } }, + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" + }, "@svgr/babel-plugin-add-jsx-attribute": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", @@ -1570,6 +1940,14 @@ "loader-utils": "^2.0.0" } }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "requires": { + "defer-to-connect": "^1.0.1" + } + }, "@types/anymatch": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz", @@ -1580,26 +1958,33 @@ "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" }, - "@types/events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", - "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==" - }, "@types/glob": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", - "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", "requires": { - "@types/events": "*", "@types/minimatch": "*", "@types/node": "*" } }, + "@types/hast": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.1.tgz", + "integrity": "sha512-viwwrB+6xGzw+G1eWpF9geV3fnsDgXqHG+cqgiHrvQfDUW5hzhCyV7Sy3UJxhfRFBsgky2SSW33qi/YrIkjX5Q==", + "requires": { + "@types/unist": "*" + } + }, "@types/html-minifier-terser": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.0.tgz", "integrity": "sha512-iYCgjm1dGPRuo12+BStjd1HiVQqhlRhWDOQigNxn023HcjnhsiFz9pc6CzJj4HwDCSQca9bxTL4PxJDbkdm3PA==" }, + "@types/json-schema": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz", + "integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==" + }, "@types/mdast": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.3.tgz", @@ -1614,15 +1999,20 @@ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==" }, "@types/node": { - "version": "14.0.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.5.tgz", - "integrity": "sha512-90hiq6/VqtQgX8Sp0EzeIsv3r+ellbGj4URKj5j30tLlZvRUpnAe9YbYnjl3pJM93GyXU0tghHhvXHq+5rnCKA==" + "version": "14.0.27", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.27.tgz", + "integrity": "sha512-kVrqXhbclHNHGu9ztnAwSncIgJv/FaxmzXJvGXNdcCpV1b8u1/Mi6z6m0vwy0LzKeXFTPLH0NzwmoJ3fNCIq0g==" }, "@types/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" }, + "@types/parse5": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", + "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==" + }, "@types/q": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", @@ -1634,14 +2024,14 @@ "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==" }, "@types/tapable": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.5.tgz", - "integrity": "sha512-/gG2M/Imw7cQFp8PGvz/SwocNrmKFjFsm5Pb8HdbHkZ1K8pmuPzOX4VeVoiEecFCVf4CsN1r3/BRvx+6sNqwtQ==" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.6.tgz", + "integrity": "sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA==" }, "@types/uglify-js": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.9.2.tgz", - "integrity": "sha512-d6dIfpPbF+8B7WiCi2ELY7m0w1joD8cRW4ms88Emdb2w062NeEpbNCeWwVCgzLRpVG+5e74VFSg4rgJ2xXjEiQ==", + "version": "3.9.3", + "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.9.3.tgz", + "integrity": "sha512-KswB5C7Kwduwjj04Ykz+AjvPcfgv/37Za24O2EDzYNbwyzOo8+ydtvzUfZ5UMguiVu29Gx44l1A6VsPPcmYu9w==", "requires": { "source-map": "^0.6.1" }, @@ -1659,9 +2049,9 @@ "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==" }, "@types/webpack": { - "version": "4.41.13", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.13.tgz", - "integrity": "sha512-RYmIHOWSxnTTa765N6jJBVE45pd2SYNblEYshVDduLw6RhocazNmRzE5/ytvBD8IkDMH6DI+bcrqxh8NILimBA==", + "version": "4.41.21", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.21.tgz", + "integrity": "sha512-2j9WVnNrr/8PLAB5csW44xzQSJwS26aOnICsP3pSGCEdsu6KYtfQ6QJsVUKHWRnm1bL7HziJsfh5fHqth87yKA==", "requires": { "@types/anymatch": "*", "@types/node": "*", @@ -1679,19 +2069,19 @@ } }, "@types/webpack-sources": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.7.tgz", - "integrity": "sha512-XyaHrJILjK1VHVC4aVlKsdNN5KBTwufMb43cQs+flGxtPAf/1Qwl8+Q0tp5BwEGaI8D6XT1L+9bSWXckgkjTLw==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-1.4.2.tgz", + "integrity": "sha512-77T++JyKow4BQB/m9O96n9d/UUHWLQHlcqXb9Vsf4F1+wKNrrlWNFPDLKNT92RJnCSL6CieTc+NDXtCVZswdTw==", "requires": { "@types/node": "*", "@types/source-list-map": "*", - "source-map": "^0.6.1" + "source-map": "^0.7.3" }, "dependencies": { "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" } } }, @@ -1862,11 +2252,6 @@ "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, "accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", @@ -1882,20 +2267,15 @@ "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==" }, "acorn-walk": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.1.1.tgz", - "integrity": "sha512-wdlPY2tm/9XBr7QkKlq0WQVgiuGTX6YWPyRyBviSoScBuLfTVQhvwg6wJ369GJ/1nPfTLMfnrFIfjqVg6d+jQQ==" + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" }, "address": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==" }, - "agentkeepalive": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-2.2.0.tgz", - "integrity": "sha1-xdG9SxKQCPEWPyNvhuX66iAm4u8=" - }, "aggregate-error": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz", @@ -1906,9 +2286,9 @@ } }, "ajv": { - "version": "6.12.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", - "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", + "version": "6.12.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", + "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -1922,66 +2302,35 @@ "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==" }, "ajv-keywords": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", - "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==" + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" }, "algoliasearch": { - "version": "3.35.1", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-3.35.1.tgz", - "integrity": "sha512-K4yKVhaHkXfJ/xcUnil04xiSrB8B8yHZoFEhWNpXg23eiCnqvTZw1tn/SqvdsANlYHLJlKl0qi3I/Q2Sqo7LwQ==", - "requires": { - "agentkeepalive": "^2.2.0", - "debug": "^2.6.9", - "envify": "^4.0.0", - "es6-promise": "^4.1.0", - "events": "^1.1.0", - "foreach": "^2.0.5", - "global": "^4.3.2", - "inherits": "^2.0.1", - "isarray": "^2.0.1", - "load-script": "^1.0.0", - "object-keys": "^1.0.11", - "querystring-es3": "^0.2.1", - "reduce": "^1.0.1", - "semver": "^5.1.0", - "tunnel-agent": "^0.6.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" - }, - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.3.1.tgz", + "integrity": "sha512-q8aIYgdZZWOMzmvlIwxcbktVa8+M5cyI8hIrgd/NcSz/XKHfVTKdNYbnsmPqmYrssAmepx8C8vHnJrPuumUnYA==", + "requires": { + "@algolia/cache-browser-local-storage": "4.3.1", + "@algolia/cache-common": "4.3.1", + "@algolia/cache-in-memory": "4.3.1", + "@algolia/client-account": "4.3.1", + "@algolia/client-analytics": "4.3.1", + "@algolia/client-common": "4.3.1", + "@algolia/client-recommendation": "4.3.1", + "@algolia/client-search": "4.3.1", + "@algolia/logger-common": "4.3.1", + "@algolia/logger-console": "4.3.1", + "@algolia/requester-browser-xhr": "4.3.1", + "@algolia/requester-common": "4.3.1", + "@algolia/requester-node-http": "4.3.1", + "@algolia/transporter": "4.3.1" } }, "algoliasearch-helper": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.1.1.tgz", - "integrity": "sha512-Jkqlp8jezQRixf7sbQ2zFXHpdaT41g9sHBqT6pztv5nfDmg94K+pwesAy6UbxRY78IL54LIaV1FLttMtT+IzzA==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.2.2.tgz", + "integrity": "sha512-/3XvE33R+gQKaiPdy3nmHYqhF8hqIu8xnlOicVxb1fD6uMFmxW8rGLzzrRfsPfxgAfm+c1NslLb3TzQVIB8aVA==", "requires": { "events": "^1.1.1" }, @@ -1998,6 +2347,26 @@ "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=" }, + "ansi-align": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", + "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", + "requires": { + "string-width": "^3.0.0" + }, + "dependencies": { + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + } + } + }, "ansi-colors": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", @@ -2009,6 +2378,13 @@ "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", "requires": { "type-fest": "^0.11.0" + }, + "dependencies": { + "type-fest": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", + "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==" + } } }, "ansi-html": { @@ -2017,9 +2393,9 @@ "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=" }, "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" }, "ansi-styles": { "version": "3.2.1", @@ -2094,14 +2470,6 @@ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "requires": { - "safer-buffer": "~2.1.0" - } - }, "asn1.js": { "version": "4.10.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", @@ -2143,11 +2511,6 @@ } } }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, "assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", @@ -2171,60 +2534,25 @@ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" }, - "autocomplete.js": { - "version": "0.36.0", - "resolved": "https://registry.npmjs.org/autocomplete.js/-/autocomplete.js-0.36.0.tgz", - "integrity": "sha512-jEwUXnVMeCHHutUt10i/8ZiRaCb0Wo+ZyKxeGsYwBDtw6EJHqEeDrq4UwZRD8YBSvp3g6klP678il2eeiVXN2Q==", - "requires": { - "immediate": "^3.2.3" - } - }, "autoprefixer": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.0.tgz", - "integrity": "sha512-D96ZiIHXbDmU02dBaemyAg53ez+6F5yZmapmgKcjm35yEe1uVDYI8hGW3VYoGRaG290ZFf91YxHrR518vC0u/A==", + "version": "9.8.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", + "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", "requires": { "browserslist": "^4.12.0", - "caniuse-lite": "^1.0.30001061", - "chalk": "^2.4.2", + "caniuse-lite": "^1.0.30001109", + "colorette": "^1.2.1", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", - "postcss": "^7.0.30", + "postcss": "^7.0.32", "postcss-value-parser": "^4.1.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - } } }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "aws4": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.0.tgz", - "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==" - }, "babel-code-frame": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", @@ -2235,6 +2563,11 @@ "js-tokens": "^3.0.2" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", @@ -2257,6 +2590,14 @@ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", @@ -2297,12 +2638,12 @@ } }, "babel-plugin-apply-mdx-type-prop": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.4.tgz", - "integrity": "sha512-rVtztbgf3zmT1Is6vSNugfbdI2AG3mk/PUS8H71ss5V2XRNyYgeuFgTMX3h0bTDEJnbFG3ilRH566kVhZAkGWg==", + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.16.tgz", + "integrity": "sha512-hjUd24Yhnr5NKtHpC2mcRBGjC6RUKGzSzjN9g5SdjT4WpL/JDlpmjyBf7vWsJJSXFvMIbzRyxF4lT9ukwOnj/w==", "requires": { - "@babel/helper-plugin-utils": "7.8.3", - "@mdx-js/util": "^1.6.4" + "@babel/helper-plugin-utils": "7.10.4", + "@mdx-js/util": "1.6.16" } }, "babel-plugin-dynamic-import-node": { @@ -2314,11 +2655,11 @@ } }, "babel-plugin-extract-import-names": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.4.tgz", - "integrity": "sha512-oShDRQX9CGDkg61DnNJG7T/ROjIpgzyLTi3mGr3fwbNDP3kiJ6TousEPu6d090qNUm/XiUasQ1ESOnLAb7plqQ==", + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.16.tgz", + "integrity": "sha512-Da6Ra0sbA/1Iavli8LdMbTjyrsOPaxMm4lrKl8VJN4sJI5F64qy2EpLj3+5INLvNPfW4ddwpStbfP3Rf3jIgcw==", "requires": { - "@babel/helper-plugin-utils": "7.8.3" + "@babel/helper-plugin-utils": "7.10.4" } }, "bail": { @@ -2391,14 +2732,6 @@ "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=" }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "requires": { - "tweetnacl": "^0.14.3" - } - }, "bfj": { "version": "6.1.2", "resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.2.tgz", @@ -2416,9 +2749,9 @@ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" }, "binary-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", - "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==" }, "bluebird": { "version": "3.7.2", @@ -2487,6 +2820,28 @@ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" }, + "boxen": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", + "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", + "requires": { + "ansi-align": "^3.0.0", + "camelcase": "^5.3.1", + "chalk": "^3.0.0", + "cli-boxes": "^2.2.0", + "string-width": "^4.1.0", + "term-size": "^2.1.0", + "type-fest": "^0.8.1", + "widest-line": "^3.1.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + } + } + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -2560,15 +2915,15 @@ } }, "browserify-sign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.0.tgz", - "integrity": "sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", "requires": { "bn.js": "^5.1.1", "browserify-rsa": "^4.0.1", "create-hash": "^1.2.0", "create-hmac": "^1.1.7", - "elliptic": "^6.5.2", + "elliptic": "^6.5.3", "inherits": "^2.0.4", "parse-asn1": "^5.1.5", "readable-stream": "^3.6.0", @@ -2591,14 +2946,14 @@ } }, "browserslist": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.12.0.tgz", - "integrity": "sha512-UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg==", + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.13.0.tgz", + "integrity": "sha512-MINatJ5ZNrLnQ6blGvePd/QOz9Xtu+Ne+x29iQSCHfkU5BugKVJwZKn/iiL8UbpIpa3JhviKjz+XxMo0m2caFQ==", "requires": { - "caniuse-lite": "^1.0.30001043", - "electron-to-chromium": "^1.3.413", - "node-releases": "^1.1.53", - "pkg-up": "^2.0.0" + "caniuse-lite": "^1.0.30001093", + "electron-to-chromium": "^1.3.488", + "escalade": "^3.0.1", + "node-releases": "^1.1.58" } }, "buffer": { @@ -2745,14 +3100,6 @@ "semver": "^6.0.0" } }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, "p-locate": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", @@ -2761,11 +3108,6 @@ "p-limit": "^2.2.0" } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -2781,6 +3123,40 @@ } } }, + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", + "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", + "requires": { + "pump": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" + }, + "normalize-url": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", + "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==" + } + } + }, "call-me-maybe": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", @@ -2845,14 +3221,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001066", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001066.tgz", - "integrity": "sha512-Gfj/WAastBtfxLws0RCh2sDbTK/8rJuSeZMecrSkNGYxPcv7EzblmDGfWQCFEQcSqYE2BRgQiJh8HOD07N5hIw==" - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + "version": "1.0.30001111", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001111.tgz", + "integrity": "sha512-xnDje2wchd/8mlJu8sXvWxOGvMgv+uT3iZ3bkIAynKOzToCssWCmkz/ZIkQBs/2pUB4uwnJKVORWQ31UkbVjOg==" }, "ccount": { "version": "1.0.5", @@ -2954,9 +3325,9 @@ } }, "chokidar": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.0.tgz", - "integrity": "sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.1.tgz", + "integrity": "sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g==", "requires": { "anymatch": "~3.1.1", "braces": "~3.0.2", @@ -3041,6 +3412,11 @@ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" }, + "cli-boxes": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.0.tgz", + "integrity": "sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w==" + }, "cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", @@ -3050,14 +3426,15 @@ } }, "cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" }, "clipboard": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.6.tgz", "integrity": "sha512-g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg==", + "optional": true, "requires": { "good-listener": "^1.2.2", "select": "^1.1.2", @@ -3074,21 +3451,6 @@ "wrap-ansi": "^5.1.0" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -3098,14 +3460,6 @@ "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } } } }, @@ -3131,6 +3485,19 @@ } } }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "requires": { + "mimic-response": "^1.0.0" + } + }, + "clsx": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", + "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==" + }, "coa": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", @@ -3198,13 +3565,10 @@ "simple-swizzle": "^0.2.2" } }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } + "colorette": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", + "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==" }, "comma-separated-tokens": { "version": "1.0.8", @@ -3308,15 +3672,38 @@ } } }, + "configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "requires": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + }, + "dependencies": { + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "requires": { + "semver": "^6.0.0" + } + } + } + }, "connect-history-api-fallback": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==" }, "consola": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/consola/-/consola-2.12.1.tgz", - "integrity": "sha512-aEkkju9ZcEa9y2MhzNhfmTUws/CEZZ0LKu0FxftSU3HygPfVMMIMSYyYct+xBN6XNRhsaDZjw2HAv3m2ammXSA==" + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.0.tgz", + "integrity": "sha512-vlcSGgdYS26mPf7qNi+dCisbhiyDnrN1zaRbw3CSuc2wGOMEGGPsp46PdRG5gqXwgtJfjxDkxRNAgRPr1B77vQ==" }, "console-browserify": { "version": "1.2.0", @@ -3377,6 +3764,11 @@ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" }, + "copy-text-to-clipboard": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-2.2.0.tgz", + "integrity": "sha512-WRvoIdnTs1rgPMkgA2pUOa/M4Enh2uzCwdKsOMYNAJiz/4ZvEJgmbF4OmninPmlFdAWisfeh0tH+Cpf7ni3RqQ==" + }, "copy-webpack-plugin": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-5.1.1.tgz", @@ -3446,19 +3838,6 @@ "json5": "^1.0.1" } }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - }, "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", @@ -3497,6 +3876,11 @@ } } }, + "core-js-pure": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.6.5.tgz", + "integrity": "sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA==" + }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -3515,12 +3899,12 @@ } }, "create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "requires": { "bn.js": "^4.1.0", - "elliptic": "^6.0.0" + "elliptic": "^6.5.3" }, "dependencies": { "bn.js": { @@ -3583,6 +3967,11 @@ "randomfill": "^1.0.3" } }, + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" + }, "css-blank-pseudo": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz", @@ -3632,22 +4021,22 @@ } }, "css-loader": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.5.3.tgz", - "integrity": "sha512-UEr9NH5Lmi7+dguAm+/JSPovNjYbm2k3TK58EiwQHzOHH5Jfq1Y+XoP2bQO6TMn7PptMd0opxxedAWcaSTRKHw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz", + "integrity": "sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==", "requires": { "camelcase": "^5.3.1", "cssesc": "^3.0.0", "icss-utils": "^4.1.1", "loader-utils": "^1.2.3", "normalize-path": "^3.0.0", - "postcss": "^7.0.27", + "postcss": "^7.0.32", "postcss-modules-extract-imports": "^2.0.0", "postcss-modules-local-by-default": "^3.0.2", "postcss-modules-scope": "^2.2.0", "postcss-modules-values": "^3.0.0", - "postcss-value-parser": "^4.0.3", - "schema-utils": "^2.6.6", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^2.7.0", "semver": "^6.3.0" }, "dependencies": { @@ -3872,14 +4261,6 @@ "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=" }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "^1.0.0" - } - }, "debug": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", @@ -3898,6 +4279,14 @@ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "requires": { + "mimic-response": "^1.0.0" + } + }, "deep-equal": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", @@ -3911,6 +4300,11 @@ "regexp.prototype.flags": "^1.2.0" } }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, "default-gateway": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", @@ -3920,6 +4314,11 @@ "ip-regex": "^2.1.0" } }, + "defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -3995,15 +4394,11 @@ } } }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, "delegate": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", - "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==" + "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", + "optional": true }, "depd": { "version": "1.1.2", @@ -4037,10 +4432,10 @@ "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==" }, - "detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", + "detect-port": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz", + "integrity": "sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==", "requires": { "address": "^1.0.1", "debug": "^2.6.0" @@ -4123,20 +4518,6 @@ "buffer-indexof": "^1.0.0" } }, - "docsearch.js": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/docsearch.js/-/docsearch.js-2.6.3.tgz", - "integrity": "sha512-GN+MBozuyz664ycpZY0ecdQE0ND/LSgJKhTLA0/v3arIS3S1Rpf2OJz6A35ReMsm91V5apcmzr5/kM84cvUg+A==", - "requires": { - "algoliasearch": "^3.24.5", - "autocomplete.js": "0.36.0", - "hogan.js": "^3.0.2", - "request": "^2.87.0", - "stack-utils": "^1.0.1", - "to-factory": "^1.0.0", - "zepto": "^1.2.0" - } - }, "dom-converter": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", @@ -4154,11 +4535,6 @@ "entities": "^1.1.1" } }, - "dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" - }, "domain-browser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", @@ -4208,6 +4584,11 @@ "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=" }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, "duplexify": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", @@ -4243,15 +4624,6 @@ } } }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -4263,14 +4635,14 @@ "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==" }, "electron-to-chromium": { - "version": "1.3.451", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.451.tgz", - "integrity": "sha512-2fvco0F2bBIgqzO8GRP0Jt/91pdrf9KfZ5FsmkYkjERmIJG585cFeFZV4+CO6oTmU3HmCTgfcZuEa7kW8VUh3A==" + "version": "1.3.520", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.520.tgz", + "integrity": "sha512-q6H9E1sXDCjRHP+X06vcP+N0ki8ZvYoRPZfKnDuiRX10WWXxEHzKFVf4O9rBFMpuPtR3M+2KAdJnugJoBBp3Rw==" }, "elliptic": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz", - "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", + "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", "requires": { "bn.js": "^4.4.0", "brorand": "^1.0.1", @@ -4289,9 +4661,9 @@ } }, "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" }, "emojis-list": { "version": "3.0.0", @@ -4317,9 +4689,9 @@ } }, "enhanced-resolve": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz", - "integrity": "sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", + "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", "requires": { "graceful-fs": "^4.1.2", "memory-fs": "^0.5.0", @@ -4364,15 +4736,6 @@ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" }, - "envify": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/envify/-/envify-4.1.0.tgz", - "integrity": "sha512-IKRVVoAYr4pIx4yIWNsz9mOsboxlNXiu7TNBnem/K/uTHdkyzXWDzHCK7UTolqBbgaBz0tQHsD3YNls0uIIjiw==", - "requires": { - "esprima": "^4.0.0", - "through": "~2.3.4" - } - }, "errno": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", @@ -4390,21 +4753,21 @@ } }, "es-abstract": { - "version": "1.17.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", - "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", + "version": "1.17.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", + "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", "requires": { "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.1", - "is-callable": "^1.1.5", - "is-regex": "^1.0.5", + "is-callable": "^1.2.0", + "is-regex": "^1.1.0", "object-inspect": "^1.7.0", "object-keys": "^1.1.1", "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.1", - "string.prototype.trimright": "^2.1.1" + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" } }, "es-to-primitive": { @@ -4417,10 +4780,15 @@ "is-symbol": "^1.0.2" } }, - "es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" + "escalade": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.0.2.tgz", + "integrity": "sha512-gPYAU37hYCUhW5euPeR+Y74F7BL+IBsV93j5cvGriSaD1aG6MGsqsV1yamRdrWrb2j3aiZvb0X+UBOWpx3JWtQ==" + }, + "escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==" }, "escape-html": { "version": "1.0.3", @@ -4465,9 +4833,9 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, "eta": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/eta/-/eta-1.1.1.tgz", - "integrity": "sha512-YRchTAXZZrrJVmlAwmLHuKmlHNJ2hO0uen8LsDqvH5kknRjh0ef+Y9kInENygCgvu7FQNJBpbyDChfMo8f5Qgw==" + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/eta/-/eta-1.2.2.tgz", + "integrity": "sha512-8H+zm3HfY2ELz5P4zzR3uJ1LQLnhTAe5gb0vR9ziKZGCLhQrRtqwIyzsOkf7pdBnH7gFPLRAaKZdv2nj9vu9cw==" }, "etag": { "version": "1.8.1", @@ -4488,9 +4856,9 @@ "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" }, "events": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.1.0.tgz", - "integrity": "sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==" + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", + "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==" }, "eventsource": { "version": "1.0.7", @@ -4731,20 +5099,15 @@ } } }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, "fast-deep-equal": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", - "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==" + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "fast-glob": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.2.tgz", - "integrity": "sha512-UDV82o4uQyljznxwMxyVRJgZZt3O5wENYojjzbaGEGZgeOxkLFf+V4cnUD+krzb2F72E18RhamkMZ7AdeggF7A==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", + "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -4759,6 +5122,14 @@ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, + "fast-url-parser": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", + "integrity": "sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0=", + "requires": { + "punycode": "^1.3.2" + } + }, "fastq": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz", @@ -4776,9 +5147,9 @@ } }, "feed": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.0.tgz", - "integrity": "sha512-nLU4Fn+5TCJ1Zu9kBDqXPxsaTXaL/hZgZ3pmT87TUzS1kfaL91iIKJ+DFWygL8CrOeYw80z7QWxabkMV/x+g2g==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.1.tgz", + "integrity": "sha512-l28KKcK1J/u3iq5dRDmmoB2p7dtBfACC2NqJh4dI2kFptxH0asfjmOfcxqh5Sv8suAlVa73gZJ4REY5RrafVvg==", "requires": { "xml-js": "^1.6.11" } @@ -4796,6 +5167,15 @@ "escape-string-regexp": "^1.0.5" } }, + "file-loader": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.0.0.tgz", + "integrity": "sha512-/aMOAYEFXDdjG0wytpTL5YQLfZnnTmLNjn+AIrJ/6HVnTfDqLsVKUUwkDf4I4kgex36BvjuXEn/TX9B/1ESyqQ==", + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^2.6.5" + } + }, "filesize": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.0.1.tgz", @@ -4849,11 +5229,11 @@ } }, "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "requires": { - "locate-path": "^2.0.0" + "locate-path": "^3.0.0" } }, "flatten": { @@ -4895,22 +5275,9 @@ } }, "follow-redirects": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.11.0.tgz", - "integrity": "sha512-KZm0V+ll8PfBrKwMzdo5D13b1bur9Iq9Zd/RMmAoQQcl2PxxFml8cxXPaaPYVbV0RjNjq1CU7zIzAOqtUPudmA==", - "requires": { - "debug": "^3.0.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - } - } + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.12.1.tgz", + "integrity": "sha512-tmRv0AVuR7ZyouUHLeNSiO6pqulF7dYa3s19c6t+wz9LD69/uSzdMxJ2S91nTI9U3rt/IldxpzMOFejp6f0hjg==" }, "for-in": { "version": "1.0.2", @@ -4925,16 +5292,6 @@ "for-in": "^1.0.1" } }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, "fork-ts-checker-webpack-plugin": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-3.1.1.tgz", @@ -5081,16 +5438,6 @@ } } }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, "forwarded": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", @@ -5239,14 +5586,6 @@ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "^1.0.0" - } - }, "github-slugger": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.3.0.tgz", @@ -5288,13 +5627,12 @@ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=" }, - "global": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", - "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "global-dirs": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.0.1.tgz", + "integrity": "sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A==", "requires": { - "min-document": "^2.19.0", - "process": "^0.11.10" + "ini": "^1.3.5" } }, "global-modules": { @@ -5359,9 +5697,9 @@ } }, "ignore": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.6.tgz", - "integrity": "sha512-cgXgkypZBcCnOgSihyeqbo6gjIaIyDqPQB7Ra4vhE9m6kigdGoQDMHjviFhRZo3IMlRy6yElosoviMs5YxZXUA==" + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" }, "slash": { "version": "3.0.0", @@ -5374,10 +5712,29 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", + "optional": true, "requires": { "delegate": "^3.1.2" } }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + } + }, "graceful-fs": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", @@ -5408,20 +5765,6 @@ "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -5436,6 +5779,13 @@ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "requires": { "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + } } }, "has-flag": { @@ -5495,6 +5845,11 @@ } } }, + "has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==" + }, "hash-base": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", @@ -5522,38 +5877,30 @@ } }, "hast-to-hyperscript": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-7.0.4.tgz", - "integrity": "sha512-vmwriQ2H0RPS9ho4Kkbf3n3lY436QKLq6VaGA1pzBh36hBi3tm1DO9bR+kaJIbpT10UqaANDkMjxvjVfr+cnOA==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.0.tgz", + "integrity": "sha512-NJvMYU3GlMLs7hN3CRbsNlMzusVNkYBogVWDGybsuuVQ336gFLiD+q9qtFZT2meSHzln3pNISZWTASWothMSMg==", "requires": { + "@types/unist": "^2.0.3", "comma-separated-tokens": "^1.0.0", "property-information": "^5.3.0", "space-separated-tokens": "^1.0.0", - "style-to-object": "^0.2.1", - "unist-util-is": "^3.0.0", - "web-namespaces": "^1.1.2" - }, - "dependencies": { - "style-to-object": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.2.3.tgz", - "integrity": "sha512-1d/k4EY2N7jVLOqf2j04dTc37TPOv/hHxZmvpg8Pdh8UYydxeu/C1W1U4vD8alzf5V2Gt7rLsmkr4dxAlDm9ng==", - "requires": { - "inline-style-parser": "0.1.1" - } - } + "style-to-object": "^0.3.0", + "unist-util-is": "^4.0.0", + "web-namespaces": "^1.0.0" } }, "hast-util-from-parse5": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-5.0.3.tgz", - "integrity": "sha512-gOc8UB99F6eWVWFtM9jUikjN7QkWxB3nY0df5Z0Zq1/Nkwl5V4hAAsl0tmwlgWl/1shlTF8DnNYLO8X6wRV9pA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.0.tgz", + "integrity": "sha512-3ZYnfKenbbkhhNdmOQqgH10vnvPivTdsOJCri+APn0Kty+nRkDHArnaX9Hiaf8H+Ig+vkNptL+SRY/6RwWJk1Q==", "requires": { - "ccount": "^1.0.3", + "@types/parse5": "^5.0.0", + "ccount": "^1.0.0", "hastscript": "^5.0.0", "property-information": "^5.0.0", - "web-namespaces": "^1.1.2", - "xtend": "^4.0.1" + "vfile": "^4.0.0", + "web-namespaces": "^1.0.0" } }, "hast-util-parse-selector": { @@ -5562,26 +5909,28 @@ "integrity": "sha512-gW3sxfynIvZApL4L07wryYF4+C9VvH3AUi7LAnVXV4MneGEgwOByXvFo18BgmTWnm7oHAe874jKbIB1YhHSIzA==" }, "hast-util-raw": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-5.0.2.tgz", - "integrity": "sha512-3ReYQcIHmzSgMq8UrDZHFL0oGlbuVGdLKs8s/Fe8BfHFAyZDrdv1fy/AGn+Fim8ZuvAHcJ61NQhVMtyfHviT/g==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.0.tgz", + "integrity": "sha512-IQo6tv3bMMKxk53DljswliucCJOQxaZFCuKEJ7X80249dmJ1nA9LtOnnylsLlqTG98NjQ+iGcoLAYo9q5FRhRg==", "requires": { - "hast-util-from-parse5": "^5.0.0", - "hast-util-to-parse5": "^5.0.0", + "@types/hast": "^2.0.0", + "hast-util-from-parse5": "^6.0.0", + "hast-util-to-parse5": "^6.0.0", "html-void-elements": "^1.0.0", - "parse5": "^5.0.0", + "parse5": "^6.0.0", "unist-util-position": "^3.0.0", + "vfile": "^4.0.0", "web-namespaces": "^1.0.0", "xtend": "^4.0.0", "zwitch": "^1.0.0" } }, "hast-util-to-parse5": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-5.1.2.tgz", - "integrity": "sha512-ZgYLJu9lYknMfsBY0rBV4TJn2xiwF1fXFFjbP6EE7S0s5mS8LIKBVWzhA1MeIs1SWW6GnnE4In6c3kPb+CWhog==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", + "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", "requires": { - "hast-to-hyperscript": "^7.0.0", + "hast-to-hyperscript": "^9.0.0", "property-information": "^5.0.0", "web-namespaces": "^1.0.0", "xtend": "^4.0.0", @@ -5632,22 +5981,6 @@ "minimalistic-crypto-utils": "^1.0.1" } }, - "hogan.js": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/hogan.js/-/hogan.js-3.0.2.tgz", - "integrity": "sha1-TNnhq9QpQUbnZ55B14mHMrAse/0=", - "requires": { - "mkdirp": "0.3.0", - "nopt": "1.0.10" - }, - "dependencies": { - "mkdirp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz", - "integrity": "sha1-G79asbqCevI1dRQ0kEJkVfSB/h4=" - } - } - }, "hoist-non-react-statics": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", @@ -5798,6 +6131,11 @@ "readable-stream": "^3.1.1" } }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + }, "http-deceiver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", @@ -5959,16 +6297,6 @@ } } }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, "https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", @@ -6010,11 +6338,6 @@ "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==" }, - "immediate": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", - "integrity": "sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw=" - }, "immer": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/immer/-/immer-1.10.0.tgz", @@ -6052,6 +6375,11 @@ } } }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" + }, "import-local": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", @@ -6082,9 +6410,9 @@ "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" }, "infima": { - "version": "0.2.0-alpha.11", - "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.11.tgz", - "integrity": "sha512-k2roW8kzF9e7wQo8KTALY7lJRgU6bARSej5/ujA8fvJKyiDPTnzW/MgnDAelFWp6ZvCaEsBLkcv+n3FbjZnsZQ==" + "version": "0.2.0-alpha.12", + "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.12.tgz", + "integrity": "sha512-in5n36oE2sdiB/1rzuzdmKyuNRMVUO9P+qUidUG8leHeDU+WMQ7oTP7MXSqtAAxduiPb7HHi0/ptQLLUr/ge4w==" }, "inflight": { "version": "1.0.6", @@ -6111,46 +6439,80 @@ "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" }, "inquirer": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.4.tgz", - "integrity": "sha512-Bu5Td5+j11sCkqfqmUTiwv+tWisMtP0L7Q8WrqA2C/BbBhy1YTdFrvjjlrKq8oagA/tLQBski2Gcx/Sqyi2qSQ==", + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", "requires": { "ansi-escapes": "^4.2.1", - "chalk": "^2.4.2", + "chalk": "^4.1.0", "cli-cursor": "^3.1.0", - "cli-width": "^2.0.0", + "cli-width": "^3.0.0", "external-editor": "^3.0.3", "figures": "^3.0.0", - "lodash": "^4.17.15", + "lodash": "^4.17.19", "mute-stream": "0.0.8", - "run-async": "^2.2.0", - "rxjs": "^6.5.3", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", "string-width": "^4.1.0", - "strip-ansi": "^5.1.0", + "strip-ansi": "^6.0.0", "through": "^2.3.6" }, "dependencies": { "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } }, "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" } }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", "requires": { - "ansi-regex": "^4.1.0" + "has-flag": "^4.0.0" } } } @@ -6165,9 +6527,9 @@ } }, "interpret": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", - "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" }, "invariant": { "version": "2.2.4", @@ -6253,9 +6615,24 @@ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "is-callable": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", - "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", + "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==" + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "requires": { + "ci-info": "^2.0.0" + }, + "dependencies": { + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + } + } }, "is-color-stop": { "version": "1.1.0", @@ -6321,9 +6698,9 @@ "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=" }, "is-docker": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.0.0.tgz", - "integrity": "sha512-pJEdRugimx4fBMra5z2/5iRdZ63OhYV0vr0Dwm5+xtW4D1FvRkB8hamMIhnWfyJeDdyr/aa7BDyNbtG38VxgoQ==" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", + "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==" }, "is-extendable": { "version": "0.1.1", @@ -6336,9 +6713,9 @@ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, "is-glob": { "version": "4.0.1", @@ -6353,6 +6730,20 @@ "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==" }, + "is-installed-globally": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", + "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", + "requires": { + "global-dirs": "^2.0.1", + "is-path-inside": "^3.0.1" + } + }, + "is-npm": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", + "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==" + }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -6405,11 +6796,11 @@ } }, "is-regex": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", - "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", "requires": { - "has": "^1.0.3" + "has-symbols": "^1.0.1" } }, "is-regexp": { @@ -6476,6 +6867,11 @@ "is-docker": "^2.0.0" } }, + "is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -6491,11 +6887,6 @@ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, "jest-worker": { "version": "25.5.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.5.0.tgz", @@ -6534,36 +6925,26 @@ "esprima": "^4.0.0" } }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + }, "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, "json3": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", @@ -6585,15 +6966,12 @@ "graceful-fs": "^4.1.6" } }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" + "json-buffer": "3.0.0" } }, "killable": { @@ -6615,6 +6993,14 @@ "webpack-sources": "^1.1.0" } }, + "latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "requires": { + "package-json": "^6.3.0" + } + }, "lazy-cache": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", @@ -6638,11 +7024,6 @@ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" }, - "load-script": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/load-script/-/load-script-1.0.0.tgz", - "integrity": "sha1-BJGTngvuVkPuSUp+PaPSuscMbKQ=" - }, "loader-runner": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", @@ -6659,18 +7040,18 @@ } }, "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "requires": { - "p-locate": "^2.0.0", + "p-locate": "^3.0.0", "path-exists": "^3.0.0" } }, "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" }, "lodash._reinterpolate": { "version": "3.0.0", @@ -6845,6 +7226,11 @@ "tslib": "^1.10.0" } }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + }, "lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -7015,9 +7401,9 @@ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, "merge2": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz", - "integrity": "sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" }, "methods": { "version": "1.1.2", @@ -7077,13 +7463,10 @@ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "requires": { - "dom-walk": "^0.1.0" - } + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" }, "mini-create-react-context": { "version": "0.4.0", @@ -7190,9 +7573,9 @@ } }, "minipass-pipeline": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.3.tgz", - "integrity": "sha512-cFOknTvng5vqnwOpDsZTWhNll6Jf8o2x+/diplafmxpuIymAjzoOolZG0VvQf3V2HgqzJNhnuKHYp2BqDgz8IQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", "requires": { "minipass": "^3.0.0" } @@ -7337,9 +7720,9 @@ "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, "neo-async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", - "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==" + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, "nice-try": { "version": "1.0.5", @@ -7425,17 +7808,9 @@ } }, "node-releases": { - "version": "1.1.56", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.56.tgz", - "integrity": "sha512-EVo605FhWLygH8a64TjgpjyHYOihkxECwX1bHHr8tETJKWEiWS2YJjPbvsX2jFjnjTNEgBCmk9mLjKG1Mf11cw==" - }, - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "requires": { - "abbrev": "1" - } + "version": "1.1.60", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.60.tgz", + "integrity": "sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA==" }, "normalize-path": { "version": "3.0.0", @@ -7530,11 +7905,6 @@ "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=" }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -7569,9 +7939,9 @@ } }, "object-inspect": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", - "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==" + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", + "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==" }, "object-is": { "version": "1.1.2", @@ -7661,17 +8031,17 @@ } }, "onetime": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", - "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.1.tgz", + "integrity": "sha512-ZpZpjcJeugQfWsfyQlshVoowIIQ1qBGSVll4rfDq6JJVO//fesjoX808hXWfBjY+ROZgpKDI5TRSRBSoJiZ8eg==", "requires": { "mimic-fn": "^2.1.0" } }, "open": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/open/-/open-7.0.4.tgz", - "integrity": "sha512-brSA+/yq+b08Hsr4c8fsEW2CRzk1BmfN3SAK/5VCHQ9bdoZJ4qa/+AfR0xHjlbbZUyPkUHs1b8x1RqdyZdkVqQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-7.1.0.tgz", + "integrity": "sha512-lLPI5KgOwEYCDKXf4np7y1PBEkj7HYIyP2DY8mVDRnx0VIIu6bNrRB0R66TuO7Mack6EnTNLm4uvcl1UoklTpA==", "requires": { "is-docker": "^2.0.0", "is-wsl": "^2.1.1" @@ -7724,25 +8094,30 @@ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" }, + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" + }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" }, "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "requires": { - "p-try": "^1.0.0" + "p-try": "^2.0.0" } }, "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "requires": { - "p-limit": "^1.1.0" + "p-limit": "^2.0.0" } }, "p-map": { @@ -7762,9 +8137,20 @@ } }, "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "requires": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + } }, "pako": { "version": "1.0.11", @@ -7849,9 +8235,9 @@ } }, "parse-json": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz", - "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.1.tgz", + "integrity": "sha512-ztoZ4/DYeXQq4E21v169sC8qWINGpcosGv9XhTDvg9/hWvx/zrFkc9BiWxR58OJLHGk28j5BL0SDLeV2WmFZlQ==", "requires": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -7865,9 +8251,9 @@ "integrity": "sha1-tPCdQTx6282Yf26SM8e0shDJOOQ=" }, "parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" }, "parseurl": { "version": "1.3.3", @@ -7934,9 +8320,9 @@ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" }, "pbkdf2": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", - "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", + "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", "requires": { "create-hash": "^1.1.2", "create-hmac": "^1.1.4", @@ -7945,11 +8331,6 @@ "sha.js": "^2.4.8" } }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, "picomatch": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", @@ -7979,64 +8360,32 @@ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "requires": { "find-up": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - } } }, "pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", - "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "requires": { + "find-up": "^3.0.0" + } + }, + "pnp-webpack-plugin": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz", + "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==", "requires": { - "find-up": "^2.1.0" + "ts-pnp": "^1.1.6" } }, "portfinder": { - "version": "1.0.26", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.26.tgz", - "integrity": "sha512-Xi7mKxJHHMI3rIUrnm/jjUgwhbYMkp/XKEcZX3aG4BrumLpq3nmoQMX+ClYnDZnZ/New7IatC1no5RX0zo1vXQ==", + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", "requires": { "async": "^2.6.2", "debug": "^3.1.1", - "mkdirp": "^0.5.1" + "mkdirp": "^0.5.5" }, "dependencies": { "debug": { @@ -8055,9 +8404,9 @@ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" }, "postcss": { - "version": "7.0.30", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.30.tgz", - "integrity": "sha512-nu/0m+NtIzoubO+xdAlwZl/u5S5vi/y6BCsoL8D+8IxsD3XvBS8X4YEADNIVXKVuQvduiucnRv+vPIqj56EGMQ==", + "version": "7.0.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", + "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -8610,14 +8959,14 @@ } }, "postcss-modules-local-by-default": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.2.tgz", - "integrity": "sha512-jM/V8eqM4oJ/22j0gx4jrp63GSvDH6v86OqyTHHUvk4/k1vceipZsaymiZ5PvocqZOl5SFHiFJqjs3la0wnfIQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", + "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", "requires": { "icss-utils": "^4.1.1", - "postcss": "^7.0.16", + "postcss": "^7.0.32", "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.0" + "postcss-value-parser": "^4.1.0" } }, "postcss-modules-scope": { @@ -9049,11 +9398,6 @@ "clipboard": "^2.0.0" } }, - "private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" - }, "process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", @@ -9101,11 +9445,6 @@ "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" - }, "public-encrypt": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", @@ -9161,6 +9500,14 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" }, + "pupa": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.0.1.tgz", + "integrity": "sha512-hEJH0s8PXLY/cdXh66tNEQGndDrIKNqNC5xmrysZy3i5C3oEoLna7YAOad+7u125+zH1HNXUmGEkrhb3c2VriA==", + "requires": { + "escape-goat": "^2.0.0" + } + }, "q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", @@ -9228,6 +9575,17 @@ "unpipe": "1.0.0" } }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, "react": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react/-/react-16.13.1.tgz", @@ -9269,16 +9627,19 @@ "text-table": "0.2.0" }, "dependencies": { + "@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "requires": { + "@babel/highlight": "^7.8.3" + } + }, "@nodelib/fs.stat": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==" }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - }, "braces": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", @@ -9334,6 +9695,28 @@ } } }, + "cli-width": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "detect-port-alt": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", + "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", + "requires": { + "address": "^1.0.1", + "debug": "^2.6.0" + } + }, "dir-glob": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", @@ -9413,29 +9796,6 @@ "requires": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" - }, - "dependencies": { - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - } } }, "glob-parent": { @@ -9471,6 +9831,36 @@ "slash": "^1.0.0" } }, + "inquirer": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.4.tgz", + "integrity": "sha512-Bu5Td5+j11sCkqfqmUTiwv+tWisMtP0L7Q8WrqA2C/BbBhy1YTdFrvjjlrKq8oagA/tLQBski2Gcx/Sqyi2qSQ==", + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^2.4.2", + "cli-cursor": "^3.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.15", + "mute-stream": "0.0.8", + "run-async": "^2.2.0", + "rxjs": "^6.5.3", + "string-width": "^4.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + }, + "dependencies": { + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -9508,12 +9898,11 @@ } }, "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "p-locate": "^4.1.0" } }, "micromatch": { @@ -9536,26 +9925,23 @@ "to-regex": "^3.0.2" } }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "requires": { - "p-limit": "^2.0.0" + "p-limit": "^2.2.0" } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" }, "path-type": { "version": "3.0.0", @@ -9570,30 +9956,19 @@ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" }, - "pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "requires": { - "find-up": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - } - } - }, "strip-ansi": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "requires": { "ansi-regex": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + } } }, "to-regex-range": { @@ -9624,18 +9999,18 @@ "integrity": "sha512-TAv1KJFh3RhqxNvhzxj6LeT5NWklP6rDr2a0jaTfsZ5wSZWHOGeqQyejUp3xxLfPt2UpyJEcVQB/zyPcmonNFA==" }, "react-fast-compare": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz", - "integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==" + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", + "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" }, "react-helmet": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/react-helmet/-/react-helmet-6.0.0.tgz", - "integrity": "sha512-My6S4sa0uHN/IuVUn0HFmasW5xj9clTkB9qmMngscVycQ5vVG51Qp44BEvLJ4lixupTwDlU9qX1/sCrMN4AEPg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/react-helmet/-/react-helmet-6.1.0.tgz", + "integrity": "sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==", "requires": { "object-assign": "^4.1.1", "prop-types": "^15.7.2", - "react-fast-compare": "^2.0.4", + "react-fast-compare": "^3.1.1", "react-side-effect": "^2.1.0" } }, @@ -9653,9 +10028,9 @@ } }, "react-loadable-ssr-addon": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon/-/react-loadable-ssr-addon-0.2.0.tgz", - "integrity": "sha512-gTfPaxWZa5mHKeSOE61RpoLe7hyjcJHgNa5m0ZZGV3OCkWsOKlfYgoBxXzu9ENg/ePR/kFd5H3ncF4K5eyyNTQ==" + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon/-/react-loadable-ssr-addon-0.2.3.tgz", + "integrity": "sha512-vPCqsmiafAMDcS9MLgXw3m4yMI40v1UeI8FTYJJkjf85LugKNnHf6D9yoDTzYwp8wEGF5viekwOD03ZPxSwnQQ==" }, "react-router": { "version": "5.2.0", @@ -9763,18 +10138,10 @@ "minimatch": "3.0.4" } }, - "reduce": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/reduce/-/reduce-1.0.2.tgz", - "integrity": "sha512-xX7Fxke/oHO5IfZSk77lvPa/7bjMh9BuCk4OOoX5XTXrM7s0Z+MkPfSDfz0q7r91BhhGSs8gii/VEN/7zhCPpQ==", - "requires": { - "object-keys": "^1.1.0" - } - }, "regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", + "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==" }, "regenerate-unicode-properties": { "version": "8.2.0", @@ -9785,17 +10152,16 @@ } }, "regenerator-runtime": { - "version": "0.13.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", - "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==" + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" }, "regenerator-transform": { - "version": "0.14.4", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.4.tgz", - "integrity": "sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw==", + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", "requires": { - "@babel/runtime": "^7.8.4", - "private": "^0.1.8" + "@babel/runtime": "^7.8.4" } }, "regex-not": { @@ -9848,6 +10214,22 @@ "unicode-match-property-value-ecmascript": "^1.2.0" } }, + "registry-auth-token": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.0.tgz", + "integrity": "sha512-P+lWzPrsgfN+UEpDS3U8AQKg/UjZX6mQSJueZj3EK+vNESoqBSpBUD3gmu4sF9lOsjXWjF11dQKUqemf3veq1w==", + "requires": { + "rc": "^1.2.8" + } + }, + "registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "requires": { + "rc": "^1.2.8" + } + }, "regjsgen": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", @@ -9876,6 +10258,25 @@ "hast-util-from-parse5": "^5.0.0", "parse5": "^5.0.0", "xtend": "^4.0.0" + }, + "dependencies": { + "hast-util-from-parse5": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-5.0.3.tgz", + "integrity": "sha512-gOc8UB99F6eWVWFtM9jUikjN7QkWxB3nY0df5Z0Zq1/Nkwl5V4hAAsl0tmwlgWl/1shlTF8DnNYLO8X6wRV9pA==", + "requires": { + "ccount": "^1.0.3", + "hastscript": "^5.0.0", + "property-information": "^5.0.0", + "web-namespaces": "^1.1.2", + "xtend": "^4.0.1" + } + }, + "parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" + } } }, "relateurl": { @@ -9928,24 +10329,64 @@ "integrity": "sha512-X9Ncj4cj3/CIvLI2Z9IobHtVi8FVdUrdJkCNaL9kdX8ohfsi18DXHsCVd/A7ssARBdccdDb5ODnt62WuEWaM/g==" }, "remark-mdx": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.4.tgz", - "integrity": "sha512-tJ/CGNNLVC8nOm0C3EjDQH4Vl3YhawgR2f3J+RaalrMDrT4s5ZzOqoNesV1cnF/DsoOxKlYkExOpNSOa6rkAtQ==", - "requires": { - "@babel/core": "7.9.6", - "@babel/helper-plugin-utils": "7.8.3", - "@babel/plugin-proposal-object-rest-spread": "7.9.6", - "@babel/plugin-syntax-jsx": "7.8.3", - "@mdx-js/util": "^1.6.4", + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.16.tgz", + "integrity": "sha512-xqZhBQ4TonFiSFpVt6SnTLRnxstu7M6pcaOibKZhqzk4zMRVacVenD7iECjfESK+72LkPm/NW+0r5ahJAg7zlQ==", + "requires": { + "@babel/core": "7.10.5", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-proposal-object-rest-spread": "7.10.4", + "@babel/plugin-syntax-jsx": "7.10.4", + "@mdx-js/util": "1.6.16", "is-alphabetical": "1.0.4", - "remark-parse": "8.0.2", - "unified": "9.0.0" + "remark-parse": "8.0.3", + "unified": "9.1.0" + }, + "dependencies": { + "@babel/core": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.10.5.tgz", + "integrity": "sha512-O34LQooYVDXPl7QWCdW9p4NR+QlzOr7xShPPJz8GsuCU3/8ua/wqTr7gmnxXv+WBESiGU/G5s16i6tUvHkNb+w==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.10.5", + "@babel/helper-module-transforms": "^7.10.5", + "@babel/helpers": "^7.10.4", + "@babel/parser": "^7.10.5", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.5", + "@babel/types": "^7.10.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.4.tgz", + "integrity": "sha512-6vh4SqRuLLarjgeOf4EaROJAHjvu9Gl+/346PbDH9yWbJyfnJ/ah3jmYKYtswEyCoWZiidvVHjHshd4WgjB9BA==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.10.4" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } } }, "remark-parse": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.2.tgz", - "integrity": "sha512-eMI6kMRjsAGpMXXBAywJwiwAse+KNpmt+BK55Oofy4KvBZEqUDj6mWbGLJZrujoPIPPxDXzn3T9baRlpsm2jnQ==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", + "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", "requires": { "ccount": "^1.0.0", "collapse-white-space": "^1.0.2", @@ -9988,6 +10429,21 @@ "htmlparser2": "^3.3.0", "strip-ansi": "^3.0.0", "utila": "^0.4.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + } } }, "repeat-element": { @@ -10005,40 +10461,6 @@ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=" }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - } - } - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -10097,6 +10519,14 @@ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "requires": { + "lowercase-keys": "^1.0.0" + } + }, "restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -10172,9 +10602,9 @@ "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=" }, "rxjs": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz", - "integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==", + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", + "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", "requires": { "tslib": "^1.9.0" } @@ -10212,11 +10642,12 @@ } }, "schema-utils": { - "version": "2.6.6", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.6.tgz", - "integrity": "sha512-wHutF/WPSbIi9x6ctjGGk2Hvl0VOz5l3EKEuKbjPlB30mKZUzb9A5k9yEXRX3pwyqVLPvpfZZEllaFq/M718hA==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", "requires": { - "ajv": "^6.12.0", + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", "ajv-keywords": "^3.4.1" } }, @@ -10232,7 +10663,8 @@ "select": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", - "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=" + "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=", + "optional": true }, "select-hose": { "version": "2.0.0", @@ -10252,6 +10684,14 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" }, + "semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "requires": { + "semver": "^6.3.0" + } + }, "send": { "version": "0.17.1", "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", @@ -10299,6 +10739,56 @@ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz", "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==" }, + "serve-handler": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.3.tgz", + "integrity": "sha512-FosMqFBNrLyeiIDvP1zgO6YoTzFYHxLDEIavhlmQ+knB2Z7l1t+kGLHkZIDN7UVWqQAmKI3D20A6F6jo3nDd4w==", + "requires": { + "bytes": "3.0.0", + "content-disposition": "0.5.2", + "fast-url-parser": "1.1.3", + "mime-types": "2.1.18", + "minimatch": "3.0.4", + "path-is-inside": "1.0.2", + "path-to-regexp": "2.2.1", + "range-parser": "1.2.0" + }, + "dependencies": { + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + }, + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" + }, + "mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "requires": { + "mime-db": "~1.33.0" + } + }, + "path-to-regexp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", + "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==" + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + } + } + }, "serve-index": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", @@ -10741,22 +11231,6 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, "ssri": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", @@ -10770,11 +11244,6 @@ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" }, - "stack-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", - "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==" - }, "state-toggle": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", @@ -10915,6 +11384,16 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, "strip-ansi": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", @@ -10934,26 +11413,6 @@ "es-abstract": "^1.17.5" } }, - "string.prototype.trimleft": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz", - "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5", - "string.prototype.trimstart": "^1.0.0" - } - }, - "string.prototype.trimright": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz", - "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5", - "string.prototype.trimend": "^1.0.0" - } - }, "string.prototype.trimstart": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", @@ -10996,11 +11455,11 @@ } }, "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "^4.1.0" } }, "strip-bom-string": { @@ -11018,6 +11477,11 @@ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, "style-to-object": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", @@ -11103,9 +11567,9 @@ } }, "css-what": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.2.1.tgz", - "integrity": "sha512-WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw==" + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.3.0.tgz", + "integrity": "sha512-pv9JPyatiPaQ6pf4OvD/dbfm0o5LviWmwxNWzblYf/1u9QZd0ihV+PMwy5jdQWQ3349kZmKEx9WXuSka2dM4cg==" }, "domutils": { "version": "1.7.0", @@ -11123,10 +11587,15 @@ "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" }, + "term-size": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.0.tgz", + "integrity": "sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw==" + }, "terser": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.7.0.tgz", - "integrity": "sha512-Lfb0RiZcjRDXCC3OSHJpEkxJ9Qeqs6mp2v4jf2MHfy8vGERmVDuvjXdd/EnP5Deme5F2yBRBymKmKHCBg2echw==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", "requires": { "commander": "^2.20.0", "source-map": "~0.6.1", @@ -11146,16 +11615,16 @@ } }, "terser-webpack-plugin": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-2.3.6.tgz", - "integrity": "sha512-I8IDsQwZrqjdmOicNeE8L/MhwatAap3mUrtcAKJuilsemUNcX+Hier/eAzwStVqhlCxq0aG3ni9bK/0BESXkTg==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-2.3.7.tgz", + "integrity": "sha512-xzYyaHUNhzgaAdBsXxk2Yvo/x1NJdslUaussK3fdpBbvttm1iIwU+c26dj9UxJcwk2c5UWt5F55MUTIA8BE7Dg==", "requires": { "cacache": "^13.0.1", "find-cache-dir": "^3.3.1", "jest-worker": "^25.4.0", "p-limit": "^2.3.0", "schema-utils": "^2.6.6", - "serialize-javascript": "^3.0.0", + "serialize-javascript": "^3.1.0", "source-map": "^0.6.1", "terser": "^4.6.12", "webpack-sources": "^1.4.3" @@ -11221,14 +11690,6 @@ "semver": "^6.0.0" } }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, "p-locate": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", @@ -11237,11 +11698,6 @@ "p-limit": "^2.2.0" } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -11256,9 +11712,12 @@ } }, "serialize-javascript": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.0.0.tgz", - "integrity": "sha512-skZcHYw2vEX4bw90nAr2iTTsz6x2SrHEnfxgKYmZlvJYBEZrvbKtobJWlQ20zczKb3bsHHXXTYt48zBA7ni9cw==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.1.0.tgz", + "integrity": "sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg==", + "requires": { + "randombytes": "^2.1.0" + } }, "source-map": { "version": "0.6.1", @@ -11340,7 +11799,8 @@ "tiny-emitter": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", - "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", + "optional": true }, "tiny-invariant": { "version": "1.1.0", @@ -11365,11 +11825,6 @@ "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" }, - "to-factory": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-factory/-/to-factory-1.0.0.tgz", - "integrity": "sha1-hzivi9lxIK0dQEeXKtpVY7+UebE=" - }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -11393,6 +11848,11 @@ } } }, + "to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" + }, "to-regex": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", @@ -11436,22 +11896,6 @@ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - } - } - }, "tr46": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", @@ -11492,6 +11936,11 @@ "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==" }, + "ts-pnp": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", + "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==" + }, "tslib": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", @@ -11502,23 +11951,10 @@ "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - }, "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==" + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" }, "type-is": { "version": "1.6.18", @@ -11534,6 +11970,14 @@ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "requires": { + "is-typedarray": "^1.0.0" + } + }, "unherit": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", @@ -11568,9 +12012,9 @@ "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==" }, "unified": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.0.0.tgz", - "integrity": "sha512-ssFo33gljU3PdlWLjNp15Inqb77d6JnJSfyplGJPT/a+fNRNyCBeveBAYJdO5khKdF6WVHa/yYCC7Xl6BDwZUQ==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.1.0.tgz", + "integrity": "sha512-VXOv7Ic6twsKGJDeZQ2wwPqXs2hM0KNu5Hkg9WgAZbSD1pxhZ7p8swqg583nw1Je2fhwHy6U8aEjiI79x1gvag==", "requires": { "bail": "^1.0.0", "extend": "^3.0.0", @@ -11629,6 +12073,14 @@ "imurmurhash": "^0.1.4" } }, + "unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "requires": { + "crypto-random-string": "^2.0.0" + } + }, "unist-builder": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", @@ -11640,9 +12092,9 @@ "integrity": "sha512-1TC+NxQa4N9pNdayCYA1EGUOCAO0Le3fVp7Jzns6lnua/mYgwHo0tz5WUAfrdpNch1RZLHc61VZ1SDgrtNXLSw==" }, "unist-util-is": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", - "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", + "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==" }, "unist-util-position": { "version": "3.1.0", @@ -11655,13 +12107,6 @@ "integrity": "sha512-HwwWyNHKkeg/eXRnE11IpzY8JT55JNM1YCwwU9YNCnfzk6s8GhPXrVBBZWiwLeATJbI7euvoGSzcy9M29UeW3g==", "requires": { "unist-util-is": "^4.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==" - } } }, "unist-util-remove-position": { @@ -11681,36 +12126,22 @@ } }, "unist-util-visit": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.2.tgz", - "integrity": "sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", "requires": { "@types/unist": "^2.0.0", "unist-util-is": "^4.0.0", "unist-util-visit-parents": "^3.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==" - } } }, "unist-util-visit-parents": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.0.2.tgz", - "integrity": "sha512-yJEfuZtzFpQmg1OSCyS9M5NJRrln/9FbYosH3iW0MG402QbdbaB8ZESwUv9RO6nRfLAKvWcMxCwdLWOov36x/g==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.0.tgz", + "integrity": "sha512-0g4wbluTF93npyPrp/ymd3tCDTMnP0yo2akFD2FIBAYXq/Sga3lwaU1D8OYKbtpioaI6CkDcQ6fsMnmtzt7htw==", "requires": { "@types/unist": "^2.0.0", "unist-util-is": "^4.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==" - } } }, "universalify": { @@ -11769,6 +12200,26 @@ "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" }, + "update-notifier": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.0.tgz", + "integrity": "sha512-w3doE1qtI0/ZmgeoDoARmI5fjDoT93IfKgEGqm26dGUOh8oNpaSTsGNdYRN/SjOuo10jcJGwkEL3mroKzktkew==", + "requires": { + "boxen": "^4.2.0", + "chalk": "^3.0.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.3.1", + "is-npm": "^4.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.0.0", + "pupa": "^2.0.1", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + } + }, "uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", @@ -11798,6 +12249,16 @@ "querystring": "0.2.0" } }, + "url-loader": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.0.tgz", + "integrity": "sha512-IzgAAIC8wRrg6NYkFIJY09vtktQcsvU8V6HhtQj9PTefbYImzLB1hufqo4m+RyM5N3mLx5BqJKccgxJS+W3kqw==", + "requires": { + "loader-utils": "^2.0.0", + "mime-types": "^2.1.26", + "schema-utils": "^2.6.5" + } + }, "url-parse": { "version": "1.4.7", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", @@ -11807,6 +12268,21 @@ "requires-port": "^1.0.0" } }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "requires": { + "prepend-http": "^2.0.0" + }, + "dependencies": { + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" + } + } + }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", @@ -11873,20 +12349,10 @@ "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==" }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, "vfile": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.1.1.tgz", - "integrity": "sha512-lRjkpyDGjVlBA7cDQhQ+gNcvB1BGaTHYuSOcY3S7OhDmBtnzX95FhtZZDecSTDm6aajFymyve6S5DN4ZHGezdQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.0.tgz", + "integrity": "sha512-a/alcwCvtuc8OX92rqqo7PflxiCgXRFjdyoGVuYV+qbgCb0GgZJRvIgCD4+U/Kl1yhaRsaTwksF88xbPyGsgpw==", "requires": { "@types/unist": "^2.0.0", "is-buffer": "^2.0.0", @@ -11929,14 +12395,45 @@ "@hapi/joi": "^15.1.0", "fs-extra": "^8.1.0", "rx": "^4.1.0" + }, + "dependencies": { + "@hapi/address": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", + "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==" + }, + "@hapi/hoek": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz", + "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==" + }, + "@hapi/joi": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz", + "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", + "requires": { + "@hapi/address": "2.x.x", + "@hapi/bourne": "1.x.x", + "@hapi/hoek": "8.x.x", + "@hapi/topo": "3.x.x" + } + }, + "@hapi/topo": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz", + "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", + "requires": { + "@hapi/hoek": "^8.3.0" + } + } } }, "watchpack": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.2.tgz", - "integrity": "sha512-ymVbbQP40MFTp+cNMvpyBpBtygHnPzPkHqoIwRRj/0B8KhqQwV8LaKjtbaxF2lK4vl8zN9wCxS46IFCU5K4W0g==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.4.tgz", + "integrity": "sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg==", "requires": { - "chokidar": "^3.4.0", + "chokidar": "^3.4.1", "graceful-fs": "^4.1.2", "neo-async": "^2.5.0", "watchpack-chokidar2": "^2.0.0" @@ -12204,9 +12701,9 @@ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" }, "webpack": { - "version": "4.43.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.43.0.tgz", - "integrity": "sha512-GW1LjnPipFW2Y78OOab8NJlCflB7EFskMih2AHdvjbpKMeDJqEgSx24cXXXiPS65+WSwVyxtDsJH6jGX2czy+g==", + "version": "4.44.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.1.tgz", + "integrity": "sha512-4UOGAohv/VGUNQJstzEywwNxqX417FnjZgZJpJQegddzPmTvph37eBIRbRTfdySXzVtJXLJfbMN3mMYhM6GdmQ==", "requires": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-module-context": "1.9.0", @@ -12216,7 +12713,7 @@ "ajv": "^6.10.2", "ajv-keywords": "^3.4.1", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.1.0", + "enhanced-resolve": "^4.3.0", "eslint-scope": "^4.0.3", "json-parse-better-errors": "^1.0.2", "loader-runner": "^2.4.0", @@ -12229,7 +12726,7 @@ "schema-utils": "^1.0.0", "tapable": "^1.1.3", "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.6.1", + "watchpack": "^1.7.4", "webpack-sources": "^1.4.1" }, "dependencies": { @@ -12371,21 +12868,29 @@ "ajv-keywords": "^3.1.0" } }, + "serialize-javascript": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.1.0.tgz", + "integrity": "sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg==", + "requires": { + "randombytes": "^2.1.0" + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "terser-webpack-plugin": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz", - "integrity": "sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA==", + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.4.tgz", + "integrity": "sha512-U4mACBHIegmfoEe5fdongHESNJWqsGU+W0S/9+BmYGVQDw1+c2Ow05TpMhxjPK1sRb7cuYq1BPl1e5YHJMTCqA==", "requires": { "cacache": "^12.0.2", "find-cache-dir": "^2.1.0", "is-wsl": "^1.1.0", "schema-utils": "^1.0.0", - "serialize-javascript": "^2.1.2", + "serialize-javascript": "^3.1.0", "source-map": "^0.6.1", "terser": "^4.1.2", "webpack-sources": "^1.4.0", @@ -12424,9 +12929,9 @@ }, "dependencies": { "acorn": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.2.0.tgz", - "integrity": "sha512-apwXVmYVpQ34m/i71vrApRrRKCWQnZZF1+npOD0WV5xZFfwWOmKGQ2RWlfdy9vWITsenisM8M0Qeq8agcFHNiQ==" + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz", + "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==" }, "chalk": { "version": "2.4.2", @@ -12463,9 +12968,9 @@ }, "dependencies": { "mime": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.5.tgz", - "integrity": "sha512-3hQhEUF027BuxZjQA3s7rIv/7VCQPa27hN9u9g87sEkWaKwQPuXOkVKtOeiyUrnWqTDiOs8Ed2rwg733mB0R5w==" + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", + "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==" } } }, @@ -12509,6 +13014,11 @@ "yargs": "^13.3.2" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, "anymatch": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", @@ -12775,6 +13285,14 @@ "safe-buffer": "~5.1.0" } }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, "supports-color": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", @@ -12910,9 +13428,9 @@ } }, "websocket-extensions": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", - "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==" + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==" }, "whatwg-url": { "version": "7.1.0", @@ -12937,6 +13455,14 @@ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" }, + "widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "requires": { + "string-width": "^4.0.0" + } + }, "worker-farm": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", @@ -12963,21 +13489,6 @@ "strip-ansi": "^5.0.0" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -12987,14 +13498,6 @@ "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } } } }, @@ -13003,6 +13506,17 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, "ws": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", @@ -13011,6 +13525,11 @@ "async-limiter": "~1.0.0" } }, + "xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" + }, "xml-js": { "version": "1.6.11", "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", @@ -13061,59 +13580,6 @@ "yargs-parser": "^13.1.2" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -13123,14 +13589,6 @@ "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } } } }, @@ -13150,11 +13608,6 @@ } } }, - "zepto": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/zepto/-/zepto-1.2.0.tgz", - "integrity": "sha1-4Se9nmb9hGvl6rSME5SIL3wOT5g=" - }, "zwitch": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", diff --git a/docs/package.json b/docs/package.json index cbafa4a..8ee3338 100644 --- a/docs/package.json +++ b/docs/package.json @@ -9,8 +9,8 @@ "deploy": "docusaurus deploy" }, "dependencies": { - "@docusaurus/core": "^2.0.0-alpha.55", - "@docusaurus/preset-classic": "^2.0.0-alpha.55", + "@docusaurus/core": "^2.0.0-alpha.61", + "@docusaurus/preset-classic": "^2.0.0-alpha.61", "classnames": "^2.2.6", "react": "^16.8.4", "react-dom": "^16.8.4" -- cgit v1.2.3 From e1ea833bb3bff9401a5f205654f7149288897aa8 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Wed, 5 Aug 2020 14:04:08 -0400 Subject: Flesh out documentation skeleton. --- docs/docs/behavior/key-press.md | 5 +++++ docs/docs/displays.md | 7 +++++++ docs/docs/encoders.md | 7 +++++++ docs/docs/keymaps.md | 7 +++++++ docs/docs/underglow.md | 6 ++++++ docs/sidebars.js | 2 ++ 6 files changed, 34 insertions(+) create mode 100644 docs/docs/behavior/key-press.md create mode 100644 docs/docs/displays.md create mode 100644 docs/docs/encoders.md create mode 100644 docs/docs/keymaps.md create mode 100644 docs/docs/underglow.md diff --git a/docs/docs/behavior/key-press.md b/docs/docs/behavior/key-press.md new file mode 100644 index 0000000..8a69c4f --- /dev/null +++ b/docs/docs/behavior/key-press.md @@ -0,0 +1,5 @@ +--- +title: Key Presses +--- + +TODO: Docs on key press behavior diff --git a/docs/docs/displays.md b/docs/docs/displays.md new file mode 100644 index 0000000..2339fe2 --- /dev/null +++ b/docs/docs/displays.md @@ -0,0 +1,7 @@ +--- +id: displays +title: OLED Displays +sidebar_label: OLED Displays +--- + +TODO: Documentation on OLED displays. diff --git a/docs/docs/encoders.md b/docs/docs/encoders.md new file mode 100644 index 0000000..c0ea4b6 --- /dev/null +++ b/docs/docs/encoders.md @@ -0,0 +1,7 @@ +--- +id: encoders +title: Encoders +sidebar_label: Encoders +--- + +TODO: Documentation on encoders. diff --git a/docs/docs/keymaps.md b/docs/docs/keymaps.md new file mode 100644 index 0000000..d54b130 --- /dev/null +++ b/docs/docs/keymaps.md @@ -0,0 +1,7 @@ +--- +id: keymaps +title: Keymaps & Behaviors +sidebar_label: Keymaps +--- + +Keymaps! diff --git a/docs/docs/underglow.md b/docs/docs/underglow.md new file mode 100644 index 0000000..ff1a236 --- /dev/null +++ b/docs/docs/underglow.md @@ -0,0 +1,6 @@ +--- +id: underglow +title: RGB Underglow +--- + +TODO: Documentation on RGB underglow. diff --git a/docs/sidebars.js b/docs/sidebars.js index f6369a5..b270a68 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -1,6 +1,8 @@ module.exports = { someSidebar: { "Getting Started": ["intro", "hardware", "user-setup", "faq"], + Features: ["keymaps", "displays", "encoders", "underglow"], + Behaviors: ["behavior/key-press"], Development: [ "dev-clean-room", "dev-setup", -- cgit v1.2.3 From aa21bdd79a95955632f7c88524e5aa244e2e537d Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Wed, 5 Aug 2020 14:43:59 -0400 Subject: Tweak for dynamic invite URL for deploys. --- docs/docusaurus.config.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index a24f395..2704b65 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -54,7 +54,9 @@ module.exports = { // }, { label: "Discord", - href: "https://zmkfirmware.dev/community/discord/invite", + href: + (process.env.DEPLOY_URL || "https://zmkfirmware.dev") + + "/community/discord/invite", }, { label: "Twitter", -- cgit v1.2.3 From f71f12f5a8d6a9c0c174f063c41193cd816df892 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Wed, 5 Aug 2020 14:51:31 -0400 Subject: Build fixes. --- docs/docs/hardware.md | 2 +- docs/docs/user-setup.md | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/docs/hardware.md b/docs/docs/hardware.md index cab1725..015b21d 100644 --- a/docs/docs/hardware.md +++ b/docs/docs/hardware.md @@ -32,7 +32,7 @@ In addition to the basic keyboard functionality, there is some initial support f - OLEDs - RGB Underglow -Until detailed documentation is available, feel free to ask questions about how these are supported in the [Discord server](/community/discord/invite). +Until detailed documentation is available, feel free to ask questions about how these are supported in the [Discord server](https://zmkfirmware.dev/community/discord/invite). ## Contributing diff --git a/docs/docs/user-setup.md b/docs/docs/user-setup.md index de2f57d..e90bef8 100644 --- a/docs/docs/user-setup.md +++ b/docs/docs/user-setup.md @@ -61,20 +61,20 @@ values={[ {label: 'Using curl', value: 'curl'}, {label: 'Using wget', value: 'wget'}, ]}> - + ``` sh -c "$(curl -fsSL https://zmkfirmware.dev/setup.sh)" ``` - - + + ``` sh -c "$(wget https://zmkfirmware.dev/setup.sh -O -)" ``` - + ### MCU Board Selection -- cgit v1.2.3 From 6fd572d3b6bdf022dd3edbb266e8afd3ada0ea16 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Wed, 5 Aug 2020 14:58:25 -0400 Subject: Use `process.env.URL` instead of `DEPLOY_URL`. --- docs/docusaurus.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index 2704b65..2fdb36d 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -55,7 +55,7 @@ module.exports = { { label: "Discord", href: - (process.env.DEPLOY_URL || "https://zmkfirmware.dev") + + (process.env.URL || "https://zmkfirmware.dev") + "/community/discord/invite", }, { -- cgit v1.2.3 From ac802bedb11a14b76c2cb4b75bbbb193323ceaaa Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Wed, 5 Aug 2020 22:58:14 -0400 Subject: Bump delay in scanning while held to 5ms. --- app/drivers/zephyr/kscan_gpio_matrix.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/drivers/zephyr/kscan_gpio_matrix.c b/app/drivers/zephyr/kscan_gpio_matrix.c index 8e27712..baaca30 100644 --- a/app/drivers/zephyr/kscan_gpio_matrix.c +++ b/app/drivers/zephyr/kscan_gpio_matrix.c @@ -171,7 +171,7 @@ static int kscan_gpio_config_interrupts(struct device **devices, ({ k_work_submit(&data->work); }), \ ({ \ k_delayed_work_cancel(&data->work); \ - k_delayed_work_submit(&data->work, K_MSEC(1)); })) \ + k_delayed_work_submit(&data->work, K_MSEC(5)); })) \ } \ return 0; \ } \ -- cgit v1.2.3 From 9233ab60cda263b5286ffc9edef8c8cd40cc5c0e Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Wed, 5 Aug 2020 22:59:58 -0400 Subject: Minor fix for USB logging to work on peripherals. --- docs/docs/dev-guide-usb-logging.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/docs/dev-guide-usb-logging.md b/docs/docs/dev-guide-usb-logging.md index 907c32e..3bc8a0c 100644 --- a/docs/docs/dev-guide-usb-logging.md +++ b/docs/docs/dev-guide-usb-logging.md @@ -20,6 +20,8 @@ CONFIG_LOG=y CONFIG_ZMK_LOG_LEVEL_DBG=y # Turn on USB CDC ACM device +CONFIG_USB=y +CONFIG_USB_DEVICE_STACK=y CONFIG_USB_CDC_ACM=y CONFIG_USB_CDC_ACM_RINGBUF_SIZE=1024 CONFIG_USB_CDC_ACM_DEVICE_NAME="CDC_ACM" -- cgit v1.2.3 From 370cfcc59fdf2900feba653d4ce5b55a90050426 Mon Sep 17 00:00:00 2001 From: Nick Date: Wed, 5 Aug 2020 22:38:40 -0500 Subject: Add if block and param req callback comment --- app/src/ble.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/ble.c b/app/src/ble.c index 6526357..7d986d7 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -76,17 +76,21 @@ static void security_changed(struct bt_conn *conn, bt_security_t level, } } +#if !IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL) static bool le_param_req(struct bt_conn *conn, struct bt_le_conn_param *param) { static struct bt_conn_info info; bt_conn_get_info(conn, &info); + /* This captures a param change from central half of a split board connection + to stop default params from getting set over the top of our preferred ones */ if (info.role == BT_CONN_ROLE_MASTER && (param->interval_min != 6 || param->latency != 30)) { return false; } return true; } +#endif static struct bt_conn_cb conn_callbacks = { .connected = connected, -- cgit v1.2.3 From f83ec5ce2b04380158299c20c603c1fbb49b12d6 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Thu, 6 Aug 2020 10:32:06 -0400 Subject: Refactor to using .keymap files * Still just devicetree keymaps. * Filename can now use `.keymap` or `.keymap` convention, including overrides for revisions, etc. --- app/CMakeLists.txt | 4 -- app/boards/arm/planck/keymap/keymap.overlay | 34 ----------- app/boards/arm/planck/planck_rev6.keymap | 34 +++++++++++ .../clueboard_california.keymap | 31 ++++++++++ .../clueboard_california/keymap/keymap.overlay | 31 ---------- app/boards/shields/kyria/keymap/keymap.overlay | 36 ----------- app/boards/shields/kyria/kyria.keymap | 36 +++++++++++ app/boards/shields/lily58/keymap/keymap.overlay | 70 ---------------------- app/boards/shields/lily58/lily58.keymap | 70 ++++++++++++++++++++++ .../petejohanson_handwire/Kconfig.defconfig | 13 ---- .../shields/petejohanson_handwire/Kconfig.shield | 5 -- .../petejohanson_handwire/keymap/keymap.overlay | 40 ------------- .../petejohanson_handwire.conf | 1 - .../petejohanson_handwire.overlay | 44 -------------- .../Kconfig.defconfig | 13 ---- .../petejohanson_pro_micro_handwire/Kconfig.shield | 5 -- .../keymap/keymap.overlay | 41 ------------- .../petejohanson_pro_micro_handwire.conf | 0 .../petejohanson_pro_micro_handwire.overlay | 17 ------ app/cmake/zmk_config.cmake | 54 ++++++++--------- 20 files changed, 196 insertions(+), 383 deletions(-) delete mode 100644 app/boards/arm/planck/keymap/keymap.overlay create mode 100644 app/boards/arm/planck/planck_rev6.keymap create mode 100644 app/boards/shields/clueboard_california/clueboard_california.keymap delete mode 100644 app/boards/shields/clueboard_california/keymap/keymap.overlay delete mode 100644 app/boards/shields/kyria/keymap/keymap.overlay create mode 100644 app/boards/shields/kyria/kyria.keymap delete mode 100644 app/boards/shields/lily58/keymap/keymap.overlay create mode 100644 app/boards/shields/lily58/lily58.keymap delete mode 100644 app/boards/shields/petejohanson_handwire/Kconfig.defconfig delete mode 100644 app/boards/shields/petejohanson_handwire/Kconfig.shield delete mode 100644 app/boards/shields/petejohanson_handwire/keymap/keymap.overlay delete mode 100644 app/boards/shields/petejohanson_handwire/petejohanson_handwire.conf delete mode 100644 app/boards/shields/petejohanson_handwire/petejohanson_handwire.overlay delete mode 100644 app/boards/shields/petejohanson_pro_micro_handwire/Kconfig.defconfig delete mode 100644 app/boards/shields/petejohanson_pro_micro_handwire/Kconfig.shield delete mode 100644 app/boards/shields/petejohanson_pro_micro_handwire/keymap/keymap.overlay delete mode 100644 app/boards/shields/petejohanson_pro_micro_handwire/petejohanson_pro_micro_handwire.conf delete mode 100644 app/boards/shields/petejohanson_pro_micro_handwire/petejohanson_pro_micro_handwire.overlay diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index b05d16b..d0d343b 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -18,10 +18,6 @@ include(cmake/zmk_config.cmake) find_package(Zephyr REQUIRED HINTS ../zephyr) project(zmk) -if(EXISTS ${KEYMAP_DIR}/keymap.c) - target_sources(app PRIVATE ${KEYMAP_DIR}/keymap.c) -endif() - zephyr_linker_sources(RODATA include/linker/zmk-events.ld) # Add your source file to the "app" target. This must come after diff --git a/app/boards/arm/planck/keymap/keymap.overlay b/app/boards/arm/planck/keymap/keymap.overlay deleted file mode 100644 index f474ec9..0000000 --- a/app/boards/arm/planck/keymap/keymap.overlay +++ /dev/null @@ -1,34 +0,0 @@ -#include -#include -#include - -/ { - chosen { - zmk,keymap = &keymap0; - }; - - keymap0: keymap { - compatible = "zmk,keymap"; - label ="Default Planck Keymap"; - layers = <&default>; - }; - - layers { - compatible = "zmk,layers"; - - default: layer_0 { - label = "DEFAULT"; -// ----------------------------------------------------------------------------------------- -// | TAB | Q | W | E | R | T | Y | U | I | O | P | BSPC | -// | ESC | A | S | D | F | G | H | J | K | L | ; | ' | -// | SHIFT | Z | X | C | V | B | N | M | , | . | / | RET | -// | FN | LGUI | LALT | LCTL | LOWR | SPACE | RAIS | LARW | DARW | UARW | RARW | - bindings = < - &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp DEL - &kp ESC &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SCLN &kp QUOT - &kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp CMMA &kp DOT &kp BSLH &kp RET - &trans &kp LGUI &kp LALT &kp LCTL &trans &trans &kp SPC &trans &kp LARW &kp DARW &kp UARW &kp RARW - >; - }; - }; -}; diff --git a/app/boards/arm/planck/planck_rev6.keymap b/app/boards/arm/planck/planck_rev6.keymap new file mode 100644 index 0000000..f474ec9 --- /dev/null +++ b/app/boards/arm/planck/planck_rev6.keymap @@ -0,0 +1,34 @@ +#include +#include +#include + +/ { + chosen { + zmk,keymap = &keymap0; + }; + + keymap0: keymap { + compatible = "zmk,keymap"; + label ="Default Planck Keymap"; + layers = <&default>; + }; + + layers { + compatible = "zmk,layers"; + + default: layer_0 { + label = "DEFAULT"; +// ----------------------------------------------------------------------------------------- +// | TAB | Q | W | E | R | T | Y | U | I | O | P | BSPC | +// | ESC | A | S | D | F | G | H | J | K | L | ; | ' | +// | SHIFT | Z | X | C | V | B | N | M | , | . | / | RET | +// | FN | LGUI | LALT | LCTL | LOWR | SPACE | RAIS | LARW | DARW | UARW | RARW | + bindings = < + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp DEL + &kp ESC &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SCLN &kp QUOT + &kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp CMMA &kp DOT &kp BSLH &kp RET + &trans &kp LGUI &kp LALT &kp LCTL &trans &trans &kp SPC &trans &kp LARW &kp DARW &kp UARW &kp RARW + >; + }; + }; +}; diff --git a/app/boards/shields/clueboard_california/clueboard_california.keymap b/app/boards/shields/clueboard_california/clueboard_california.keymap new file mode 100644 index 0000000..c2fa7f8 --- /dev/null +++ b/app/boards/shields/clueboard_california/clueboard_california.keymap @@ -0,0 +1,31 @@ +#include +#include +#include + +/ { + chosen { + zmk,keymap = &keymap0; + }; + + keymap0: keymap { + compatible = "zmk,keymap"; + label ="Default Kyria Keymap"; + layers = <&default>; + }; + + layers { + compatible = "zmk,layers"; + + default: layer_0 { + label = "DEFAULT"; + bindings = < + &kp NUM_9 &kp NUM_8 + &kp NUM_7 &kp NUM_6 + &kp NUM_5 + &kp NUM_4 &kp NUM_3 + &kp NUM_2 &kp NUM_1 + &kp NUM_0 + >; + }; + }; +}; diff --git a/app/boards/shields/clueboard_california/keymap/keymap.overlay b/app/boards/shields/clueboard_california/keymap/keymap.overlay deleted file mode 100644 index c2fa7f8..0000000 --- a/app/boards/shields/clueboard_california/keymap/keymap.overlay +++ /dev/null @@ -1,31 +0,0 @@ -#include -#include -#include - -/ { - chosen { - zmk,keymap = &keymap0; - }; - - keymap0: keymap { - compatible = "zmk,keymap"; - label ="Default Kyria Keymap"; - layers = <&default>; - }; - - layers { - compatible = "zmk,layers"; - - default: layer_0 { - label = "DEFAULT"; - bindings = < - &kp NUM_9 &kp NUM_8 - &kp NUM_7 &kp NUM_6 - &kp NUM_5 - &kp NUM_4 &kp NUM_3 - &kp NUM_2 &kp NUM_1 - &kp NUM_0 - >; - }; - }; -}; diff --git a/app/boards/shields/kyria/keymap/keymap.overlay b/app/boards/shields/kyria/keymap/keymap.overlay deleted file mode 100644 index 53101ff..0000000 --- a/app/boards/shields/kyria/keymap/keymap.overlay +++ /dev/null @@ -1,36 +0,0 @@ -#include -#include -#include - -/ { - chosen { - zmk,keymap = &keymap0; - }; - - keymap0: keymap { - compatible = "zmk,keymap"; - label ="Default Kyria Keymap"; - layers = <&default>; - }; - - layers { - compatible = "zmk,layers"; - - default: layer_0 { - label = "DEFAULT"; -// --------------------------------------------------------------------------------------------------------------------------------- -// | ESC | Q | W | E | R | T | | Y | U | I | O | P | \ | -// | TAB | A | S | D | F | G | | H | J | K | L | ; | ' | -// | SHIFT | Z | X | C | V | B | L SHIFT | L SHIFT | | L SHIFT | L SHIFT | N | M | , | . | / | CTRL | -// | GUI | DEL | RET | SPACE | ESC | | RET | SPACE | TAB | BSPC | R-ALT | - bindings = < - &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH - &kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SCLN &kp QUOT - &kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp LSFT &kp LSFT &kp LSFT &kp LSFT &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RCTL - &kp LGUI &kp DEL &kp RET &kp SPC &kp ESC &kp RET &kp SPC &kp TAB &kp BKSP &kp RALT - >; - - sensor-bindings = <&inc_dec_cp M_VOLU M_VOLD &inc_dec_kp PGUP PGDN>; - }; - }; -}; diff --git a/app/boards/shields/kyria/kyria.keymap b/app/boards/shields/kyria/kyria.keymap new file mode 100644 index 0000000..53101ff --- /dev/null +++ b/app/boards/shields/kyria/kyria.keymap @@ -0,0 +1,36 @@ +#include +#include +#include + +/ { + chosen { + zmk,keymap = &keymap0; + }; + + keymap0: keymap { + compatible = "zmk,keymap"; + label ="Default Kyria Keymap"; + layers = <&default>; + }; + + layers { + compatible = "zmk,layers"; + + default: layer_0 { + label = "DEFAULT"; +// --------------------------------------------------------------------------------------------------------------------------------- +// | ESC | Q | W | E | R | T | | Y | U | I | O | P | \ | +// | TAB | A | S | D | F | G | | H | J | K | L | ; | ' | +// | SHIFT | Z | X | C | V | B | L SHIFT | L SHIFT | | L SHIFT | L SHIFT | N | M | , | . | / | CTRL | +// | GUI | DEL | RET | SPACE | ESC | | RET | SPACE | TAB | BSPC | R-ALT | + bindings = < + &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH + &kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SCLN &kp QUOT + &kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp LSFT &kp LSFT &kp LSFT &kp LSFT &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RCTL + &kp LGUI &kp DEL &kp RET &kp SPC &kp ESC &kp RET &kp SPC &kp TAB &kp BKSP &kp RALT + >; + + sensor-bindings = <&inc_dec_cp M_VOLU M_VOLD &inc_dec_kp PGUP PGDN>; + }; + }; +}; diff --git a/app/boards/shields/lily58/keymap/keymap.overlay b/app/boards/shields/lily58/keymap/keymap.overlay deleted file mode 100644 index a198770..0000000 --- a/app/boards/shields/lily58/keymap/keymap.overlay +++ /dev/null @@ -1,70 +0,0 @@ -#include -#include -#include - -/ { - chosen { - zmk,keymap = &keymap0; - }; - - keymap0: keymap { - compatible = "zmk,keymap"; - label ="Default Lily58 Keymap"; - layers = <&default &lower &raise>; - }; - - layers { - compatible = "zmk,layers"; - - default: layer_0 { - label = "DEFAULT"; -// ------------------------------------------------------------------------------------------------------------ -// | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` | -// | TAB | Q | W | E | R | T | | Y | U | I | O | P | - | -// | CTRL | A | S | D | F | G | | H | J | K | L | ; | ' | -// | SHIFT | Z | X | C | V | B | "[" | | "]" | N | M | , | . | / | SHIFT | -// | ALT | GUI | LOWER| SPACE | | ENTER | RAISE| BSPC | GUI | - bindings = < -&kp ESC &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 &kp GRAV -&kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp MINUS -&kp LCTL &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SCLN &kp QUOT -&kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp LBKT &kp RBKT &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RSFT - &kp LALT &kp LGUI &mo 1 &kp SPC &kp RET &mo 2 &kp BKSP &kp RGUI - >; - }; - - lower: layer_1 { - label = "LOWER"; -// ------------------------------------------------------------------------------------------------------------ -// | | | | | | | | | | | | | | -// | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | -// | ` | ! | @ | # | $ | % | | ^ | & | * | ( | ) | ~ | -// | | | | | | | | | | | _ | + | { | } | "|" | -// | | | | | | | | | | - bindings = < -&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans -&kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 -&kp GRAV &kp BANG &kp ATSN &kp HASH &kp CURU &kp PRCT &kp CRRT &kp AMPS &kp KMLT &kp LPRN &kp RPRN &kp TILD -&trans &trans &trans &trans &trans &trans &trans &trans &trans &kp MINUS &kp KPLS &kp LCUR &kp RCUR &kp PIPE - &trans &trans &trans &trans &trans &trans &trans &trans - >; - }; - - raise: layer_3 { - label = "RAISE"; -// ------------------------------------------------------------------------------------------------------------ -// | | | | | | | | | | | | | | -// | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | | -// | F1 | F2 | F3 | F4 | F5 | F6 | | | <- | ^ | v | -> | | -// | F7 | F8 | F9 | F10 | F11 | F12 | | | | + | - | = | [ | ] | \ | -// | | | | | | | | | | - bindings = < -&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans -&kp GRAV &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 &trans -&kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &trans &kp LARW &kp DARW &kp UARW &kp RARW &trans -&kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &trans &trans &kp KPLS &kp MINUS &kp EQL &kp LBKT &kp RBKT &kp BSLH - &trans &trans &trans &trans &trans &trans &trans &trans - >; - }; - }; -}; diff --git a/app/boards/shields/lily58/lily58.keymap b/app/boards/shields/lily58/lily58.keymap new file mode 100644 index 0000000..a198770 --- /dev/null +++ b/app/boards/shields/lily58/lily58.keymap @@ -0,0 +1,70 @@ +#include +#include +#include + +/ { + chosen { + zmk,keymap = &keymap0; + }; + + keymap0: keymap { + compatible = "zmk,keymap"; + label ="Default Lily58 Keymap"; + layers = <&default &lower &raise>; + }; + + layers { + compatible = "zmk,layers"; + + default: layer_0 { + label = "DEFAULT"; +// ------------------------------------------------------------------------------------------------------------ +// | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` | +// | TAB | Q | W | E | R | T | | Y | U | I | O | P | - | +// | CTRL | A | S | D | F | G | | H | J | K | L | ; | ' | +// | SHIFT | Z | X | C | V | B | "[" | | "]" | N | M | , | . | / | SHIFT | +// | ALT | GUI | LOWER| SPACE | | ENTER | RAISE| BSPC | GUI | + bindings = < +&kp ESC &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 &kp GRAV +&kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp MINUS +&kp LCTL &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SCLN &kp QUOT +&kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp LBKT &kp RBKT &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RSFT + &kp LALT &kp LGUI &mo 1 &kp SPC &kp RET &mo 2 &kp BKSP &kp RGUI + >; + }; + + lower: layer_1 { + label = "LOWER"; +// ------------------------------------------------------------------------------------------------------------ +// | | | | | | | | | | | | | | +// | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | +// | ` | ! | @ | # | $ | % | | ^ | & | * | ( | ) | ~ | +// | | | | | | | | | | | _ | + | { | } | "|" | +// | | | | | | | | | | + bindings = < +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans +&kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 +&kp GRAV &kp BANG &kp ATSN &kp HASH &kp CURU &kp PRCT &kp CRRT &kp AMPS &kp KMLT &kp LPRN &kp RPRN &kp TILD +&trans &trans &trans &trans &trans &trans &trans &trans &trans &kp MINUS &kp KPLS &kp LCUR &kp RCUR &kp PIPE + &trans &trans &trans &trans &trans &trans &trans &trans + >; + }; + + raise: layer_3 { + label = "RAISE"; +// ------------------------------------------------------------------------------------------------------------ +// | | | | | | | | | | | | | | +// | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | | +// | F1 | F2 | F3 | F4 | F5 | F6 | | | <- | ^ | v | -> | | +// | F7 | F8 | F9 | F10 | F11 | F12 | | | | + | - | = | [ | ] | \ | +// | | | | | | | | | | + bindings = < +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans +&kp GRAV &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 &trans +&kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &trans &kp LARW &kp DARW &kp UARW &kp RARW &trans +&kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &trans &trans &kp KPLS &kp MINUS &kp EQL &kp LBKT &kp RBKT &kp BSLH + &trans &trans &trans &trans &trans &trans &trans &trans + >; + }; + }; +}; diff --git a/app/boards/shields/petejohanson_handwire/Kconfig.defconfig b/app/boards/shields/petejohanson_handwire/Kconfig.defconfig deleted file mode 100644 index 7da09ac..0000000 --- a/app/boards/shields/petejohanson_handwire/Kconfig.defconfig +++ /dev/null @@ -1,13 +0,0 @@ - -if SHIELD_PETEJOHANSON_HANDWIRE - -config ZMK_KEYBOARD_NAME - default "Pete's Handwire Breadboard" - -config ZMK_BLE - default y - -config ZMK_ACTION_MOD_TAP - default y - -endif diff --git a/app/boards/shields/petejohanson_handwire/Kconfig.shield b/app/boards/shields/petejohanson_handwire/Kconfig.shield deleted file mode 100644 index defb90a..0000000 --- a/app/boards/shields/petejohanson_handwire/Kconfig.shield +++ /dev/null @@ -1,5 +0,0 @@ -# Copyright (c) 2019 Linaro Limited -# SPDX-License-Identifier: MIT - -config SHIELD_PETEJOHANSON_HANDWIRE - def_bool $(shields_list_contains,petejohanson_handwire) diff --git a/app/boards/shields/petejohanson_handwire/keymap/keymap.overlay b/app/boards/shields/petejohanson_handwire/keymap/keymap.overlay deleted file mode 100644 index b294171..0000000 --- a/app/boards/shields/petejohanson_handwire/keymap/keymap.overlay +++ /dev/null @@ -1,40 +0,0 @@ -#include -#include - -/ { - chosen { - zmk,keymap = &keymap0; - }; - - keymap0: keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; - layers = <&default &lower &raise>; - }; - - layers { - compatible = "zmk,layers"; - - default: layer_0 { - label = "DEFAULT"; - bindings = < - &cp M_NEXT &mt MOD_LSFT B &trans &trans - &mo 1 &mo 2 &trans &trans>; - }; - - lower: layer_1 { - label = "LOWER"; - - bindings = < - &cp M_PLAY &cp M_NEXT &trans &trans - &trans &trans &trans &trans>; - }; - - raise: layer_2 { - label = "RAISE"; - bindings = < - &kp C &kp D &trans &trans - &trans &kp E &trans &trans>; - }; - }; -}; diff --git a/app/boards/shields/petejohanson_handwire/petejohanson_handwire.conf b/app/boards/shields/petejohanson_handwire/petejohanson_handwire.conf deleted file mode 100644 index 63829ba..0000000 --- a/app/boards/shields/petejohanson_handwire/petejohanson_handwire.conf +++ /dev/null @@ -1 +0,0 @@ -CONFIG_ZMK_KSCAN_COMPOSITE_DRIVER=y diff --git a/app/boards/shields/petejohanson_handwire/petejohanson_handwire.overlay b/app/boards/shields/petejohanson_handwire/petejohanson_handwire.overlay deleted file mode 100644 index 95b0835..0000000 --- a/app/boards/shields/petejohanson_handwire/petejohanson_handwire.overlay +++ /dev/null @@ -1,44 +0,0 @@ - -/ { - chosen { - zmk,kscan = &kscan0; - }; - - kscan0: kscan_0 { - compatible = "zmk,kscan-composite"; - label = "KSCAN_COMP"; - rows = <2>; - columns = <4>; - - left { - kscan = <&left_hand>; - }; - - right { - kscan = <&right_hand>; - column-offset = <2>; - }; - }; - - left_hand: kscan_1 { - compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN_LEFT"; - - diode-direction = "row2col"; - row-gpios = <&arduino_header 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, - <&arduino_header 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; - col-gpios = <&arduino_header 10 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, - <&arduino_header 11 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; - }; - - right_hand: kscan_2 { - compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN_RIGHT"; - - diode-direction = "row2col"; - row-gpios = <&arduino_header 12 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, - <&arduino_header 13 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; - col-gpios = <&arduino_header 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, - <&arduino_header 15 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; - }; -}; diff --git a/app/boards/shields/petejohanson_pro_micro_handwire/Kconfig.defconfig b/app/boards/shields/petejohanson_pro_micro_handwire/Kconfig.defconfig deleted file mode 100644 index 5098fc8..0000000 --- a/app/boards/shields/petejohanson_pro_micro_handwire/Kconfig.defconfig +++ /dev/null @@ -1,13 +0,0 @@ - -if SHIELD_PETEJOHANSON_PRO_MICRO_HANDWIRE - -config ZMK_KEYBOARD_NAME - default "Pete's ProMicro Compat Handwire" - -config ZMK_USB - default y - -config ZMK_ACTION_MOD_TAP - default y - -endif diff --git a/app/boards/shields/petejohanson_pro_micro_handwire/Kconfig.shield b/app/boards/shields/petejohanson_pro_micro_handwire/Kconfig.shield deleted file mode 100644 index b6264db..0000000 --- a/app/boards/shields/petejohanson_pro_micro_handwire/Kconfig.shield +++ /dev/null @@ -1,5 +0,0 @@ -# Copyright (c) 2020 Pete Johanson -# SPDX-License-Identifier: MIT - -config SHIELD_PETEJOHANSON_PRO_MICRO_HANDWIRE - def_bool $(shields_list_contains,petejohanson_pro_micro_handwire) diff --git a/app/boards/shields/petejohanson_pro_micro_handwire/keymap/keymap.overlay b/app/boards/shields/petejohanson_pro_micro_handwire/keymap/keymap.overlay deleted file mode 100644 index ca03557..0000000 --- a/app/boards/shields/petejohanson_pro_micro_handwire/keymap/keymap.overlay +++ /dev/null @@ -1,41 +0,0 @@ -#include -#include - -/ { - chosen { - zmk,keymap = &keymap0; - }; - keymap0: keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; - layers = <&default &lower &raise>; - }; - - layers { - compatible = "zmk,layers"; - - default: layer_0 { - label = "DEFAULT"; - - bindings = < - &mo 1 &kp A - &mo 2 &kp C>; - }; - - lower: layer_1 { - label = "LOWER"; - - bindings = < - &trans &kp D - &trans &kp E>; - }; - - raise: layer_2 { - label = "RAISE"; - - bindings = < - &trans &kp I - &trans &kp H>; - }; - }; -}; diff --git a/app/boards/shields/petejohanson_pro_micro_handwire/petejohanson_pro_micro_handwire.conf b/app/boards/shields/petejohanson_pro_micro_handwire/petejohanson_pro_micro_handwire.conf deleted file mode 100644 index e69de29..0000000 diff --git a/app/boards/shields/petejohanson_pro_micro_handwire/petejohanson_pro_micro_handwire.overlay b/app/boards/shields/petejohanson_pro_micro_handwire/petejohanson_pro_micro_handwire.overlay deleted file mode 100644 index 1b27b93..0000000 --- a/app/boards/shields/petejohanson_pro_micro_handwire/petejohanson_pro_micro_handwire.overlay +++ /dev/null @@ -1,17 +0,0 @@ - -/ { - chosen { - zmk,kscan = &kscan0; - }; - - kscan0: kscan { - compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; - - diode-direction = "row2col"; - row-gpios = <&pro_micro_d 6 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, - <&pro_micro_d 7 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; - col-gpios = <&pro_micro_d 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>, - <&pro_micro_d 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; - }; -}; diff --git a/app/cmake/zmk_config.cmake b/app/cmake/zmk_config.cmake index e4d2632..518c3c3 100644 --- a/app/cmake/zmk_config.cmake +++ b/app/cmake/zmk_config.cmake @@ -62,11 +62,9 @@ foreach(root ${BOARD_ROOT}) NAMES ${BOARD}_defconfig PATHS ${root}/boards/*/* NO_DEFAULT_PATH - ) - if(BOARD_DIR) - if (EXISTS "${BOARD_DIR}/keymap") - list(APPEND KEYMAP_DIRS ${BOARD_DIR}/keymap) - endif() + ) + if(BOARD_DIR) + list(APPEND KEYMAP_DIRS ${BOARD_DIR}) endif() if(DEFINED SHIELD) @@ -77,37 +75,16 @@ foreach(root ${BOARD_ROOT}) ) foreach(shield_path ${shields_refs_list}) get_filename_component(SHIELD_DIR ${shield_path} NAME) - if (EXISTS "${shield_path}/keymap") - list(APPEND KEYMAP_DIRS ${shield_path}/keymap) - endif() + list(APPEND KEYMAP_DIRS ${shield_path}) endforeach() endif() endforeach() -find_path(BASE_KEYMAPS_DIR - NAMES ${KEYMAP}/keymap.overlay - PATHS ${KEYMAP_DIRS} - NO_DEFAULT_PATH -) - -if (BASE_KEYMAPS_DIR) - set(KEYMAP_DIR "${BASE_KEYMAPS_DIR}/${KEYMAP}" CACHE STRING "Selected keymap directory") - message(STATUS "Keyboard Base Keymap: ${KEYMAP_DIR}/") - # Used to let local imports of custom keycodes work as expected - list(APPEND DTS_ROOT ${KEYMAP_DIR}) - if (EXISTS "${KEYMAP_DIR}/include") - include_directories("${KEYMAP_DIR}/include") - endif() - list(APPEND ZMK_DTC_FILES "${KEYMAP_DIR}keymap.overlay") -endif() - if (ZMK_CONFIG) if (EXISTS ${ZMK_CONFIG}) message(STATUS "ZMK Config directory: ${ZMK_CONFIG}") list(APPEND DTS_ROOT ${ZMK_CONFIG}) - if (EXISTS "${ZMK_CONFIG}/include") - include_directories("${ZMK_CONFIG}/include") - endif() + list(PREPEND KEYMAP_DIRS "${ZMK_CONFIG}") if (SHIELD) message(STATUS "Board: ${BOARD}, ${BOARD_DIR}, ${SHIELD}, ${SHIELD_DIR}") @@ -137,7 +114,7 @@ if (ZMK_CONFIG) foreach(conf ${config_candidates}) if (EXISTS "${conf}") - message(STATUS "ZMK Config Kconfig: ${overlay}") + message(STATUS "ZMK Config Kconfig: ${conf}") set(CONF_FILE "${conf}") break() endif() @@ -147,6 +124,25 @@ if (ZMK_CONFIG) endif() endif() + +if(NOT KEYMAP_FILE) + foreach(keymap_dir ${KEYMAP_DIRS}) + foreach(keymap_prefix ${SHIELD} ${SHIELD_DIR} ${BOARD} ${BOARD_DIR}) + if (EXISTS ${keymap_dir}/${keymap_prefix}.keymap) + set(KEYMAP_FILE "${keymap_dir}/${keymap_prefix}.keymap" CACHE STRING "Selected keymap file") + message(STATUS "Using keymap file: ${KEYMAP_FILE}") + break() + endif() + endforeach() + endforeach() +endif() + +if (NOT KEYMAP_FILE) + message(FATAL_ERROR "Failed to locate keymap file!") +endif() + +list(APPEND ZMK_DTC_FILES ${KEYMAP_FILE}) + if (ZMK_DTC_FILES) string(REPLACE ";" " " DTC_OVERLAY_FILE "${ZMK_DTC_FILES}") endif() -- cgit v1.2.3 From eafd2a83e5bf7634624522708703a556e35389c0 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Thu, 6 Aug 2020 14:26:36 -0400 Subject: Remove an unneeded include for the keymap. --- app/boards/shields/kyria/kyria.keymap | 1 - 1 file changed, 1 deletion(-) diff --git a/app/boards/shields/kyria/kyria.keymap b/app/boards/shields/kyria/kyria.keymap index 53101ff..7f12f59 100644 --- a/app/boards/shields/kyria/kyria.keymap +++ b/app/boards/shields/kyria/kyria.keymap @@ -1,6 +1,5 @@ #include #include -#include / { chosen { -- cgit v1.2.3 From 10683fe1f812862c4d25b074fed65ec87d254393 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Thu, 6 Aug 2020 15:04:31 -0400 Subject: Docs re-org, start of some keymap docs. --- docs/docs/displays.md | 7 -- docs/docs/encoders.md | 7 -- docs/docs/feature/displays.md | 6 ++ docs/docs/feature/encoders.md | 6 ++ docs/docs/feature/keymaps.md | 150 +++++++++++++++++++++++++++++++++++++++++ docs/docs/feature/underglow.md | 5 ++ docs/docs/keymaps.md | 7 -- docs/docs/underglow.md | 6 -- docs/docusaurus.config.js | 2 +- docs/sidebars.js | 7 +- 10 files changed, 174 insertions(+), 29 deletions(-) delete mode 100644 docs/docs/displays.md delete mode 100644 docs/docs/encoders.md create mode 100644 docs/docs/feature/displays.md create mode 100644 docs/docs/feature/encoders.md create mode 100644 docs/docs/feature/keymaps.md create mode 100644 docs/docs/feature/underglow.md delete mode 100644 docs/docs/keymaps.md delete mode 100644 docs/docs/underglow.md diff --git a/docs/docs/displays.md b/docs/docs/displays.md deleted file mode 100644 index 2339fe2..0000000 --- a/docs/docs/displays.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -id: displays -title: OLED Displays -sidebar_label: OLED Displays ---- - -TODO: Documentation on OLED displays. diff --git a/docs/docs/encoders.md b/docs/docs/encoders.md deleted file mode 100644 index c0ea4b6..0000000 --- a/docs/docs/encoders.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -id: encoders -title: Encoders -sidebar_label: Encoders ---- - -TODO: Documentation on encoders. diff --git a/docs/docs/feature/displays.md b/docs/docs/feature/displays.md new file mode 100644 index 0000000..2b3d001 --- /dev/null +++ b/docs/docs/feature/displays.md @@ -0,0 +1,6 @@ +--- +title: OLED Displays +sidebar_label: OLED Displays +--- + +TODO: Documentation on OLED displays. diff --git a/docs/docs/feature/encoders.md b/docs/docs/feature/encoders.md new file mode 100644 index 0000000..16537ad --- /dev/null +++ b/docs/docs/feature/encoders.md @@ -0,0 +1,6 @@ +--- +title: Encoders +sidebar_label: Encoders +--- + +TODO: Documentation on encoders. diff --git a/docs/docs/feature/keymaps.md b/docs/docs/feature/keymaps.md new file mode 100644 index 0000000..3eee145 --- /dev/null +++ b/docs/docs/feature/keymaps.md @@ -0,0 +1,150 @@ +--- +id: keymaps +title: Keymaps & Behaviors +sidebar_label: Keymaps +--- + +ZMK uses an declarative approach to keymaps, instead of using C code for all keymap configuration. +Right now, ZMK uses the devicetree syntax to declare those keymaps; future work is envisioned for +supporting dynamic loading of declarative keymaps, e.g. over USB Mass Storage or via a custom BLE +service. + +:::note +For advanced users looking to implement custom behaviors for their keymaps, this will be possible +in the future by allowing user configs to add to the CMake application built by Zephyr. +::: + +## Big Picture + +All keyboard definitions (complete boards or shields) include the _default_ keymap for that keyboard, +so ZMK can produce a "stock" firmware for that keyboard without any further modifications. For users +looking to customize their keyboard's behavior, they can copy the stock `.keymap` file into their +user config directory, and customize the keymap to their liking. + +## Behaviors + +ZMK implements the concept of "behaviors", which can be bound to a certain key position, sensor (encoder), +or layer, to perform certain actions when events occur for that binding (e.g. when a certain key position +is pressed or released, or an encoder triggers a rotation event). + +For example, the simplest behavior in ZMK is the "key press" behavior, which responds to key position +(a certain spot on the keyboard), and when that position is pressed, send a keycode to the host, and +when the key position is released, updates the host to notify of the keycode being released. + +For the full set of possible behaviors, start at the [Key Press](/docs/behavior/key-press) behavior. + +## Layers + +Like many mechanical keyboard firmwares, ZMK keymaps are composed of a collection of layers, with a +minimum of at least one layer that is the default, usually near the bottom of the "stack". Each layer +in ZMK contains a set of bindings that bind a certain behavior to a certain key position in that layer. + +In addition to the base default layer (which can be changed), certain bound behaviors may also +enable/disable additional layers "on top" of the default layer. + +**TODO**: A diagram to help visualize layers + +When a key location is pressed/released, the stack of all active layers from "top to bottom" is used, +and the event is sent to the behavior bound at that position in each layer, for it to perform whatever +actions it wants to in reaction to the event. Those behaviors can choose to "handle" the event, and stop +it from being passed to any lower layers, or may choose to "pass it along", and let the next layer +in the stack _also_ get the event. + +## Behavior Bindings + +Binding a behavior at a certain key position may include up to two extra parameters that are used to +alter the behavior when that specific key position is activated/deactived. For example, when binding +the "key press" (`kp`) behavior at a certain key position, you must specific _which_ keycode should +be used for that key position. + +``` +&kp A +``` + +In this case, the `A` is actually a define for the raw HID keycode, to make keymaps easier to read and write. + +For example of a binding that uses two parameters, you can see how "mod-tap" (`mt`) is bound: + +``` +&mt MOD_LSFT D +``` + +Here, the first parameter is the set of modifiers that should be used for the "hold" behavior, and the second +parameter is the keycode that should be sent when triggering the "tap" behavior. + +## Keymap File + +A keymap file is composed of several sections, that together make up a valid devicetree file for describing the keymap and its layers. + +### Includes + +THe devicetree files are actually preprocessed before being finally leveraged by Zephyr. This allows using standard C defines to create meaningful placeholders +for what would otherwise be cryptic integer keycodes, etc. This also allows bringing in _other_ devicetree nodes from separate files. + +The top two lines of most keymaps should include: + +``` +#include +#include +``` + +The first defines the nodes for all the available behaviors in ZMK, which will be referenced in the behavior bindings. This is how bindings like `&kp` can reference the key press behavior defined with an anchor name of `kp`. + +The second include brings in the defines for all the keycodes (e.g. `A`, `NUM_1`, `M_PLAY`) and the modifiers (e.g. `MOD_LSFT`) used for various behavior bindings. + +### Root devicetree Node + +ALl the remaining keymap nodes will be nested inside of the root devicetree node, like so: + +```devicetree +/ { + // Everything else goes here! +}; +``` + +### Layers + +``` + layers { + compatible = "zmk,layers"; + + default: layer_0 { + label = "DEFAULT"; +// --------------------------------------------------------------------------------------------------------------------------------- +// | ESC | Q | W | E | R | T | | Y | U | I | O | P | \ | +// | TAB | A | S | D | F | G | | H | J | K | L | ; | ' | +// | SHIFT | Z | X | C | V | B | L SHIFT | L SHIFT | | L SHIFT | L SHIFT | N | M | , | . | / | CTRL | +// | GUI | DEL | RET | SPACE | ESC | | RET | SPACE | TAB | BSPC | R-ALT | + bindings = < + &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH + &kp TAB &kp A &kp S &mt MOD_LCTL D &mt MOD_LSFT F &kp G &kp H &mt MOD_LSFT J &mt MOD_LCTL K &kp L &kp SCLN &kp QUOT + &kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp LSFT &kp LSFT &kp LSFT &kp LSFT &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RCTL + &kp LGUI &kp DEL &kp RET &kp SPC &mo 1 &mo 2 &kp SPC &kp RET &kp BKSP &kp RALT + >; + + sensor-bindings = <&inc_dec_cp M_VOLU M_VOLD &inc_dec_kp PGUP PGDN>; + }; + }; +``` + +### Keymap + +``` + keymap0: keymap { + compatible = "zmk,keymap"; + label ="Default Kyria Keymap"; + layers = <&default>; + }; +``` + +### Chosen Keymap + +``` + chosen { + zmk,keymap = &keymap0; + }; +``` + +### Complete Example + +You can see a complete example if you see the [stock Kyria keymap](https://github.com/zmkfirmware/zmk/blob/main/app/boards/shields/kyria/kyria.keymap). diff --git a/docs/docs/feature/underglow.md b/docs/docs/feature/underglow.md new file mode 100644 index 0000000..0bf9a8d --- /dev/null +++ b/docs/docs/feature/underglow.md @@ -0,0 +1,5 @@ +--- +title: RGB Underglow +--- + +TODO: Documentation on RGB underglow. diff --git a/docs/docs/keymaps.md b/docs/docs/keymaps.md deleted file mode 100644 index d54b130..0000000 --- a/docs/docs/keymaps.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -id: keymaps -title: Keymaps & Behaviors -sidebar_label: Keymaps ---- - -Keymaps! diff --git a/docs/docs/underglow.md b/docs/docs/underglow.md deleted file mode 100644 index ff1a236..0000000 --- a/docs/docs/underglow.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -id: underglow -title: RGB Underglow ---- - -TODO: Documentation on RGB underglow. diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index 2fdb36d..44acd69 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -7,7 +7,7 @@ module.exports = { organizationName: "zmkfirmware", // Usually your GitHub org/user name. projectName: "zmk", // Usually your repo name. themeConfig: { - sidebarCollapsible: false, + // sidebarCollapsible: false, navbar: { title: "ZMK Firmware", logo: { diff --git a/docs/sidebars.js b/docs/sidebars.js index b270a68..f625672 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -1,7 +1,12 @@ module.exports = { someSidebar: { "Getting Started": ["intro", "hardware", "user-setup", "faq"], - Features: ["keymaps", "displays", "encoders", "underglow"], + Features: [ + "feature/keymaps", + "feature/displays", + "feature/encoders", + "feature/underglow", + ], Behaviors: ["behavior/key-press"], Development: [ "dev-clean-room", -- cgit v1.2.3 From 65a6a91f59127827cbcc13e15a26d6845071a7ef Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Thu, 6 Aug 2020 15:04:50 -0400 Subject: Propertly highlight .keymap files as dts. --- .vscode/settings.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 096a82c..3642d28 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,5 +1,6 @@ { "files.associations": { - "*.overlay": "dts" + "*.overlay": "dts", + "*.keymap": "dts" } } -- cgit v1.2.3 From fd3ce4ba1cbd521b60020395696611cfa5810ab0 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Thu, 6 Aug 2020 23:22:02 -0400 Subject: Encoder Kconfig fixes. --- app/drivers/zephyr/Kconfig | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/drivers/zephyr/Kconfig b/app/drivers/zephyr/Kconfig index b22c4b1..0237846 100644 --- a/app/drivers/zephyr/Kconfig +++ b/app/drivers/zephyr/Kconfig @@ -25,7 +25,7 @@ menuconfig EC11 if EC11 -choice EC11_TRIGGER +choice prompt "Trigger mode" default EC11_TRIGGER_NONE help @@ -46,6 +46,9 @@ config EC11_TRIGGER_OWN_THREAD endchoice +config EC11_TRIGGER + bool + config EC11_THREAD_PRIORITY int "Thread priority" depends on EC11_TRIGGER_OWN_THREAD -- cgit v1.2.3 From 04606317292bcfb62e6884291495cb76fa656f47 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Thu, 6 Aug 2020 23:28:34 -0400 Subject: Refactor to simpler keymaps. --- app/boards/arm/planck/planck_rev6.keymap | 16 +--- .../clueboard_california.keymap | 16 +--- app/boards/shields/kyria/kyria.keymap | 57 ++++++++----- app/boards/shields/lily58/lily58.keymap | 22 +---- app/dts/bindings/zmk,keymap.yaml | 22 +++-- app/dts/bindings/zmk,layers.yaml | 18 ----- app/src/keymap.c | 94 +++++----------------- 7 files changed, 77 insertions(+), 168 deletions(-) delete mode 100644 app/dts/bindings/zmk,layers.yaml diff --git a/app/boards/arm/planck/planck_rev6.keymap b/app/boards/arm/planck/planck_rev6.keymap index f474ec9..af1dc7c 100644 --- a/app/boards/arm/planck/planck_rev6.keymap +++ b/app/boards/arm/planck/planck_rev6.keymap @@ -1,23 +1,11 @@ #include #include -#include / { - chosen { - zmk,keymap = &keymap0; - }; - - keymap0: keymap { + keymap { compatible = "zmk,keymap"; - label ="Default Planck Keymap"; - layers = <&default>; - }; - - layers { - compatible = "zmk,layers"; - default: layer_0 { - label = "DEFAULT"; + default_layer { // ----------------------------------------------------------------------------------------- // | TAB | Q | W | E | R | T | Y | U | I | O | P | BSPC | // | ESC | A | S | D | F | G | H | J | K | L | ; | ' | diff --git a/app/boards/shields/clueboard_california/clueboard_california.keymap b/app/boards/shields/clueboard_california/clueboard_california.keymap index c2fa7f8..7a84b11 100644 --- a/app/boards/shields/clueboard_california/clueboard_california.keymap +++ b/app/boards/shields/clueboard_california/clueboard_california.keymap @@ -1,23 +1,11 @@ -#include -#include #include +#include / { - chosen { - zmk,keymap = &keymap0; - }; - keymap0: keymap { compatible = "zmk,keymap"; - label ="Default Kyria Keymap"; - layers = <&default>; - }; - - layers { - compatible = "zmk,layers"; - default: layer_0 { - label = "DEFAULT"; + default_layer { bindings = < &kp NUM_9 &kp NUM_8 &kp NUM_7 &kp NUM_6 diff --git a/app/boards/shields/kyria/kyria.keymap b/app/boards/shields/kyria/kyria.keymap index 7f12f59..614e13b 100644 --- a/app/boards/shields/kyria/kyria.keymap +++ b/app/boards/shields/kyria/kyria.keymap @@ -2,34 +2,55 @@ #include / { - chosen { - zmk,keymap = &keymap0; - }; - - keymap0: keymap { + keymap { compatible = "zmk,keymap"; - label ="Default Kyria Keymap"; - layers = <&default>; - }; - - layers { - compatible = "zmk,layers"; - default: layer_0 { - label = "DEFAULT"; + default_layer { // --------------------------------------------------------------------------------------------------------------------------------- // | ESC | Q | W | E | R | T | | Y | U | I | O | P | \ | // | TAB | A | S | D | F | G | | H | J | K | L | ; | ' | // | SHIFT | Z | X | C | V | B | L SHIFT | L SHIFT | | L SHIFT | L SHIFT | N | M | , | . | / | CTRL | // | GUI | DEL | RET | SPACE | ESC | | RET | SPACE | TAB | BSPC | R-ALT | bindings = < - &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH - &kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SCLN &kp QUOT - &kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp LSFT &kp LSFT &kp LSFT &kp LSFT &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RCTL - &kp LGUI &kp DEL &kp RET &kp SPC &kp ESC &kp RET &kp SPC &kp TAB &kp BKSP &kp RALT + &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH + &kp TAB &kp A &kp S &mt MOD_LCTL D &mt MOD_LSFT F &kp G &kp H &mt MOD_LSFT J &mt MOD_LCTL K &kp L &kp SCLN &kp QUOT + &kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp LSFT &kp LSFT &kp LSFT &kp LSFT &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RCTL + &kp LGUI &kp DEL &kp RET &kp SPC &mo 1 &mo 2 &kp SPC &kp RET &kp BKSP &kp RALT >; sensor-bindings = <&inc_dec_cp M_VOLU M_VOLD &inc_dec_kp PGUP PGDN>; }; + + lower_layer { +// --------------------------------------------------------------------------------------------------------------------------------- +// | ESC | Q | W | E | R | T | | Y | U | I | O | P | \ | +// | TAB | A | S | D | F | G | | H | J | K | L | ; | ' | +// | SHIFT | Z | X | C | V | B | L SHIFT | L SHIFT | | L SHIFT | L SHIFT | N | M | , | . | / | CTRL | +// | GUI | DEL | RET | SPACE | ESC | | RET | SPACE | TAB | BSPC | R-ALT | + bindings = < + &kp ESC &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 &kp BSLH + &kp TAB &kp A &kp S &mt MOD_LCTL D &mt MOD_LSFT F &kp G &kp H &mt MOD_LSFT J &mt MOD_LCTL K &kp L &kp SCLN &kp QUOT + &kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp LSFT &kp LSFT &kp LSFT &kp LSFT &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RCTL + &kp LGUI &kp DEL &kp RET &kp SPC &trans &kp RET &kp SPC &kp SPC &kp BKSP &kp RALT + >; + + // sensor-bindings = <&inc_dec_cp M_VOLU M_VOLD &inc_dec_kp PGUP PGDN>; + }; + + raise_layer { +// --------------------------------------------------------------------------------------------------------------------------------- +// | ESC | Q | W | E | R | T | | Y | U | I | O | P | \ | +// | TAB | A | S | D | F | G | | H | J | K | L | ; | ' | +// | SHIFT | Z | X | C | V | B | L SHIFT | L SHIFT | | L SHIFT | L SHIFT | N | M | , | . | / | CTRL | +// | GUI | DEL | RET | SPACE | ESC | | RET | SPACE | TAB | BSPC | R-ALT | + bindings = < + &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH + &kp TAB &kp A &kp S &mt MOD_LCTL D &mt MOD_LSFT F &kp G &kp H &mt MOD_LSFT J &mt MOD_LCTL K &kp L &kp SCLN &kp QUOT + &kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp LSFT &kp LSFT &kp LSFT &kp LSFT &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RCTL + &kp LGUI &kp DEL &kp RET &kp SPC &kp RET &trans &kp SPC &kp SPC &kp BKSP &kp RALT + >; + + // sensor-bindings = <&inc_dec_cp M_VOLU M_VOLD &inc_dec_kp PGUP PGDN>; + }; }; -}; +}; \ No newline at end of file diff --git a/app/boards/shields/lily58/lily58.keymap b/app/boards/shields/lily58/lily58.keymap index a198770..71bf4ad 100644 --- a/app/boards/shields/lily58/lily58.keymap +++ b/app/boards/shields/lily58/lily58.keymap @@ -1,23 +1,11 @@ #include #include -#include / { - chosen { - zmk,keymap = &keymap0; - }; - - keymap0: keymap { + keymap { compatible = "zmk,keymap"; - label ="Default Lily58 Keymap"; - layers = <&default &lower &raise>; - }; - - layers { - compatible = "zmk,layers"; - default: layer_0 { - label = "DEFAULT"; + default_layer { // ------------------------------------------------------------------------------------------------------------ // | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` | // | TAB | Q | W | E | R | T | | Y | U | I | O | P | - | @@ -33,8 +21,7 @@ >; }; - lower: layer_1 { - label = "LOWER"; + lower_layer { // ------------------------------------------------------------------------------------------------------------ // | | | | | | | | | | | | | | // | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | @@ -50,8 +37,7 @@ >; }; - raise: layer_3 { - label = "RAISE"; + raise_layer { // ------------------------------------------------------------------------------------------------------------ // | | | | | | | | | | | | | | // | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | | diff --git a/app/dts/bindings/zmk,keymap.yaml b/app/dts/bindings/zmk,keymap.yaml index b9517a3..fb6d914 100644 --- a/app/dts/bindings/zmk,keymap.yaml +++ b/app/dts/bindings/zmk,keymap.yaml @@ -3,15 +3,13 @@ description: | compatible: "zmk,keymap" -properties: - transform: - type: phandle - required: false - - label: - type: string - required: true - - layers: - type: phandles - required: true +child-binding: + description: "A layer to be used in a keymap" + + properties: + bindings: + type: phandle-array + required: true + sensor-bindings: + type: phandle-array + required: false diff --git a/app/dts/bindings/zmk,layers.yaml b/app/dts/bindings/zmk,layers.yaml deleted file mode 100644 index 1a3592e..0000000 --- a/app/dts/bindings/zmk,layers.yaml +++ /dev/null @@ -1,18 +0,0 @@ -description: | - Allows defining the various keymap layers for use. - -compatible: "zmk,layers" - -child-binding: - description: "A layer to be used in a keymap" - - properties: - label: - type: string - required: true - bindings: - type: phandle-array - required: true - sensor-bindings: - type: phandle-array - required: false diff --git a/app/src/keymap.c b/app/src/keymap.c index 24e249d..ec51240 100644 --- a/app/src/keymap.c +++ b/app/src/keymap.c @@ -17,96 +17,41 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); static u32_t zmk_keymap_layer_state = 0; static u8_t zmk_keymap_layer_default = 0; -#define ZMK_KEYMAP_NODE DT_CHOSEN(zmk_keymap) -#define ZMK_KEYMAP_LAYERS_LEN DT_PROP_LEN(ZMK_KEYMAP_NODE, layers) +#define DT_DRV_COMPAT zmk_keymap + +#define LAYER_CHILD_LEN(node) 1+ +#define ZMK_KEYMAP_NODE DT_DRV_INST(0) +#define ZMK_KEYMAP_LAYERS_LEN (DT_INST_FOREACH_CHILD(0, LAYER_CHILD_LEN) 0) #define LAYER_NODE(l) DT_PHANDLE_BY_IDX(ZMK_KEYMAP_NODE, layers, l) #define _TRANSFORM_ENTRY(idx, layer) \ - { .behavior_dev = DT_LABEL(DT_PHANDLE_BY_IDX(DT_PHANDLE_BY_IDX(ZMK_KEYMAP_NODE, layers, layer), bindings, idx)), \ - .param1 = COND_CODE_0(DT_PHA_HAS_CELL_AT_IDX(LAYER_NODE(layer), bindings, idx, param1), (0), (DT_PHA_BY_IDX(LAYER_NODE(layer), bindings, idx, param1))), \ - .param2 = COND_CODE_0(DT_PHA_HAS_CELL_AT_IDX(LAYER_NODE(layer), bindings, idx, param2), (0), (DT_PHA_BY_IDX(LAYER_NODE(layer), bindings, idx, param2))), \ + { .behavior_dev = DT_LABEL(DT_PHANDLE_BY_IDX(layer, bindings, idx)), \ + .param1 = COND_CODE_0(DT_PHA_HAS_CELL_AT_IDX(layer, bindings, idx, param1), (0), (DT_PHA_BY_IDX(layer, bindings, idx, param1))), \ + .param2 = COND_CODE_0(DT_PHA_HAS_CELL_AT_IDX(layer, bindings, idx, param2), (0), (DT_PHA_BY_IDX(layer, bindings, idx, param2))), \ }, -#define TRANSFORMED_LAYER(idx) \ - { UTIL_LISTIFY(DT_PROP_LEN(DT_PHANDLE_BY_IDX(ZMK_KEYMAP_NODE, layers, idx), bindings), _TRANSFORM_ENTRY, idx) } +#define TRANSFORMED_LAYER(node) \ + { UTIL_LISTIFY(DT_PROP_LEN(node, bindings), _TRANSFORM_ENTRY, node) }, static struct zmk_behavior_binding zmk_keymap[ZMK_KEYMAP_LAYERS_LEN][ZMK_KEYMAP_LEN] = { -#if DT_PROP_HAS_IDX(ZMK_KEYMAP_NODE, layers, 0) - TRANSFORMED_LAYER(0), -#endif -#if DT_PROP_HAS_IDX(ZMK_KEYMAP_NODE, layers, 1) - TRANSFORMED_LAYER(1), -#endif -#if DT_PROP_HAS_IDX(ZMK_KEYMAP_NODE, layers, 2) - TRANSFORMED_LAYER(2), -#endif -#if DT_PROP_HAS_IDX(ZMK_KEYMAP_NODE, layers, 3) - TRANSFORMED_LAYER(3), -#endif -#if DT_PROP_HAS_IDX(ZMK_KEYMAP_NODE, layers, 4) - TRANSFORMED_LAYER(4), -#endif -#if DT_PROP_HAS_IDX(ZMK_KEYMAP_NODE, layers, 5) - TRANSFORMED_LAYER(5), -#endif -#if DT_PROP_HAS_IDX(ZMK_KEYMAP_NODE, layers, 6) - TRANSFORMED_LAYER(6), -#endif -#if DT_PROP_HAS_IDX(ZMK_KEYMAP_NODE, layers, 7) - TRANSFORMED_LAYER(7), -#endif -#if DT_PROP_HAS_IDX(ZMK_KEYMAP_NODE, layers, 8) - TRANSFORMED_LAYER(8), -#endif -#if DT_PROP_HAS_IDX(ZMK_KEYMAP_NODE, layers, 9) - TRANSFORMED_LAYER(9), -#endif + DT_INST_FOREACH_CHILD(0, TRANSFORMED_LAYER) }; #if ZMK_KEYMAP_HAS_SENSORS #define _TRANSFORM_SENSOR_ENTRY(idx, layer) \ - { .behavior_dev = DT_LABEL(DT_PHANDLE_BY_IDX(DT_PHANDLE_BY_IDX(ZMK_KEYMAP_NODE, layers, layer), sensor_bindings, idx)), \ - .param1 = COND_CODE_0(DT_PHA_HAS_CELL_AT_IDX(LAYER_NODE(layer), sensor_bindings, idx, param1), (0), (DT_PHA_BY_IDX(LAYER_NODE(layer), sensor_bindings, idx, param1))), \ - .param2 = COND_CODE_0(DT_PHA_HAS_CELL_AT_IDX(LAYER_NODE(layer), sensor_bindings, idx, param2), (0), (DT_PHA_BY_IDX(LAYER_NODE(layer), sensor_bindings, idx, param2))), \ + { .behavior_dev = DT_LABEL(DT_PHANDLE_BY_IDX(layer, sensor_bindings, idx)), \ + .param1 = COND_CODE_0(DT_PHA_HAS_CELL_AT_IDX(layer, sensor_bindings, idx, param1), (0), (DT_PHA_BY_IDX(layer, sensor_bindings, idx, param1))), \ + .param2 = COND_CODE_0(DT_PHA_HAS_CELL_AT_IDX(layer, sensor_bindings, idx, param2), (0), (DT_PHA_BY_IDX(layer, sensor_bindings, idx, param2))), \ }, -#define SENSOR_LAYER(idx) \ - COND_CODE_1(DT_NODE_HAS_PROP(DT_PHANDLE_BY_IDX(ZMK_KEYMAP_NODE, layers, idx), sensor_bindings), \ - ({ UTIL_LISTIFY(DT_PROP_LEN(DT_PHANDLE_BY_IDX(ZMK_KEYMAP_NODE, layers, idx), sensor_bindings), _TRANSFORM_SENSOR_ENTRY, idx) }), \ - (NULL)) +#define SENSOR_LAYER(node) \ + COND_CODE_1(DT_NODE_HAS_PROP(node, sensor_bindings), \ + ({ UTIL_LISTIFY(DT_PROP_LEN(node, sensor_bindings), _TRANSFORM_SENSOR_ENTRY, node) }), \ + ({})), static struct zmk_behavior_binding zmk_sensor_keymap[ZMK_KEYMAP_LAYERS_LEN][ZMK_KEYMAP_SENSORS_LEN] = { -#if DT_PROP_HAS_IDX(ZMK_KEYMAP_NODE, layers, 0) - SENSOR_LAYER(0), -#endif -#if DT_PROP_HAS_IDX(ZMK_KEYMAP_NODE, layers, 1) - SENSOR_LAYER(1), -#endif -#if DT_PROP_HAS_IDX(ZMK_KEYMAP_NODE, layers, 2) - SENSOR_LAYER(2), -#endif -#if DT_PROP_HAS_IDX(ZMK_KEYMAP_NODE, layers, 3) - SENSOR_LAYER(3), -#endif -#if DT_PROP_HAS_IDX(ZMK_KEYMAP_NODE, layers, 4) - SENSOR_LAYER(4), -#endif -#if DT_PROP_HAS_IDX(ZMK_KEYMAP_NODE, layers, 5) - SENSOR_LAYER(5), -#endif -#if DT_PROP_HAS_IDX(ZMK_KEYMAP_NODE, layers, 6) - SENSOR_LAYER(6), -#endif -#if DT_PROP_HAS_IDX(ZMK_KEYMAP_NODE, layers, 7) - SENSOR_LAYER(7), -#endif -#if DT_PROP_HAS_IDX(ZMK_KEYMAP_NODE, layers, 8) - SENSOR_LAYER(8), -#endif -#if DT_PROP_HAS_IDX(ZMK_KEYMAP_NODE, layers, 9) - SENSOR_LAYER(9), -#endif + DT_INST_FOREACH_CHILD(0, SENSOR_LAYER) }; #endif /* ZMK_KEYMAP_HAS_SENSORS */ @@ -131,6 +76,7 @@ int zmk_keymap_layer_deactivate(u8_t layer) int zmk_keymap_position_state_changed(u32_t position, bool pressed) { + LOG_DBG("Searching %d layers for a binding", ZMK_KEYMAP_LAYERS_LEN); for (int layer = ZMK_KEYMAP_LAYERS_LEN - 1; layer >= zmk_keymap_layer_default; layer--) { if ((zmk_keymap_layer_state & BIT(layer)) == BIT(layer) || layer == zmk_keymap_layer_default) -- cgit v1.2.3 From 01b8b724c12b2dc21340fbaa37ed0946f4b7c39c Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Thu, 6 Aug 2020 23:54:18 -0400 Subject: Remove debugging line that snuck in. --- app/src/keymap.c | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/keymap.c b/app/src/keymap.c index ec51240..aee0577 100644 --- a/app/src/keymap.c +++ b/app/src/keymap.c @@ -76,7 +76,6 @@ int zmk_keymap_layer_deactivate(u8_t layer) int zmk_keymap_position_state_changed(u32_t position, bool pressed) { - LOG_DBG("Searching %d layers for a binding", ZMK_KEYMAP_LAYERS_LEN); for (int layer = ZMK_KEYMAP_LAYERS_LEN - 1; layer >= zmk_keymap_layer_default; layer--) { if ((zmk_keymap_layer_state & BIT(layer)) == BIT(layer) || layer == zmk_keymap_layer_default) -- cgit v1.2.3 From b4ae91a649832e16fbd0c940dc96f9eb3a8b7e39 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Thu, 6 Aug 2020 23:57:11 -0400 Subject: Revert some personal Kyria keymap changes. --- app/boards/shields/kyria/kyria.keymap | 40 ++++------------------------------- 1 file changed, 4 insertions(+), 36 deletions(-) diff --git a/app/boards/shields/kyria/kyria.keymap b/app/boards/shields/kyria/kyria.keymap index 614e13b..1d6b9bf 100644 --- a/app/boards/shields/kyria/kyria.keymap +++ b/app/boards/shields/kyria/kyria.keymap @@ -12,45 +12,13 @@ // | SHIFT | Z | X | C | V | B | L SHIFT | L SHIFT | | L SHIFT | L SHIFT | N | M | , | . | / | CTRL | // | GUI | DEL | RET | SPACE | ESC | | RET | SPACE | TAB | BSPC | R-ALT | bindings = < - &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH - &kp TAB &kp A &kp S &mt MOD_LCTL D &mt MOD_LSFT F &kp G &kp H &mt MOD_LSFT J &mt MOD_LCTL K &kp L &kp SCLN &kp QUOT - &kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp LSFT &kp LSFT &kp LSFT &kp LSFT &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RCTL - &kp LGUI &kp DEL &kp RET &kp SPC &mo 1 &mo 2 &kp SPC &kp RET &kp BKSP &kp RALT + &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH + &kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SCLN &kp QUOT + &kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp LSFT &kp LSFT &kp LSFT &kp LSFT &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RCTL + &kp LGUI &kp DEL &kp RET &kp SPC &kp ESC &kp RET &kp SPC &kp TAB &kp BKSP &kp RALT >; sensor-bindings = <&inc_dec_cp M_VOLU M_VOLD &inc_dec_kp PGUP PGDN>; }; - - lower_layer { -// --------------------------------------------------------------------------------------------------------------------------------- -// | ESC | Q | W | E | R | T | | Y | U | I | O | P | \ | -// | TAB | A | S | D | F | G | | H | J | K | L | ; | ' | -// | SHIFT | Z | X | C | V | B | L SHIFT | L SHIFT | | L SHIFT | L SHIFT | N | M | , | . | / | CTRL | -// | GUI | DEL | RET | SPACE | ESC | | RET | SPACE | TAB | BSPC | R-ALT | - bindings = < - &kp ESC &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 &kp BSLH - &kp TAB &kp A &kp S &mt MOD_LCTL D &mt MOD_LSFT F &kp G &kp H &mt MOD_LSFT J &mt MOD_LCTL K &kp L &kp SCLN &kp QUOT - &kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp LSFT &kp LSFT &kp LSFT &kp LSFT &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RCTL - &kp LGUI &kp DEL &kp RET &kp SPC &trans &kp RET &kp SPC &kp SPC &kp BKSP &kp RALT - >; - - // sensor-bindings = <&inc_dec_cp M_VOLU M_VOLD &inc_dec_kp PGUP PGDN>; - }; - - raise_layer { -// --------------------------------------------------------------------------------------------------------------------------------- -// | ESC | Q | W | E | R | T | | Y | U | I | O | P | \ | -// | TAB | A | S | D | F | G | | H | J | K | L | ; | ' | -// | SHIFT | Z | X | C | V | B | L SHIFT | L SHIFT | | L SHIFT | L SHIFT | N | M | , | . | / | CTRL | -// | GUI | DEL | RET | SPACE | ESC | | RET | SPACE | TAB | BSPC | R-ALT | - bindings = < - &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH - &kp TAB &kp A &kp S &mt MOD_LCTL D &mt MOD_LSFT F &kp G &kp H &mt MOD_LSFT J &mt MOD_LCTL K &kp L &kp SCLN &kp QUOT - &kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp LSFT &kp LSFT &kp LSFT &kp LSFT &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RCTL - &kp LGUI &kp DEL &kp RET &kp SPC &kp RET &trans &kp SPC &kp SPC &kp BKSP &kp RALT - >; - - // sensor-bindings = <&inc_dec_cp M_VOLU M_VOLD &inc_dec_kp PGUP PGDN>; - }; }; }; \ No newline at end of file -- cgit v1.2.3 From 2c734c913390dd4b2ff49295b3e1107fa397aed8 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Thu, 6 Aug 2020 23:59:20 -0400 Subject: Whitespace tweaks. --- app/boards/shields/kyria/kyria.keymap | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/boards/shields/kyria/kyria.keymap b/app/boards/shields/kyria/kyria.keymap index 1d6b9bf..6caf073 100644 --- a/app/boards/shields/kyria/kyria.keymap +++ b/app/boards/shields/kyria/kyria.keymap @@ -12,9 +12,9 @@ // | SHIFT | Z | X | C | V | B | L SHIFT | L SHIFT | | L SHIFT | L SHIFT | N | M | , | . | / | CTRL | // | GUI | DEL | RET | SPACE | ESC | | RET | SPACE | TAB | BSPC | R-ALT | bindings = < - &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH - &kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SCLN &kp QUOT - &kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp LSFT &kp LSFT &kp LSFT &kp LSFT &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RCTL + &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH + &kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SCLN &kp QUOT + &kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp LSFT &kp LSFT &kp LSFT &kp LSFT &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RCTL &kp LGUI &kp DEL &kp RET &kp SPC &kp ESC &kp RET &kp SPC &kp TAB &kp BKSP &kp RALT >; -- cgit v1.2.3 From d57c271804328460470d13218a309e92a9397d22 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Fri, 7 Aug 2020 00:00:35 -0400 Subject: Whitespace at EOF fix. --- app/boards/shields/kyria/kyria.keymap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/boards/shields/kyria/kyria.keymap b/app/boards/shields/kyria/kyria.keymap index 6caf073..f689ef6 100644 --- a/app/boards/shields/kyria/kyria.keymap +++ b/app/boards/shields/kyria/kyria.keymap @@ -21,4 +21,4 @@ sensor-bindings = <&inc_dec_cp M_VOLU M_VOLD &inc_dec_kp PGUP PGDN>; }; }; -}; \ No newline at end of file +}; -- cgit v1.2.3 From ec4c12501ce8ca4184689e114d8e3465c8f1daf2 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Fri, 7 Aug 2020 09:31:12 -0400 Subject: Fix up the keymap docs after the DT refactor. --- docs/docs/feature/keymaps.md | 50 ++++++++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 23 deletions(-) diff --git a/docs/docs/feature/keymaps.md b/docs/docs/feature/keymaps.md index 3eee145..133ce93 100644 --- a/docs/docs/feature/keymaps.md +++ b/docs/docs/feature/keymaps.md @@ -102,24 +102,39 @@ ALl the remaining keymap nodes will be nested inside of the root devicetree node }; ``` +### Keymap Node + +Nested under the devicetree root, is the keymap node. The node _name_ itself is not critical, but the node **MUST** have a property +`compatible = "zmk,keymap"` in order to be used by ZMK. + +``` + keymap { + compatible = "zmk,keymap"; + + // Layer nodes go here! + }; +``` + ### Layers +Each layer of your keymap will be nested under the keymap node. Here is a sample +that defines just one layer for this keymap: + ``` - layers { - compatible = "zmk,layers"; + keymap { + compatible = "zmk,keymap"; - default: layer_0 { - label = "DEFAULT"; + default_layer { // --------------------------------------------------------------------------------------------------------------------------------- // | ESC | Q | W | E | R | T | | Y | U | I | O | P | \ | // | TAB | A | S | D | F | G | | H | J | K | L | ; | ' | // | SHIFT | Z | X | C | V | B | L SHIFT | L SHIFT | | L SHIFT | L SHIFT | N | M | , | . | / | CTRL | // | GUI | DEL | RET | SPACE | ESC | | RET | SPACE | TAB | BSPC | R-ALT | bindings = < - &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH - &kp TAB &kp A &kp S &mt MOD_LCTL D &mt MOD_LSFT F &kp G &kp H &mt MOD_LSFT J &mt MOD_LCTL K &kp L &kp SCLN &kp QUOT - &kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp LSFT &kp LSFT &kp LSFT &kp LSFT &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RCTL - &kp LGUI &kp DEL &kp RET &kp SPC &mo 1 &mo 2 &kp SPC &kp RET &kp BKSP &kp RALT + &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH + &kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SCLN &kp QUOT + &kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp LSFT &kp LSFT &kp LSFT &kp LSFT &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RCTL + &kp LGUI &kp DEL &kp RET &kp SPC &kp ESC &kp RET &kp SPC &kp TAB &kp BKSP &kp RALT >; sensor-bindings = <&inc_dec_cp M_VOLU M_VOLD &inc_dec_kp PGUP PGDN>; @@ -127,23 +142,12 @@ ALl the remaining keymap nodes will be nested inside of the root devicetree node }; ``` -### Keymap +Each layer should have: -``` - keymap0: keymap { - compatible = "zmk,keymap"; - label ="Default Kyria Keymap"; - layers = <&default>; - }; -``` - -### Chosen Keymap +1. A `bindings` property this will be a list of behaviour bindings, one for each key position for the keyboard. +1. (Optional) A `sensor-bindings` property that will be a list of behavior bindings for each sensor on the keyboard. (Currently, only encoders are supported as sensor hardware, but in the future devices like trackpoints would be supported the same way) -``` - chosen { - zmk,keymap = &keymap0; - }; -``` +For the full set of possible behaviors, start at the [Key Press](/docs/behavior/key-press) behavior. ### Complete Example -- cgit v1.2.3 From 5c10517c29696fdc4ba7b7574fbde0e7a68a4589 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Fri, 7 Aug 2020 09:36:48 -0400 Subject: Show the complete keymap example inline. --- docs/docs/feature/keymaps.md | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/docs/docs/feature/keymaps.md b/docs/docs/feature/keymaps.md index 133ce93..3b8ebb8 100644 --- a/docs/docs/feature/keymaps.md +++ b/docs/docs/feature/keymaps.md @@ -151,4 +151,31 @@ For the full set of possible behaviors, start at the [Key Press](/docs/behavior/ ### Complete Example -You can see a complete example if you see the [stock Kyria keymap](https://github.com/zmkfirmware/zmk/blob/main/app/boards/shields/kyria/kyria.keymap). +Putting this all together, a complete [`kyria.keymap`](https://github.com/zmkfirmware/zmk/blob/main/app/boards/shields/kyria/kyria.keymap) looks like: + +``` +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { +// --------------------------------------------------------------------------------------------------------------------------------- +// | ESC | Q | W | E | R | T | | Y | U | I | O | P | \ | +// | TAB | A | S | D | F | G | | H | J | K | L | ; | ' | +// | SHIFT | Z | X | C | V | B | L SHIFT | L SHIFT | | L SHIFT | L SHIFT | N | M | , | . | / | CTRL | +// | GUI | DEL | RET | SPACE | ESC | | RET | SPACE | TAB | BSPC | R-ALT | + bindings = < + &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH + &kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SCLN &kp QUOT + &kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp LSFT &kp LSFT &kp LSFT &kp LSFT &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RCTL + &kp LGUI &kp DEL &kp RET &kp SPC &kp ESC &kp RET &kp SPC &kp TAB &kp BKSP &kp RALT + >; + + sensor-bindings = <&inc_dec_cp M_VOLU M_VOLD &inc_dec_kp PGUP PGDN>; + }; + }; +}; +``` -- cgit v1.2.3 From ccb9b9309a37f55e0aca3c79aa1d78214a42f701 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Fri, 7 Aug 2020 10:02:44 -0400 Subject: Script fixes, ability to prepopulate a keymap. * Use read w/ -i for initial default values. * Prompt for fetching keymap for customization, and grab latest from `main` if opted in. * Don't copy `prj.conf` from the template, pull the `.conf` from `main` also. --- docs/static/setup.sh | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/docs/static/setup.sh b/docs/static/setup.sh index 23ab42b..a122994 100644 --- a/docs/static/setup.sh +++ b/docs/static/setup.sh @@ -7,6 +7,7 @@ title="ZMK Config Setup:" # TODO: Check for git being installed +# TODO: Check for curl being installed # TODO: Check for user.name and user.email git configs being set prompt="Pick an MCU board:" @@ -41,7 +42,7 @@ options=("Kyria" "Lily58") PS3="$prompt " # TODO: Add support for "Other" and linking to docs on adding custom shields in user config repos. # select opt in "${options[@]}" "Other" "Quit"; do -select opt in "${options[@]}" "Other" "Quit"; do +select opt in "${options[@]}" "Quit"; do case "$REPLY" in @@ -56,12 +57,16 @@ select opt in "${options[@]}" "Other" "Quit"; do esac done -read -p "GitHub Username (leave empty to skip GitHub repo creation): " github_user +read -e -p "Copy in the stock keymap for customization? [Yn]: " copy_keymap + +if [ -z "$copy_keymap" ] || [ "$copy_keymap" == "Y" ] || [ "$copy_keymap" == "y" ]; then copy_keymap="yes"; fi + +read -e -p "GitHub Username (leave empty to skip GitHub repo creation): " github_user if [ -n "$github_user" ]; then - read -p "GitHub Repo Name [zmk-config]: " repo_name + read -e -i "zmk-config" -p "GitHub Repo Name: " repo_name if [ -z "$repo_name" ]; then repo_name="zmk-config"; fi - read -p "GitHub Repo [https://github.com/${github_user}/${repo_name}.git]: " github_repo + read -e -i "https://github.com/${github_user}/${repo_name}.git" -p "GitHub Repo: " github_repo if [ -z "$github_repo" ]; then github_repo="https://github.com/${github_user}/${repo_name}.git"; fi else @@ -72,6 +77,11 @@ echo "" echo "Preparing a user config for:" echo "* MCU Board: ${board}" echo "* Shield: ${shield}" +if [ "$copy_keymap" == "yes" ]; then + echo "* Copy Keymap?: ✓" +else + echo "* Copy Keymap?: ❌" +fi if [ -n "$github_repo" ]; then echo "* GitHub Repo To Push (please create this in GH first!): ${github_repo}" fi @@ -87,14 +97,22 @@ fi git clone --single-branch $repo_path ${repo_name} cd ${repo_name} +pushd config + +curl -O "https://raw.githubusercontent.com/zmkfirmware/zmk/main/app/boards/shields/${shield}/${shield}.conf" + +if [ "$copy_keymap" == "yes" ]; then + curl -O "https://raw.githubusercontent.com/zmkfirmware/zmk/main/app/boards/shields/${shield}/${shield}.keymap" +fi + +popd + sed -i \ -e "s/BOARD_NAME/$board/" \ -e "s/SHIELD_NAME/$shield/" \ -e "s/KEYBOARD_TITLE/$shield_title/" \ .github/workflows/build.yml -mv config/prj.conf "config/${shield}.conf" - rm -rf .git git init . git add . -- cgit v1.2.3 From 5bfa4ba3ff70cffc1c98c624fd056988a9075f98 Mon Sep 17 00:00:00 2001 From: Kellen Carey Date: Fri, 7 Aug 2020 08:58:07 -0700 Subject: Update dev-setup.md --- docs/docs/dev-setup.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/docs/dev-setup.md b/docs/docs/dev-setup.md index beabca4..9e4d939 100644 --- a/docs/docs/dev-setup.md +++ b/docs/docs/dev-setup.md @@ -438,13 +438,13 @@ ZMK treats keyboards that take a MCU addon board as [shields](https://docs.zephy Given the following: - MCU Board: Proton-C -- Keyboard PCB: kyria +- Keyboard PCB: kyria_left - Keymap: default You can build ZMK with the following: ```sh -west build -b proton_c -- -DSHIELD=kyria -DKEYMAP=default +west build -b proton_c -- -DSHIELD=kyria_left -DKEYMAP=default ``` ### Keyboard With Onboard MCU @@ -453,13 +453,13 @@ Keyboards with onboard MCU chips are simply treated as the [board](https://docs. Given the following: -- Keyboard: Planck +- Keyboard: Planck (rev6) - Keymap: default you can build ZMK with the following: ```sh -west build -b planck -- -DKEYMAP=default +west build -b planck_rev6 -- -DKEYMAP=default ``` ## Flashing -- cgit v1.2.3 From 726fb4b76fdcf814787f6b9474bdc40b42c80699 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Fri, 7 Aug 2020 15:04:20 -0400 Subject: Better default configs. --- app/boards/shields/kyria/kyria.conf | 6 ++++++ app/boards/shields/lily58/lily58.conf | 2 ++ 2 files changed, 8 insertions(+) diff --git a/app/boards/shields/kyria/kyria.conf b/app/boards/shields/kyria/kyria.conf index e69de29..f4ab45a 100644 --- a/app/boards/shields/kyria/kyria.conf +++ b/app/boards/shields/kyria/kyria.conf @@ -0,0 +1,6 @@ +# Uncomment these two line to add support for encoders to your firmware +# CONFIG_EC11=y +# CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y + +# Uncomment the following line to enable the Kyria OLED Display +# CONFIG_ZMK_DISPLAY=y diff --git a/app/boards/shields/lily58/lily58.conf b/app/boards/shields/lily58/lily58.conf index e69de29..73f0d9d 100644 --- a/app/boards/shields/lily58/lily58.conf +++ b/app/boards/shields/lily58/lily58.conf @@ -0,0 +1,2 @@ +# Uncomment the following line to enable the Lily58 OLED Display +# CONFIG_ZMK_DISPLAY=y -- cgit v1.2.3 From 14eef91da1d2f9f93ba66d9728408b1a12d37758 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Fri, 7 Aug 2020 15:05:20 -0400 Subject: Better user setup docs. --- docs/docs/assets/user-setup/firmware-archive.png | Bin 0 -> 13312 bytes .../docs/assets/user-setup/github-actions-link.png | Bin 0 -> 10573 bytes docs/docs/user-setup.md | 65 +++++++++++++++++++-- docs/sidebars.js | 2 +- 4 files changed, 61 insertions(+), 6 deletions(-) create mode 100644 docs/docs/assets/user-setup/firmware-archive.png create mode 100644 docs/docs/assets/user-setup/github-actions-link.png diff --git a/docs/docs/assets/user-setup/firmware-archive.png b/docs/docs/assets/user-setup/firmware-archive.png new file mode 100644 index 0000000..9cb6f7d Binary files /dev/null and b/docs/docs/assets/user-setup/firmware-archive.png differ diff --git a/docs/docs/assets/user-setup/github-actions-link.png b/docs/docs/assets/user-setup/github-actions-link.png new file mode 100644 index 0000000..c12483b Binary files /dev/null and b/docs/docs/assets/user-setup/github-actions-link.png differ diff --git a/docs/docs/user-setup.md b/docs/docs/user-setup.md index e90bef8..90886dc 100644 --- a/docs/docs/user-setup.md +++ b/docs/docs/user-setup.md @@ -6,6 +6,7 @@ sidebar_label: Installing ZMK import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; +import Image from '@theme/IdealImage'; Unlike other keyboard firmwares, ZMK Firmware has been built from the ground up to allow users to manage their own keyboard configurations, including keymaps, specific hardware details, etc. all outside of the @@ -41,6 +42,10 @@ The remainder of this guide assumes the following prequisites: 1. You have an active, working [GitHub](https://github.com/) account. 1. You have installed and configured the [`git`](https://git-scm.com/) version control tool. +:::note +If you need to, a quick read of [Learn The Basics Of Git In Under 10 Minutes](https://www.freecodecamp.org/news/learn-the-basics-of-git-in-under-10-minutes-da548267cc91/) will help you get started. +::: + ## GitHub Repo Before running the setup script, you will first need to create a new GitHub repository to host the config. @@ -101,6 +106,18 @@ Keyboard Shield Selection: Pick an keyboard: ``` +### Keymap Customization + +At the next prompt, you have an opportunity to decide if you want the stock keymap file copied in +for further customization: + +``` +Copy in the stock keymap for customization? [Yn]: +``` + +Hit `Enter` or type `yes`/`y` to accept this. If you want to keep the stock keymap, or write a keymap +from scratch, type in `no`/`n`. + ### GitHub Details In order to have your new configuration automatically pushed, and then built using GitHub Actions, enter @@ -108,8 +125,8 @@ some information about your particular GitHub info: ``` GitHub Username (leave empty to skip GitHub repo creation): petejohanson -GitHub Repo Name [zmk-config]: -GitHub Repo [https://github.com/petejohanson/zmk-config.git]: +GitHub Repo Name: zmk-config +GitHub Repo: https://github.com/petejohanson/zmk-config.git ``` Only the GitHub username is required; if you are happy with the defaults offered in the square brackets, you can simply hit `Enter`. @@ -137,11 +154,49 @@ push the initial commit. ::: -## Accessing Built Firmware +## Installing The Firmware + +### Download The Archive Once the setup script is complete and the new user config repository has been pushed, GitHub will automatically run the action to build your keyboard firmware files. You can view the actions by clicking on the "Actions" tab on your GitHub repository. -## Keymap Changes +![](./assets/user-setup/github-actions-link.png) + +Once you have loaded the Actions tab, select the top build from the list. Once you load it, the right side panel will include +a link to download the `firmware` upload: + +![](./assets/user-setup/firmware-archive.png) + +Once downloaded, extract the zip and you can verify it should contain one or more `uf2` files, which will be copied to +your keyboard. -TODO: Document how to add your own keymap! +### Installing UF2 Files + +To flash the firmware, first put your board into bootloader mode by double clicking the reset button (either on the MCU board itself, +or the one that is part of your keyboard). The controller should appear in your OS as a new USB storage device. + +Once this happens, copy the correct UF2 file (e.g. left or right if working on a split), and paste it onto the root of that USB mass +storage device. One the flash is complete, the controller should automatically restart, and load your newfly flashed firmware. + +## Customization + +### Configuration Changes + +The setup script creates a `config/.conf` file that allows you to add additional configuration options to +control what features and options are built into your firmware. Opening that file with your text editor you should see +various config settings that can be commented/uncommented to modify how your firmware is built. + +### Keymap + +Once you have the basic user config completed, you can find the file in `config/.keymap` and customize from there. +Refer to the [Keymap](/docs/feature/keymaps) documentation to learn more. + +### Publishing + +After making any changes you want, you should commit the changes and then push them to GitHub. That will trigger a new +GitHub Actions job to build your firmware which you can download once it completes. + +:::note +If you need to, a review of [Learn The Basics Of Git In Under 10 Minutes](https://www.freecodecamp.org/news/learn-the-basics-of-git-in-under-10-minutes-da548267cc91/) will help you get these steps right. +::: diff --git a/docs/sidebars.js b/docs/sidebars.js index f625672..43d4ea7 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -1,6 +1,6 @@ module.exports = { someSidebar: { - "Getting Started": ["intro", "hardware", "user-setup", "faq"], + "Getting Started": ["intro", "hardware", "faq", "user-setup"], Features: [ "feature/keymaps", "feature/displays", -- cgit v1.2.3 From 5418918e138650273435c8d8ec93259722dcc982 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Fri, 7 Aug 2020 15:15:04 -0400 Subject: Explicitly use bash. --- docs/docs/user-setup.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docs/user-setup.md b/docs/docs/user-setup.md index 90886dc..11b47f6 100644 --- a/docs/docs/user-setup.md +++ b/docs/docs/user-setup.md @@ -69,14 +69,14 @@ values={[ ``` -sh -c "$(curl -fsSL https://zmkfirmware.dev/setup.sh)" +bash -c "$(curl -fsSL https://zmkfirmware.dev/setup.sh)" ``` ``` -sh -c "$(wget https://zmkfirmware.dev/setup.sh -O -)" +bash -c "$(wget https://zmkfirmware.dev/setup.sh -O -)" ``` -- cgit v1.2.3 From 4b310abb3de8fed1080ced9d0466a21a4955463a Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Fri, 7 Aug 2020 15:30:37 -0400 Subject: Remove broken import. --- docs/docs/user-setup.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/docs/user-setup.md b/docs/docs/user-setup.md index 11b47f6..a279020 100644 --- a/docs/docs/user-setup.md +++ b/docs/docs/user-setup.md @@ -6,7 +6,6 @@ sidebar_label: Installing ZMK import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; -import Image from '@theme/IdealImage'; Unlike other keyboard firmwares, ZMK Firmware has been built from the ground up to allow users to manage their own keyboard configurations, including keymaps, specific hardware details, etc. all outside of the -- cgit v1.2.3 From 3b841c65bb264ec4a512ac564a0c4d0daa636cee Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Fri, 7 Aug 2020 15:58:09 -0400 Subject: Typo fix (thanks @Nicell). --- docs/docs/user-setup.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/user-setup.md b/docs/docs/user-setup.md index a279020..b79b573 100644 --- a/docs/docs/user-setup.md +++ b/docs/docs/user-setup.md @@ -176,7 +176,7 @@ To flash the firmware, first put your board into bootloader mode by double click or the one that is part of your keyboard). The controller should appear in your OS as a new USB storage device. Once this happens, copy the correct UF2 file (e.g. left or right if working on a split), and paste it onto the root of that USB mass -storage device. One the flash is complete, the controller should automatically restart, and load your newfly flashed firmware. +storage device. Once the flash is complete, the controller should automatically restart, and load your newfly flashed firmware. ## Customization -- cgit v1.2.3 From dd8deceed02b9d439eca3bc10fdde5b5d0fb9c6e Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Fri, 7 Aug 2020 16:29:52 -0400 Subject: Add basic layer behavior docs. --- docs/docs/behavior/layers.md | 41 +++++++++++++++++++++++++++++++++++++++++ docs/sidebars.js | 2 +- 2 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 docs/docs/behavior/layers.md diff --git a/docs/docs/behavior/layers.md b/docs/docs/behavior/layers.md new file mode 100644 index 0000000..2388caf --- /dev/null +++ b/docs/docs/behavior/layers.md @@ -0,0 +1,41 @@ +--- +title: Layers +--- + +## Summary + +Often, you may want a certain key position to alter which layers are enabled, change the default layer, etc. +Some of those behaviors are still in the works; the ones that are working now are documented here. + +## Defines To Refer To Layers + +When working with layers, you may have several different key positions with bindings that enable/disable those layers. +To make it easier to refer to those layers in your key bindings, and to change which layers are where later, you can +add a set of `#define`s at the top of your keymap file, and use those layer in your keymap. + +For example, if you have three layers, you can add the following to the top of your keymap: + +``` +#define DEFAULT 0 +#define LOWER 1 +#define RAISE 2 +``` + +This allows you to use those defines, e.g. `LOWER` later in your keymap. + +## Momentary Layer + +The "momentary layer" behavior allows you to enable a layer while a certain key is pressed. Immediately upon +activation of the key, the layer is enabled, and immediately open release of the key, the layer is disabled +again. + +### Behavior Binding + +- Reference: `&mo` +- Parameter: The layer number to enable/disable, e.g. `1` + +Example: + +``` +&mo LOWER +``` diff --git a/docs/sidebars.js b/docs/sidebars.js index 43d4ea7..7b04864 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -7,7 +7,7 @@ module.exports = { "feature/encoders", "feature/underglow", ], - Behaviors: ["behavior/key-press"], + Behaviors: ["behavior/key-press", "behavior/layers"], Development: [ "dev-clean-room", "dev-setup", -- cgit v1.2.3 From b25133cbefbeecbdde0ba6206d9cd54d7f2c1a12 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Fri, 7 Aug 2020 16:45:11 -0400 Subject: Add a layer diagram. * Original diagram from Thomas Baart, used with permission. --- docs/docs/assets/features/keymaps/layer-diagram.png | Bin 0 -> 53975 bytes docs/docs/feature/keymaps.md | 6 ++++-- 2 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 docs/docs/assets/features/keymaps/layer-diagram.png diff --git a/docs/docs/assets/features/keymaps/layer-diagram.png b/docs/docs/assets/features/keymaps/layer-diagram.png new file mode 100644 index 0000000..7b42daa Binary files /dev/null and b/docs/docs/assets/features/keymaps/layer-diagram.png differ diff --git a/docs/docs/feature/keymaps.md b/docs/docs/feature/keymaps.md index 3b8ebb8..020df17 100644 --- a/docs/docs/feature/keymaps.md +++ b/docs/docs/feature/keymaps.md @@ -39,11 +39,13 @@ Like many mechanical keyboard firmwares, ZMK keymaps are composed of a collectio minimum of at least one layer that is the default, usually near the bottom of the "stack". Each layer in ZMK contains a set of bindings that bind a certain behavior to a certain key position in that layer. +| ![Diagram of three layers](../assets/features/keymaps/layer-diagram.png) | +| :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | +| _A simplified diagram showing three layers. The layout of each layer is the same (they all contain four keys), but the behavior bindings within each layer can be different._ | + In addition to the base default layer (which can be changed), certain bound behaviors may also enable/disable additional layers "on top" of the default layer. -**TODO**: A diagram to help visualize layers - When a key location is pressed/released, the stack of all active layers from "top to bottom" is used, and the event is sent to the behavior bound at that position in each layer, for it to perform whatever actions it wants to in reaction to the event. Those behaviors can choose to "handle" the event, and stop -- cgit v1.2.3 From 5039a508311bcd74c1aaef7542c3b6e1c6a01929 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Fri, 7 Aug 2020 23:35:48 -0400 Subject: Tweak git usage for backwards compatibility. * Closes #76 --- docs/static/setup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/static/setup.sh b/docs/static/setup.sh index a122994..1a72224 100644 --- a/docs/static/setup.sh +++ b/docs/static/setup.sh @@ -120,7 +120,7 @@ git commit -m "Initial User Config." if [ -n "$github_repo" ]; then git remote add origin "$github_repo" - git push --set-upstream origin $(git branch --show-current) + git push --set-upstream origin $(git symbolic-ref --short HEAD) # TODO: Support determing the actions URL when non-https:// repo URL is used. if [ "${github_repo}" != "${github_repo#https://}" ]; then -- cgit v1.2.3 From 85d35c7ff987f58c2f43ae6eae0387d923124d4a Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Sat, 8 Aug 2020 12:25:54 -0400 Subject: Tweak the pip PATH callouts. --- docs/docs/dev-setup.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docs/dev-setup.md b/docs/docs/dev-setup.md index 9e4d939..016b14c 100644 --- a/docs/docs/dev-setup.md +++ b/docs/docs/dev-setup.md @@ -188,7 +188,7 @@ West can be installed by using the `pip` python package manager. pip3 install --user -U west ``` -:::tip pip user packages +:::danger pip user packages If you haven't done so yet, you may need to add the Python Pip user package directory to your `PATH`, e.g.: ``` @@ -306,7 +306,7 @@ cd zmk west init -l app/ ``` -:::note +:::caution Command Not Found? If you encounter errors like `command not found: west` then your `PATH` environment variable is likely missing the Python 3 user packages directory. See the [West Build Command](#west-build-command) section again for links to how to do this -- cgit v1.2.3 From 483530e0ad8c882d4c29f397f620e578efd5ee9d Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Sat, 8 Aug 2020 17:10:12 -0400 Subject: Basic key press/consumer press behavior docs. --- docs/docs/behavior/key-press.md | 58 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/docs/docs/behavior/key-press.md b/docs/docs/behavior/key-press.md index 8a69c4f..08296bb 100644 --- a/docs/docs/behavior/key-press.md +++ b/docs/docs/behavior/key-press.md @@ -2,4 +2,60 @@ title: Key Presses --- -TODO: Docs on key press behavior +## Summary + +The most basic of behaiors, is the ability to send certain keycode presses and releases in response to activating +a certain key. + +For reference on keycode values, see the [USB HID Usage Tables](https://www.usb.org/document-library/hid-usage-tables-12). + +## Keycode Defines + +To make it easier to encode the HID keycode numeric values, most keymaps include +the [`dt-bindings/zmk/keys.h`](https://github.com/zmkfirmware/zmk/blob/main/app/include/dt-bindings/zmk/keys.h) header +provided by ZMK near the top: + +``` +#include +``` + +Doing so makes a set of defines such as `A`, `NUM_1`, etc. available for use with these behaviors + +:::note +There is an [open issue](https://github.com/zmkfirmware/zmk/issues/21) to provide a more comprehensive, and +complete set of defines for the full keypad and consumer usage pages in the future for ZMK. +::: + +## Keypad Key Press + +The "keypad key press" behavior sends standard keypad keycodes on press/release. + +### Behavior Binding + +- Reference: `&kp` +- Parameter: The keycode usage ID from the keypad usage page, e.g. `4` or `A` + +Example: + +``` +&kp A +``` + +## Consumer Key Press + +The "consumer key press" behavior allows you to send "consumer" usage page keycodes on press/release. +These are mostly used for media and power related keycodes, such as sending "Pause", "Scan Track Next", +"Scan Track Previous", etc. + +There are a subset of the full consumer usage IDs found in the `keys.h` include, prefixed with `M_`, e.g. `M_PREV`. + +### Behavior Binding + +- Reference: `&cp` +- Parameter: The keycode usage ID from the consumer usage page, e.g. `M_PREV` or `M_EJCT` + +Example: + +``` +&cp M_PREV +``` -- cgit v1.2.3 From e2848c66c305442badd2b21a414c1a8fe89cd4fd Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Sat, 8 Aug 2020 17:28:00 -0400 Subject: Fix to archive the .hex files for proton-c build. * Closes #77. --- docs/static/setup.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/static/setup.sh b/docs/static/setup.sh index 1a72224..327fc84 100644 --- a/docs/static/setup.sh +++ b/docs/static/setup.sh @@ -113,6 +113,11 @@ sed -i \ -e "s/KEYBOARD_TITLE/$shield_title/" \ .github/workflows/build.yml +if [ "$board" == "proton_c" ]; then + # Proton-C board still fa + sed -i -e "s/uf2/hex/g" .github/workflows/build.yml +fi + rm -rf .git git init . git add . -- cgit v1.2.3 From c92f114efe14e1ad7f7fafbb2f3cc402cefa1bbe Mon Sep 17 00:00:00 2001 From: Nick Date: Sat, 8 Aug 2020 17:23:11 -0500 Subject: Add lighting behavior docs --- docs/docs/behavior/lighting.md | 50 ++++++++++++++++++++++++++++++++++++++++++ docs/sidebars.js | 6 ++++- 2 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 docs/docs/behavior/lighting.md diff --git a/docs/docs/behavior/lighting.md b/docs/docs/behavior/lighting.md new file mode 100644 index 0000000..432960e --- /dev/null +++ b/docs/docs/behavior/lighting.md @@ -0,0 +1,50 @@ +--- +title: Lighting +--- + +## Summary + +Lighting is often used for either aesthetics or for the practical purposes of lighting up keys in the dark. +Currently ZMK supports RGB underglow, which can be changed and configured using its behavior. + +## RGB Action Defines + +RGB actions defines are provided through the [`dt-bindings/zmk/rgb.h`](https://github.com/zmkfirmware/zmk/blob/main/app/include/dt-bindings/zmk/rgb.h) header, +which is added at the top of the keymap file: + +``` +#include +``` + +This will allow you to reference the actions defined in this header such as `RGB_TOG`. + +Here is a table describing the action for each define: + +| Define | Action | +|-----------|-----------------------------------------------------------| +| `RGB_TOG` | Toggles the RGB feature on and off | +| `RGB_HUI` | Increases the hue of the RGB feature | +| `RGB_HUD` | Decreases the hue of the RGB feature | +| `RGB_SAI` | Increases the saturation of the RGB feature | +| `RGB_SAD` | Decreases the saturation of the RGB feature | +| `RGB_BRI` | Increases the brightness of the RGB feature | +| `RGB_BRD` | Decreases the brightness of the RGB feature | +| `RGB_SPI` | Increases the speed of the RGB feature effect's animation | +| `RGB_SPD` | Decreases the speed of the RGB feature effect's animation | +| `RGB_EFF` | Cycles the RGB feature's effect forwards | +| `RGB_EFR` | Cycles the RGB feature's effect reverse | + +## RGB Underglow + +The "RGB underglow" behavior completes an RGB action given on press. + +### Behavior Binding + +- Reference: `&rgb_ug` +- Parameter: The RGB action define, e.g. `RGB_TOG` or `RGB_BRI` + +Example: + +``` +&rgb_ug RGB_TOG +``` \ No newline at end of file diff --git a/docs/sidebars.js b/docs/sidebars.js index 7b04864..1bd0358 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -7,7 +7,11 @@ module.exports = { "feature/encoders", "feature/underglow", ], - Behaviors: ["behavior/key-press", "behavior/layers"], + Behaviors: [ + "behavior/key-press", + "behavior/layers", + "behavior/lighting", + ], Development: [ "dev-clean-room", "dev-setup", -- cgit v1.2.3 From d901a0061dec7abe5d5cd29c616abcda110df9b1 Mon Sep 17 00:00:00 2001 From: Nick Date: Sat, 8 Aug 2020 19:02:00 -0500 Subject: Add underglow feature docs + DT fixes --- app/boards/shields/kyria/boards/nice_nano.overlay | 1 - app/boards/shields/kyria/kyria.conf | 3 + docs/docs/feature/underglow.md | 116 +++++++++++++++++++++- 3 files changed, 118 insertions(+), 2 deletions(-) diff --git a/app/boards/shields/kyria/boards/nice_nano.overlay b/app/boards/shields/kyria/boards/nice_nano.overlay index fe07d17..f51ecfe 100644 --- a/app/boards/shields/kyria/boards/nice_nano.overlay +++ b/app/boards/shields/kyria/boards/nice_nano.overlay @@ -1,6 +1,5 @@ &spi1 { compatible = "nordic,nrf-spi"; - /* Cannot be used together with i2c0. */ status = "okay"; mosi-pin = <6>; // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. diff --git a/app/boards/shields/kyria/kyria.conf b/app/boards/shields/kyria/kyria.conf index f4ab45a..eb27213 100644 --- a/app/boards/shields/kyria/kyria.conf +++ b/app/boards/shields/kyria/kyria.conf @@ -4,3 +4,6 @@ # Uncomment the following line to enable the Kyria OLED Display # CONFIG_ZMK_DISPLAY=y + +# Uncomment the following lineto enable RGB underglow +# CONFIG_ZMK_RGB_UNDERGLOW=y diff --git a/docs/docs/feature/underglow.md b/docs/docs/feature/underglow.md index 0bf9a8d..02aac5d 100644 --- a/docs/docs/feature/underglow.md +++ b/docs/docs/feature/underglow.md @@ -1,5 +1,119 @@ --- title: RGB Underglow +sidebar_label: RGB Underglow --- -TODO: Documentation on RGB underglow. +RGB underglow is a feature used to control "strips" of RGB LEDs. Most of the time this is called underglow and creates a glow underneath the board using a ring of LEDs around the edge, hence the name. However, this can be extended to be used to control anything from a single LED to a long string of LEDs anywhere on the keyboard. + +ZMK supports all the RGB LEDs supported by Zephyr. Here's the current list supported: + +- WS2812-ish (WS2812B, WS2813, SK6812, or compatible) +- APA102 +- LPD880x (LPD8803, LPD8806, or compatible) + +Of the compatible types, the WS2812 LED family is by far the most popular type. Currently each of these types of LEDs are expected to be run using SPI with a couple of exceptions. + +Here you can see the RGB underglow feature in action using WS2812 LEDs. + + + +## Enabling RGB Underglow + +To enable RGB underglow on your board or shield, simply enable the `ZMK_RGB_UNDERGLOW` configuration value in the `.conf` file of your user config directory as such: + +``` +CONFIG_ZMK_RGB_UNDERGLOW=y +``` + +If your board or shield does not have RGB underglow configured, refer to [Adding RGB Underglow to a Board](#adding-rgb-underglow-to-a-board). + +## Configuring RGB Underglow + +There are various Kconfig options used to configure the RGB underglow feature. These can all be set in the `.conf` file. + +| Option | Description | Default | +| ---------------------------- | ---------------------------------------------- | ------- | +| `ZMK_RGB_UNDERGLOW_HUE_STEP` | Hue step in degrees of 360 used by RGB actions | `10` | +| `ZMK_RGB_UNDERGLOW_SAT_STEP` | Saturation step in percent used by RGB actions | `10` | +| `ZMK_RGB_UNDERGLOW_BRT_STEP` | Brightness step in percent used by RGB actions | `10` | + +## Adding RGB Underglow to a Board + +RGB underglow is always added to a board, not a shield. This is a consequence of needing to configure SPI to control the LEDs. +If you have a shield with RGB underglow, you must add a `boards/` directory within your shield folder to define the RGB underglow individually for each board that supports the shield. +Inside the `boards/` folder, you define a `.overlay` for each different board. +For example, the Kyria shield has a `boards/nice_nano.overlay` file that defines the RGB underglow for the `nice_nano` board specifically. + +The first step to adding support for underglow is to select you SPI output. With nRF52 boards, you can just use `&spi1` and define the pins you want to use. +For other boards, you must select an SPI definition that has the `MOSI` pin as your data pin going to your LED strip. + +Here's an example of an nRF52 SPI definition: + +``` +&spi1 { + compatible = "nordic,nrf-spi"; + status = "okay"; + mosi-pin = <6>; + // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. + sck-pin = <5>; + miso-pin = <7>; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <10>; /* number of LEDs */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + }; +}; +``` + +:::info + +If you are configuring SPI for an nRF52840 (or other nRF52) based board, double check that you are using pins that aren't restricted to low frequency I/O. +Ignoring these restrictions may result in poor wireless performance. You can find the list of low frequency I/O pins [here](https://infocenter.nordicsemi.com/index.jsp?topic=%2Fps_nrf52840%2Fpin.html&cp=4_0_0_6_0). + +::: + +Here's another example for a non-nRF52 board on `spi1`: + +``` +&spi1 { + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; + spi-max-frequency = <5250000>; + + /* WS2812 */ + chain-length = <10>; /* number of LEDs */ + spi-one-frame = <0x70>; /* make sure to configure this properly for your SOC */ + spi-zero-frame = <0x40>; /* make sure to configure this properly for your SOC */ + }; +}; +``` + +Once you have your `led_strip` properly defined you need to add it to the root devicetree node `chosen` element: + +``` +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; +``` + +Finally you need to enable the `ZMK_RGB_UNDERGLOW` configuration value in the `.conf` file of your board (or set a default in the `Kconfig.defconfig`): + +``` +CONFIG_ZMK_RGB_UNDERGLOW=y +``` -- cgit v1.2.3 From 8d3ac00f31e30c0ed410035067079468afa56126 Mon Sep 17 00:00:00 2001 From: Nick Date: Sat, 8 Aug 2020 19:02:54 -0500 Subject: Add missing space to comment --- app/boards/shields/kyria/kyria.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/boards/shields/kyria/kyria.conf b/app/boards/shields/kyria/kyria.conf index eb27213..fa98d1c 100644 --- a/app/boards/shields/kyria/kyria.conf +++ b/app/boards/shields/kyria/kyria.conf @@ -5,5 +5,5 @@ # Uncomment the following line to enable the Kyria OLED Display # CONFIG_ZMK_DISPLAY=y -# Uncomment the following lineto enable RGB underglow +# Uncomment the following line to enable RGB underglow # CONFIG_ZMK_RGB_UNDERGLOW=y -- cgit v1.2.3 From fd77fdb63d5fe8a031f0adfa1a4f5964e6f339ef Mon Sep 17 00:00:00 2001 From: Nick Date: Sat, 8 Aug 2020 19:10:10 -0500 Subject: Fix video container size --- docs/docs/feature/underglow.md | 4 +++- docs/src/css/custom.css | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/docs/docs/feature/underglow.md b/docs/docs/feature/underglow.md index 02aac5d..780845a 100644 --- a/docs/docs/feature/underglow.md +++ b/docs/docs/feature/underglow.md @@ -15,7 +15,9 @@ Of the compatible types, the WS2812 LED family is by far the most popular type. Here you can see the RGB underglow feature in action using WS2812 LEDs. - +
+ +
## Enabling RGB Underglow diff --git a/docs/src/css/custom.css b/docs/src/css/custom.css index f46a565..d9cddb8 100644 --- a/docs/src/css/custom.css +++ b/docs/src/css/custom.css @@ -23,3 +23,21 @@ margin: 0 calc(-1 * var(--ifm-pre-padding)); padding: 0 var(--ifm-pre-padding); } + +.video-container { + height: 0; + margin: 0; + margin-bottom: 30px; + overflow: hidden; + padding-bottom: 56.25%; + padding-top: 30px; + position: relative; +} + +.video-container iframe { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} -- cgit v1.2.3 From 3127192720c9da848e14625c34ce3f6329eb0a0f Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Sun, 9 Aug 2020 12:13:39 -0400 Subject: Invoke called behavior after layer change. * If you press a key with a layer active, then deactivate the layer (e.g. releasing a `&mo`, then release the key, we currently may send the wrong key release event. * Fixes #67. --- app/src/keymap.c | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/app/src/keymap.c b/app/src/keymap.c index aee0577..ff494f7 100644 --- a/app/src/keymap.c +++ b/app/src/keymap.c @@ -34,9 +34,6 @@ static u8_t zmk_keymap_layer_default = 0; #define TRANSFORMED_LAYER(node) \ { UTIL_LISTIFY(DT_PROP_LEN(node, bindings), _TRANSFORM_ENTRY, node) }, -static struct zmk_behavior_binding zmk_keymap[ZMK_KEYMAP_LAYERS_LEN][ZMK_KEYMAP_LEN] = { - DT_INST_FOREACH_CHILD(0, TRANSFORMED_LAYER) -}; #if ZMK_KEYMAP_HAS_SENSORS #define _TRANSFORM_SENSOR_ENTRY(idx, layer) \ @@ -50,6 +47,21 @@ static struct zmk_behavior_binding zmk_keymap[ZMK_KEYMAP_LAYERS_LEN][ZMK_KEYMAP_ ({ UTIL_LISTIFY(DT_PROP_LEN(node, sensor_bindings), _TRANSFORM_SENSOR_ENTRY, node) }), \ ({})), +#endif /* ZMK_KEYMAP_HAS_SENSORS */ + +// State + +// When a behavior handles a key position "down" event, we record that layer +// here so that even if that layer is deactivated before the "up", event, we +// still send the release event to the behavior in that layer also. +static u8_t zmk_keymap_active_behavior_layer[ZMK_KEYMAP_LEN]; + +static struct zmk_behavior_binding zmk_keymap[ZMK_KEYMAP_LAYERS_LEN][ZMK_KEYMAP_LEN] = { + DT_INST_FOREACH_CHILD(0, TRANSFORMED_LAYER) +}; + +#if ZMK_KEYMAP_HAS_SENSORS + static struct zmk_behavior_binding zmk_sensor_keymap[ZMK_KEYMAP_LAYERS_LEN][ZMK_KEYMAP_SENSORS_LEN] = { DT_INST_FOREACH_CHILD(0, SENSOR_LAYER) }; @@ -74,11 +86,18 @@ int zmk_keymap_layer_deactivate(u8_t layer) SET_LAYER_STATE(layer, false); }; +bool is_active_position(u32_t position, u8_t layer) +{ + return (zmk_keymap_layer_state & BIT(layer)) == BIT(layer) + || layer == zmk_keymap_layer_default + || zmk_keymap_active_behavior_layer[position] == layer; +} + int zmk_keymap_position_state_changed(u32_t position, bool pressed) { for (int layer = ZMK_KEYMAP_LAYERS_LEN - 1; layer >= zmk_keymap_layer_default; layer--) { - if ((zmk_keymap_layer_state & BIT(layer)) == BIT(layer) || layer == zmk_keymap_layer_default) + if (is_active_position(position, layer)) { struct zmk_behavior_binding *binding = &zmk_keymap[layer][position]; struct device *behavior; @@ -104,8 +123,10 @@ int zmk_keymap_position_state_changed(u32_t position, bool pressed) continue; } else if (ret < 0) { LOG_DBG("Behavior returned error: %d", ret); + zmk_keymap_active_behavior_layer[position] = 0; return ret; } else { + zmk_keymap_active_behavior_layer[position] = pressed ? layer : 0; return ret; } } -- cgit v1.2.3 From be57b10c56885315ad56b78cc2f65a955029bccf Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Mon, 10 Aug 2020 11:29:16 -0400 Subject: Initial Corne shield definition. * Also include a build for Clueboard California macropad. --- .github/workflows/build.yml | 5 ++ app/boards/shields/corne/Kconfig.defconfig | 58 +++++++++++++++++ app/boards/shields/corne/Kconfig.shield | 8 +++ app/boards/shields/corne/boards/nice_nano.overlay | 29 +++++++++ app/boards/shields/corne/corne.conf | 4 ++ app/boards/shields/corne/corne.dtsi | 79 +++++++++++++++++++++++ app/boards/shields/corne/corne.keymap | 22 +++++++ app/boards/shields/corne/corne_left.conf | 2 + app/boards/shields/corne/corne_left.overlay | 18 ++++++ app/boards/shields/corne/corne_right.conf | 2 + app/boards/shields/corne/corne_right.overlay | 23 +++++++ 11 files changed, 250 insertions(+) create mode 100644 app/boards/shields/corne/Kconfig.defconfig create mode 100644 app/boards/shields/corne/Kconfig.shield create mode 100644 app/boards/shields/corne/boards/nice_nano.overlay create mode 100644 app/boards/shields/corne/corne.conf create mode 100644 app/boards/shields/corne/corne.dtsi create mode 100644 app/boards/shields/corne/corne.keymap create mode 100644 app/boards/shields/corne/corne_left.conf create mode 100644 app/boards/shields/corne/corne_left.overlay create mode 100644 app/boards/shields/corne/corne_right.conf create mode 100644 app/boards/shields/corne/corne_right.overlay diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4109161..5eb7971 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -10,10 +10,15 @@ jobs: matrix: board: [proton_c, nice_nano] shield: + - corne_left + - corne_right - kyria_left - kyria_right - lily58_left - lily58_right + include: + - board: proton_c + shield: clueboard_california steps: # To use this repository's private action, # you must check out the repository diff --git a/app/boards/shields/corne/Kconfig.defconfig b/app/boards/shields/corne/Kconfig.defconfig new file mode 100644 index 0000000..8878da3 --- /dev/null +++ b/app/boards/shields/corne/Kconfig.defconfig @@ -0,0 +1,58 @@ + +if SHIELD_CORNE_LEFT + +config ZMK_KEYBOARD_NAME + default "Corne Left" + +endif + + +if SHIELD_CORNE_RIGHT + +config ZMK_KEYBOARD_NAME + default "Corne Right" + +endif + +if SHIELD_CORNE_LEFT || SHIELD_CORNE_RIGHT + +config ZMK_SPLIT + default y + +if ZMK_DISPLAY + +config I2C + default y + +config SSD1306 + default y + +config SSD1306_REVERSE_MODE + default y + +endif # ZMK_DISPLAY + +if LVGL + +config LVGL_HOR_RES + default 128 + +config LVGL_VER_RES + default 32 + +config LVGL_VDB_SIZE + default 64 + +config LVGL_DPI + default 148 + +config LVGL_BITS_PER_PIXEL + default 1 + +choice LVGL_COLOR_DEPTH + default LVGL_COLOR_DEPTH_1 +endchoice + +endif # LVGL + +endif diff --git a/app/boards/shields/corne/Kconfig.shield b/app/boards/shields/corne/Kconfig.shield new file mode 100644 index 0000000..3cac86f --- /dev/null +++ b/app/boards/shields/corne/Kconfig.shield @@ -0,0 +1,8 @@ +# Copyright (c) 2020 Pete Johanson +# SPDX-License-Identifier: MIT + +config SHIELD_CORNE_LEFT + def_bool $(shields_list_contains,corne_left) + +config SHIELD_CORNE_RIGHT + def_bool $(shields_list_contains,corne_right) diff --git a/app/boards/shields/corne/boards/nice_nano.overlay b/app/boards/shields/corne/boards/nice_nano.overlay new file mode 100644 index 0000000..c7c3eb8 --- /dev/null +++ b/app/boards/shields/corne/boards/nice_nano.overlay @@ -0,0 +1,29 @@ +&spi1 { + compatible = "nordic,nrf-spi"; + /* Cannot be used together with i2c0. */ + status = "okay"; + mosi-pin = <6>; + // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. + sck-pin = <5>; + miso-pin = <7>; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "SK6812mini"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <6>; /* There are per-key RGB, but the first 6 are underglow */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/app/boards/shields/corne/corne.conf b/app/boards/shields/corne/corne.conf new file mode 100644 index 0000000..2723b03 --- /dev/null +++ b/app/boards/shields/corne/corne.conf @@ -0,0 +1,4 @@ +# TODO: Add lines about underglow! + +# Uncomment the following line to enable the Corne OLED Display +# CONFIG_ZMK_DISPLAY=y diff --git a/app/boards/shields/corne/corne.dtsi b/app/boards/shields/corne/corne.dtsi new file mode 100644 index 0000000..da48d62 --- /dev/null +++ b/app/boards/shields/corne/corne.dtsi @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2020 Pete Johanson + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <12>; + rows = <4>; +// | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 | | SW6 | SW5 | SW4 | SW3 | SW2 | SW1 | +// | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | +// | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 | +// | SW19 | SW20 | SW21 | | SW21 | SW20 | SW19 | + map = < +RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,12) +RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,12) +RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,12) + RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) + >; + }; + + five_column_transform: keymap_transform_1 { + compatible = "zmk,matrix-transform"; + columns = <10>; + rows = <4>; +// | SW2 | SW3 | SW4 | SW5 | SW6 | | SW6 | SW5 | SW4 | SW3 | SW2 | +// | SW8 | SW9 | SW10 | SW11 | SW12 | | SW12 | SW11 | SW10 | SW9 | SW8 | +// | SW14 | SW15 | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | SW15 | SW14 | +// | SW19 | SW20 | SW21 | | SW21 | SW20 | SW19 | + map = < +RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) +RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) +RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) + RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) + >; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + + diode-direction = "col2row"; + row-gpios + = <&pro_micro_d 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + + }; + + // TODO: RGB node(s) +}; + +&pro_micro_i2c { + status = "okay"; + + ssd1306@3c { + compatible = "solomon,ssd1306fb"; + reg = <0x3c>; + label = "DISPLAY"; + width = <128>; + height = <32>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <63>; + prechargep = <0x22>; + }; +}; diff --git a/app/boards/shields/corne/corne.keymap b/app/boards/shields/corne/corne.keymap new file mode 100644 index 0000000..2f7f38b --- /dev/null +++ b/app/boards/shields/corne/corne.keymap @@ -0,0 +1,22 @@ +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { +// --------------------------------------------------------------------------------------------------------------------------------- +// | ESC | Q | W | E | R | T | | Y | U | I | O | P | \ | +// | TAB | A | S | D | F | G | | H | J | K | L | ; | ' | +// | SHIFT | Z | X | C | V | B | | N | M | , | . | / | CTRL | +// | GUI | DEL | RET | | TAB | BSPC | R-ALT | + bindings = < + &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH + &kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SCLN &kp QUOT + &kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RCTL + &kp LGUI &kp DEL &kp RET &kp TAB &kp BKSP &kp RALT + >; + }; + }; +}; diff --git a/app/boards/shields/corne/corne_left.conf b/app/boards/shields/corne/corne_left.conf new file mode 100644 index 0000000..e51dee4 --- /dev/null +++ b/app/boards/shields/corne/corne_left.conf @@ -0,0 +1,2 @@ +CONFIG_ZMK_SPLIT=y +CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL=y \ No newline at end of file diff --git a/app/boards/shields/corne/corne_left.overlay b/app/boards/shields/corne/corne_left.overlay new file mode 100644 index 0000000..399bddd --- /dev/null +++ b/app/boards/shields/corne/corne_left.overlay @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2020 Pete Johanson + * + * SPDX-License-Identifier: MIT + */ + +#include "corne.dtsi" + +&kscan0 { + col-gpios + = <&pro_micro_a 3 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 2 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 1 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> + ; +}; diff --git a/app/boards/shields/corne/corne_right.conf b/app/boards/shields/corne/corne_right.conf new file mode 100644 index 0000000..a835adc --- /dev/null +++ b/app/boards/shields/corne/corne_right.conf @@ -0,0 +1,2 @@ +CONFIG_ZMK_SPLIT=y +CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL=y \ No newline at end of file diff --git a/app/boards/shields/corne/corne_right.overlay b/app/boards/shields/corne/corne_right.overlay new file mode 100644 index 0000000..652d5ed --- /dev/null +++ b/app/boards/shields/corne/corne_right.overlay @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2020 Pete Johanson + * + * SPDX-License-Identifier: MIT + */ + +#include "corne.dtsi" + +&default_transform { + col-offset = <6>; +}; + +&kscan0 { + col-gpios + = <&pro_micro_d 14 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 1 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 2 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 3 GPIO_ACTIVE_HIGH> + ; +}; + -- cgit v1.2.3 From aebeb7a153eb11e2f53b8def7235a021effd7e1f Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Mon, 10 Aug 2020 12:36:12 -0400 Subject: Updated config note about underglow. --- app/boards/shields/corne/corne.conf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/boards/shields/corne/corne.conf b/app/boards/shields/corne/corne.conf index 2723b03..c8e3c00 100644 --- a/app/boards/shields/corne/corne.conf +++ b/app/boards/shields/corne/corne.conf @@ -1,4 +1,5 @@ -# TODO: Add lines about underglow! +# Uncomment the following line to enable the Corne RGB Underglow +# ZMK_RGB_UNDERGLOW=y # Uncomment the following line to enable the Corne OLED Display # CONFIG_ZMK_DISPLAY=y -- cgit v1.2.3 From 851d54ad960cbcb914cef83c9d1f7fcec49ecf21 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Mon, 10 Aug 2020 12:37:05 -0400 Subject: Add Corne to setup.sh script. --- docs/static/setup.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/static/setup.sh b/docs/static/setup.sh index 327fc84..4208943 100644 --- a/docs/static/setup.sh +++ b/docs/static/setup.sh @@ -37,7 +37,7 @@ echo "" echo "Keyboard Shield Selection:" prompt="Pick an keyboard:" -options=("Kyria" "Lily58") +options=("Kyria" "Lily58" "Corne") PS3="$prompt " # TODO: Add support for "Other" and linking to docs on adding custom shields in user config repos. @@ -48,6 +48,7 @@ select opt in "${options[@]}" "Quit"; do 1 ) shield_title="Kyria" shield="kyria"; split="y"; break;; 2 ) shield_title="Lily58" shield="lily58"; split="y"; break;; + 3 ) shield_title="Corne" shield="corne"; split="y"; break;; # Add link to docs on adding your own custom shield in your ZMK config! # $(( ${#options[@]}+1 )) ) echo "Other!"; break;; -- cgit v1.2.3 From 3f748143796c96468bc3626b6b77397d5fa31eef Mon Sep 17 00:00:00 2001 From: CrossR Date: Mon, 10 Aug 2020 17:43:57 +0100 Subject: Quick doc update. --- docs/docs/dev-boards-shields-keymaps.md | 6 +++--- docs/docs/dev-guide-new-shield.md | 12 ++++++------ docs/docs/dev-posix-board.md | 6 +++--- docs/docs/dev-setup.md | 19 ++++++++++++++----- docs/docs/user-setup.md | 2 +- 5 files changed, 27 insertions(+), 18 deletions(-) diff --git a/docs/docs/dev-boards-shields-keymaps.md b/docs/docs/dev-boards-shields-keymaps.md index bda7d9f..cfe5252 100644 --- a/docs/docs/dev-boards-shields-keymaps.md +++ b/docs/docs/dev-boards-shields-keymaps.md @@ -8,11 +8,11 @@ title: Boards, Shields, and Keymaps The foundational elements needed to get a specific keyboard working with ZMK can be broken down into: - A [KSCAN driver](https://docs.zephyrproject.org/2.3.0/reference/peripherals/kscan.html), which uses `compatible="zmk,kscan-gpio-matrix"` for GPIO matrix based keyboards, or uses `compatible="zmk,kscan-gpio-direct"` for small direct wires. -- An optional matrix transform, which defines how the KSCAN row/column events are translated into logical "key positions". This is required for non-rectangular keyboards/matrixes, where the key positions don't naturally follow the row/columns from the GPIO matrix. +- An optional matrix transform, which defines how the KSCAN row/column events are translated into logical "key positions". This is required for non-rectangular keyboards/matrices, where the key positions don't naturally follow the row/columns from the GPIO matrix. - A keymap, which binds each key position to a behavior, e.g. key press, mod-tap, momentary layer, in a set of layers. -These three core architectural elements are defined per-keyboard, and _where_ they are defined depeneds on the specifics of how that -keyboard works. For an overview on the general concepts of boards and shields, please see the [FAQs on boards and sheilds](/docs/faq#why-boards-and-shields--why-not-just-keyboard). +These three core architectural elements are defined per-keyboard, and _where_ they are defined depends on the specifics of how that +keyboard works. For an overview on the general concepts of boards and shields, please see the [FAQs on boards and shields](/docs/faq#why-boards-and-shields--why-not-just-keyboard). ## Self-Contained Keyboard diff --git a/docs/docs/dev-guide-new-shield.md b/docs/docs/dev-guide-new-shield.md index d562033..1119806 100644 --- a/docs/docs/dev-guide-new-shield.md +++ b/docs/docs/dev-guide-new-shield.md @@ -11,14 +11,14 @@ The high level steps are: - Create a new shield directory. - Add the base Kconfig files. - Add the shield overlay file to define the [KSCAN driver]() for detecting key press/release. -- (Optional) Add the mateix transform for mapping KSCAN row/coluk values to sane key positions. This is needed for non-rectangular keyboards, or where the underlying row/column pin arrangement does not map one to one with logical locations on the keyboard. +- (Optional) Add the matrix transform for mapping KSCAN row/column values to sane key positions. This is needed for non-rectangular keyboards, or where the underlying row/column pin arrangement does not map one to one with logical locations on the keyboard. - Add a default keymap, which users can override in their own configs as needed. It may be helpful to review the upstream [shields documentation](https://docs.zephyrproject.org/2.3.0/guides/porting/shields.html#shields) to get a proper understanding of the underlying system before continuing. ## New Shield Directory -Shields for Zephyr applications go into the `boards/shields/` directory; since ZMK's Zephyr appliction linves in the `app/` subdirectory of the repository, that means the new shield directory should be: +Shields for Zephyr applications go into the `boards/shields/` directory; since ZMK's Zephyr application lives in the `app/` subdirectory of the repository, that means the new shield directory should be: ```bash mkdir app/boards/shields/ @@ -60,7 +60,7 @@ endif ## Shield Overlay -The `.overlay` is the devicetree description of the keyboard shield that is merged with the primary board devicetree description before the build. For ZMK, this file at a minumum should include the [chosen]() node named `zmk,kscan` that refernces a KSCAN driver instance. For a simple 3x3 macropad matrix, +The `.overlay` is the devicetree description of the keyboard shield that is merged with the primary board devicetree description before the build. For ZMK, this file at a minimum should include the [chosen]() node named `zmk,kscan` that references a KSCAN driver instance. For a simple 3x3 macropad matrix, this might look something like: ``` @@ -97,7 +97,7 @@ Internally ZMK translates all row/column events into "key position" events to ma 1. For non rectangular keyboards with thumb clusters, non `1u` locations, etc. A "key position" is the numeric index (zero-based) of a given key, which identifies -the logical key location as percieved by the end user. All _keymap_ mappings actually bind behaviors to _key positions_, not to row/column values. +the logical key location as perceived by the end user. All _keymap_ mappings actually bind behaviors to _key positions_, not to row/column values. _Without_ a matrix transform, that intentionally map each key position to the row/column pair that position corresponds to, the default equation to determine that is: @@ -141,13 +141,13 @@ RC(7,0) RC(7,1) RC(7,2) RC(7,3) RC(7 Some important things to note: -- The `#include ` is critical. The `RC` macro is used to generate the interanl storage in the matrix transform, and is actually replaced by a C preprocessor before the final devicetree is compiled into ZMK. +- The `#include ` is critical. The `RC` macro is used to generate the internal storage in the matrix transform, and is actually replaced by a C preprocessor before the final devicetree is compiled into ZMK. - `RC(row, column)` is placed sequentially to define what row and column values that position corresponds to. - If you have a keyboard with options for `2u` keys in certain positions, or break away portions, it is a good idea to set the chosen `zmk,matrix_transform` to the default arrangement, and include _other_ possible matrix transform nodes in the devicetree that users can select in their user config by overriding the chosen node. ## Default Keymap -Each keyboard should provide an OOTB default keymap to be used when building the firmware, which can be overriden and customized by user configs. For "shield keyboards", this should be placed in the `app/boards/shields//keymap/keymap.overlay` file. The keymap is configured as an additional devicetree overlay that includes the following: +Each keyboard should provide an OOTB default keymap to be used when building the firmware, which can be overridden and customized by user configs. For "shield keyboards", this should be placed in the `app/boards/shields//keymap/keymap.overlay` file. The keymap is configured as an additional devicetree overlay that includes the following: - A node with `compatible="zmk,layers"` where each child node is a layer with a `bindings` array that binds each key position to a given behavior (e.g. key press, momentarily layer, etc). - A node with `compatible="zmk,keymap"` that references the layers with a `layers` phandle-array property. diff --git a/docs/docs/dev-posix-board.md b/docs/docs/dev-posix-board.md index dc33ea0..e146bf1 100644 --- a/docs/docs/dev-posix-board.md +++ b/docs/docs/dev-posix-board.md @@ -10,7 +10,7 @@ flowing into the handler functions. ## Prerequisites -In order to build targetting the `native_posix` board, you need to setup your system +In order to build targeting the `native_posix` board, you need to setup your system with a compiler that can target 32-bit POSIX. On Debian, you can do this with: @@ -21,7 +21,7 @@ apt install -y gcc-multilib ## Building -To do this, you can build ZMK targetting the +To do this, you can build ZMK targeting the `native_posix` board. ``` @@ -36,4 +36,4 @@ Once built, you can run the firmware locally: ## Virtual Key Events -The virtual key presses are hardcoded in `boards/native_posix.overlay` file. should you want to change the sequence to test various actions like Mod-Tap, etc. +The virtual key presses are hardcoded in `boards/native_posix.overlay` file, should you want to change the sequence to test various actions like Mod-Tap, etc. diff --git a/docs/docs/dev-setup.md b/docs/docs/dev-setup.md index 016b14c..56b9adc 100644 --- a/docs/docs/dev-setup.md +++ b/docs/docs/dev-setup.md @@ -34,7 +34,7 @@ A unix-like environment with the following base packages installed: -On Debian and Ubuntu, we'll use apt to install our base dependencies: +On Debian and Ubuntu, we'll use `apt` to install our base dependencies: First, if you haven't updated recently, or if this is a new install, you should update to get the latest package information: @@ -200,7 +200,7 @@ source ~/.bashrc ### Toolchain Installation -The toolchain provides the compiler, linker, etc necessary to build for the target +The toolchain provides the compiler, linker, etc., necessary to build for the target platform. @@ -217,7 +217,7 @@ wget -q "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v${ZSDK_ rm "zephyr-toolchain-arm-${ZSDK_VERSION}-setup.run" ``` -The installation will prompt with several questions about installation location, and creating a default `~/.zephyrrc` for you with various variables. The defaults shouldn normally work as expected. +The installation will prompt with several questions about installation location, and creating a default `~/.zephyrrc` for you with various variables. The defaults should normally work as expected. @@ -252,11 +252,20 @@ wget -q "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v${ZSDK_ rm "zephyr-toolchain-arm-\${ZSDK_VERSION}-setup.run" ``` -The installation will prompt with several questions about installation location, and creating a default `~/.zephyrrc` for you with various variables. The defaults shouldn normally work as expected. +The installation will prompt with several questions about installation location, and creating a default `~/.zephyrrc` for you with various variables. The defaults should normally work as expected. +:::note +If you intend to build firmware straight away, make sure to correctly setup the current shell. + +Notes on setting this up can be found in the [Environment Variables](#environment-variables) section. +The transient instructions can be used to setup the current shell, and the automatic instructions can setup any newly made shells automatically. + +The transient instructions must be run to build firmware using the current shell. +::: + #### GNU ARM Embedded Since the Zephyr™ SDK is not available for Windows, we recommending following the steps to install the [GNU ARM Embedded](https://docs.zephyrproject.org/latest/getting_started/toolchain_3rd_party_x_compilers.html#gnu-arm-embedded). @@ -275,7 +284,7 @@ wget -q "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v${ZSDK_ rm "zephyr-toolchain-arm-\${ZSDK_VERSION}-setup.run" ``` -The installation will prompt with several questions about installation location, and creating a default `~/.zephyrrc` for you with various variables. The defaults shouldn normally work as expected. +The installation will prompt with several questions about installation location, and creating a default `~/.zephyrrc` for you with various variables. The defaults should normally work as expected. diff --git a/docs/docs/user-setup.md b/docs/docs/user-setup.md index b79b573..be230d2 100644 --- a/docs/docs/user-setup.md +++ b/docs/docs/user-setup.md @@ -36,7 +36,7 @@ Following the steps in this guide, you will: ## Prerequisites -The remainder of this guide assumes the following prequisites: +The remainder of this guide assumes the following prerequisites: 1. You have an active, working [GitHub](https://github.com/) account. 1. You have installed and configured the [`git`](https://git-scm.com/) version control tool. -- cgit v1.2.3 From 030f0dbd074164dbe085a423bdf1de68515d8f02 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Mon, 10 Aug 2020 12:51:01 -0400 Subject: Tweak note about per-key RGB. --- app/boards/shields/corne/corne.dtsi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/boards/shields/corne/corne.dtsi b/app/boards/shields/corne/corne.dtsi index da48d62..70d6495 100644 --- a/app/boards/shields/corne/corne.dtsi +++ b/app/boards/shields/corne/corne.dtsi @@ -58,7 +58,7 @@ RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10 }; - // TODO: RGB node(s) + // TODO: per-key RGB node(s)? }; &pro_micro_i2c { -- cgit v1.2.3 From 03a945d4234f009db9e6ac95441c45eec8463198 Mon Sep 17 00:00:00 2001 From: CrossR Date: Mon, 10 Aug 2020 17:51:54 +0100 Subject: Move to correct location. --- docs/docs/dev-setup.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/docs/dev-setup.md b/docs/docs/dev-setup.md index 56b9adc..5cceb73 100644 --- a/docs/docs/dev-setup.md +++ b/docs/docs/dev-setup.md @@ -257,15 +257,6 @@ The installation will prompt with several questions about installation location, -:::note -If you intend to build firmware straight away, make sure to correctly setup the current shell. - -Notes on setting this up can be found in the [Environment Variables](#environment-variables) section. -The transient instructions can be used to setup the current shell, and the automatic instructions can setup any newly made shells automatically. - -The transient instructions must be run to build firmware using the current shell. -::: - #### GNU ARM Embedded Since the Zephyr™ SDK is not available for Windows, we recommending following the steps to install the [GNU ARM Embedded](https://docs.zephyrproject.org/latest/getting_started/toolchain_3rd_party_x_compilers.html#gnu-arm-embedded). @@ -289,6 +280,15 @@ The installation will prompt with several questions about installation location, +:::note +If you intend to build firmware straight away, make sure to correctly setup the current shell. + +Notes on setting this up can be found in the [Environment Variables](#environment-variables) section. +The transient instructions can be used to setup the current shell, and the automatic instructions can setup any newly made shells automatically. + +The transient instructions must be run to build firmware using the current shell. +::: + ### Source Code Next, you'll need to clone the ZMK source repository if you haven't already: -- cgit v1.2.3 From 4da2070a5b896fa2c28d77f0dde8508c739d0deb Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Mon, 10 Aug 2020 12:54:34 -0400 Subject: Add Corne to hardware list. --- docs/docs/hardware.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/docs/hardware.md b/docs/docs/hardware.md index 015b21d..951cee0 100644 --- a/docs/docs/hardware.md +++ b/docs/docs/hardware.md @@ -22,6 +22,7 @@ That being said, there are currently only a few specific [boards](/docs/faq#what ## Keyboard Shields - [Kyria](https://splitkb.com/products/kyria-pcb-kit) (`kyria_left` and `kyria_right`) +- [Corne](https://github.com/foostan/crkbd) (`corne_left` and `corne_right`) - [Lily58](https://github.com/kata0510/Lily58) (`lily58_left` and `lily58_right`) ## Other Hardware -- cgit v1.2.3 From b0c648ad57d138c462fac538c7ea25f88b03e443 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Mon, 10 Aug 2020 22:47:18 -0400 Subject: Revert usage of `read -i` for macOS compat. --- docs/static/setup.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/static/setup.sh b/docs/static/setup.sh index 4208943..ce2fe25 100644 --- a/docs/static/setup.sh +++ b/docs/static/setup.sh @@ -64,10 +64,10 @@ if [ -z "$copy_keymap" ] || [ "$copy_keymap" == "Y" ] || [ "$copy_keymap" == "y" read -e -p "GitHub Username (leave empty to skip GitHub repo creation): " github_user if [ -n "$github_user" ]; then - read -e -i "zmk-config" -p "GitHub Repo Name: " repo_name + read -p "GitHub Repo Name [zmk-config]: " repo_name if [ -z "$repo_name" ]; then repo_name="zmk-config"; fi - read -e -i "https://github.com/${github_user}/${repo_name}.git" -p "GitHub Repo: " github_repo + read -p "GitHub Repo [https://github.com/${github_user}/${repo_name}.git]: " github_repo if [ -z "$github_repo" ]; then github_repo="https://github.com/${github_user}/${repo_name}.git"; fi else -- cgit v1.2.3 From 47dbba21849a136797014f4691c999de28073bf3 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Tue, 11 Aug 2020 08:40:13 -0400 Subject: Fix sed -i usage on macOS, accept 'Y'. --- docs/static/setup.sh | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/static/setup.sh b/docs/static/setup.sh index ce2fe25..27dcb0b 100644 --- a/docs/static/setup.sh +++ b/docs/static/setup.sh @@ -90,7 +90,7 @@ fi echo "" read -p "Continue? [Yn]: " do_it -if [ -n "$do_it" ] && [ "$do_it" != "y" ]; then +if [ -n "$do_it" ] && [ "$do_it" != "y" ] && [ "$do_it" != "Y" ]; then echo "Aborting..." exit fi @@ -108,7 +108,7 @@ fi popd -sed -i \ +sed -i'.orig' \ -e "s/BOARD_NAME/$board/" \ -e "s/SHIELD_NAME/$shield/" \ -e "s/KEYBOARD_TITLE/$shield_title/" \ @@ -116,9 +116,11 @@ sed -i \ if [ "$board" == "proton_c" ]; then # Proton-C board still fa - sed -i -e "s/uf2/hex/g" .github/workflows/build.yml + sed -i'.orig' -e "s/uf2/hex/g" .github/workflows/build.yml fi +rm .github/workflows/*.yml.orig + rm -rf .git git init . git add . -- cgit v1.2.3 From f1f77ad32ae5358dff54181e7bd41c6cdff22810 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Tue, 11 Aug 2020 13:07:15 -0400 Subject: Add a note about upvoting feature requests. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 34854f2..26ab37e 100644 --- a/README.md +++ b/README.md @@ -11,4 +11,4 @@ Check out the website to learn more: https://zmkfirmware.dev/ You can also come join our [ZMK Discord Server](https://zmkfirmware.dev/community/discord/invite) -To review planned features, check out the [enhancement label](https://github.com/zmkfirmware/zmk/issues?q=is%3Aissue+is%3Aopen+label%3Aenhancement) in GitHub. +To review planned features, check out the [enhancement label](https://github.com/zmkfirmware/zmk/issues?q=is%3Aissue+is%3Aopen+label%3Aenhancement) in GitHub. Please free to add 👍 to the issue desciprtion of any requests to upvote the feature. -- cgit v1.2.3 From af5e936b89d5586f52597fb82422cfcfa1e2abbf Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Tue, 11 Aug 2020 14:37:49 -0400 Subject: Typo fixes. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 26ab37e..93f4e83 100644 --- a/README.md +++ b/README.md @@ -11,4 +11,4 @@ Check out the website to learn more: https://zmkfirmware.dev/ You can also come join our [ZMK Discord Server](https://zmkfirmware.dev/community/discord/invite) -To review planned features, check out the [enhancement label](https://github.com/zmkfirmware/zmk/issues?q=is%3Aissue+is%3Aopen+label%3Aenhancement) in GitHub. Please free to add 👍 to the issue desciprtion of any requests to upvote the feature. +To review planned features, check out the [enhancement label](https://github.com/zmkfirmware/zmk/issues?q=is%3Aissue+is%3Aopen+label%3Aenhancement) in GitHub. Please feel free to add 👍 to the issue description of any requests to upvote the feature. -- cgit v1.2.3 From 78059bbbdb2d53957718f38f37b20216baa51566 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Tue, 11 Aug 2020 14:49:43 -0400 Subject: Fix up some incorrect license headers. --- app/boards/arm/nice_nano/board.cmake | 2 +- app/boards/arm/proton_c/CMakeLists.txt | 2 +- app/boards/arm/proton_c/pinmux.c | 2 +- app/drivers/zephyr/ec11_trigger.c | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/boards/arm/nice_nano/board.cmake b/app/boards/arm/nice_nano/board.cmake index 12a1d93..fa847d5 100644 --- a/app/boards/arm/nice_nano/board.cmake +++ b/app/boards/arm/nice_nano/board.cmake @@ -1,4 +1,4 @@ -# SPDX-License-Identifier: Apache-2.0 +# SPDX-License-Identifier: MIT board_runner_args(nrfjprog "--nrf-family=NRF52" "--softreset") include(${ZEPHYR_BASE}/boards/common/blackmagicprobe.board.cmake) diff --git a/app/boards/arm/proton_c/CMakeLists.txt b/app/boards/arm/proton_c/CMakeLists.txt index d1b8108..940af1f 100644 --- a/app/boards/arm/proton_c/CMakeLists.txt +++ b/app/boards/arm/proton_c/CMakeLists.txt @@ -1,4 +1,4 @@ -# SPDX-License-Identifier: Apache-2.0 +# SPDX-License-Identifier: MIT if(CONFIG_PINMUX) zephyr_library() diff --git a/app/boards/arm/proton_c/pinmux.c b/app/boards/arm/proton_c/pinmux.c index 09f3a34..a6aaae0 100644 --- a/app/boards/arm/proton_c/pinmux.c +++ b/app/boards/arm/proton_c/pinmux.c @@ -1,7 +1,7 @@ /* * Copyright (c) 2017 I-SENSE group of ICCS * - * SPDX-License-Identifier: Apache-2.0 + * SPDX-License-Identifier: MIT */ #include diff --git a/app/drivers/zephyr/ec11_trigger.c b/app/drivers/zephyr/ec11_trigger.c index 55acf45..709d1fb 100644 --- a/app/drivers/zephyr/ec11_trigger.c +++ b/app/drivers/zephyr/ec11_trigger.c @@ -1,7 +1,7 @@ /* * Copyright (c) 2016 Intel Corporation * - * SPDX-License-Identifier: Apache-2.0 + * SPDX-License-Identifier: MIT */ #define DT_DRV_COMPAT alps_ec11 -- cgit v1.2.3 From a6ef1cddecda77e0e374a59fb76266df6d00f2bd Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Tue, 11 Aug 2020 16:55:36 -0400 Subject: Add analytics. --- docs/docusaurus.config.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index 44acd69..2c3622f 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -7,6 +7,10 @@ module.exports = { organizationName: "zmkfirmware", // Usually your GitHub org/user name. projectName: "zmk", // Usually your repo name. themeConfig: { + googleAnalytics: { + trackingID: "UA-145201102-2", + anonymizeIP: true, + }, // sidebarCollapsible: false, navbar: { title: "ZMK Firmware", -- cgit v1.2.3 From 45ddd4c2ae6aadfad990a688d1d7e82406f075d8 Mon Sep 17 00:00:00 2001 From: CrossR Date: Tue, 11 Aug 2020 18:07:08 +0100 Subject: Add very basic, untested, Sofle configuration. --- app/boards/shields/sofle/Kconfig.defconfig | 54 ++++++++++++++++++++++ app/boards/shields/sofle/Kconfig.shield | 8 ++++ app/boards/shields/sofle/sofle.conf | 2 + app/boards/shields/sofle/sofle.dtsi | 67 ++++++++++++++++++++++++++++ app/boards/shields/sofle/sofle.keymap | 64 ++++++++++++++++++++++++++ app/boards/shields/sofle/sofle_left.conf | 2 + app/boards/shields/sofle/sofle_left.overlay | 23 ++++++++++ app/boards/shields/sofle/sofle_right.conf | 2 + app/boards/shields/sofle/sofle_right.overlay | 26 +++++++++++ 9 files changed, 248 insertions(+) create mode 100644 app/boards/shields/sofle/Kconfig.defconfig create mode 100644 app/boards/shields/sofle/Kconfig.shield create mode 100644 app/boards/shields/sofle/sofle.conf create mode 100644 app/boards/shields/sofle/sofle.dtsi create mode 100644 app/boards/shields/sofle/sofle.keymap create mode 100644 app/boards/shields/sofle/sofle_left.conf create mode 100644 app/boards/shields/sofle/sofle_left.overlay create mode 100644 app/boards/shields/sofle/sofle_right.conf create mode 100644 app/boards/shields/sofle/sofle_right.overlay diff --git a/app/boards/shields/sofle/Kconfig.defconfig b/app/boards/shields/sofle/Kconfig.defconfig new file mode 100644 index 0000000..4437868 --- /dev/null +++ b/app/boards/shields/sofle/Kconfig.defconfig @@ -0,0 +1,54 @@ + +if SHIELD_SOFLE_LEFT + +config ZMK_KEYBOARD_NAME + default "Sofle Left" + +endif + +if SHIELD_SOFLE_RIGHT + +config ZMK_KEYBOARD_NAME + default "Sofle Right" + +endif + +if SHIELD_SOFLE_LEFT || SHIELD_SOFLE_RIGHT + +if ZMK_DISPLAY + +config I2C + default y + +config SSD1306 + default y + +config SSD1306_REVERSE_MODE + default y + +endif # ZMK_DISPLAY + +if LVGL + +config LVGL_HOR_RES + default 128 + +config LVGL_VER_RES + default 32 + +config LVGL_VDB_SIZE + default 64 + +config LVGL_DPI + default 148 + +config LVGL_BITS_PER_PIXEL + default 1 + +choice LVGL_COLOR_DEPTH + default LVGL_COLOR_DEPTH_1 +endchoice + +endif # LVGL + +endif diff --git a/app/boards/shields/sofle/Kconfig.shield b/app/boards/shields/sofle/Kconfig.shield new file mode 100644 index 0000000..d8d5d75 --- /dev/null +++ b/app/boards/shields/sofle/Kconfig.shield @@ -0,0 +1,8 @@ +# Copyright (c) 2020 Pete Johanson +# SPDX-License-Identifier: MIT + +config SHIELD_SOFLE_LEFT + def_bool $(shields_list_contains,sofle_left) + +config SHIELD_SOFLE_RIGHT + def_bool $(shields_list_contains,sofle_right) diff --git a/app/boards/shields/sofle/sofle.conf b/app/boards/shields/sofle/sofle.conf new file mode 100644 index 0000000..60c20dc --- /dev/null +++ b/app/boards/shields/sofle/sofle.conf @@ -0,0 +1,2 @@ +# Uncomment the following line to enable the Sofle OLED Display +# CONFIG_ZMK_DISPLAY=y diff --git a/app/boards/shields/sofle/sofle.dtsi b/app/boards/shields/sofle/sofle.dtsi new file mode 100644 index 0000000..dfa001c --- /dev/null +++ b/app/boards/shields/sofle/sofle.dtsi @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2020 Pete Johanson + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <16>; + rows = <4>; +// | SW6 | SW5 | SW4 | SW3 | SW2 | SW1 | | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 | +// | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | +// | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 | | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 | +// | SW24 | SW23 | SW22 | SW21 | SW20 | SW19 | | SW19 | SW20 | SW21 | SW22 | SW23 | SW24 | +// | SW29 | SW28 | SW27 | SW26 | SW25 | | SW25 | SW26 | SW27 | SW28 | SW29 | + map = < +RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) +RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) +RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) +RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) + RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,9) RC(4,10) RC(4,11) RC(4,12) RC(4,13) + >; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + + diode-direction = "col2row"; + row-gpios + = <&pro_micro_d 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + + }; +}; + +&pro_micro_i2c { + status = "okay"; + + ssd1306@3c { + compatible = "solomon,ssd1306fb"; + reg = <0x3c>; + label = "DISPLAY"; + width = <128>; + height = <32>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <31>; + segment-remap; + com-invdir; + com-sequential; + prechargep = <0x22>; + }; +}; diff --git a/app/boards/shields/sofle/sofle.keymap b/app/boards/shields/sofle/sofle.keymap new file mode 100644 index 0000000..45c20cb --- /dev/null +++ b/app/boards/shields/sofle/sofle.keymap @@ -0,0 +1,64 @@ +#include +#include + +//TODO: Is the encoder stuff needed on every single layer? + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { +// ------------------------------------------------------------------------------------------------------------ +// | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` | +// | ESC | Q | W | E | R | T | | Y | U | I | O | P | Bkspc | +// | CTRL | A | S | D | F | G | | H | J | K | L | ; | ' | +// | SHIFT | Z | X | C | V | B | | N | M | , | . | / | SHIFT | +// | GUI | ALT | CTRL | LOWER| ENTER | | SPACE | RAISE| CTRL | ALT | GUI | + bindings = < +&kp GRAV &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 &kp GRAV +&kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BKSP +&kp LCTL &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SCLN &kp QUOT +&kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RSFT + &kp LGUI &kp LALT &kp LCTL &mo 1 &kp RET &kp SPC &mo 2 &kp RCTL &kp RALT &kp RGUI + >; + + sensor-bindings = <&inc_dec_cp M_VOLU M_VOLD &inc_dec_kp PGUP PGDN>; + }; + + lower_layer { +// ------------------------------------------------------------------------------------------------------------ +// | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 | +// | | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | F12 | +// | TAB | ! | @ | # | $ | % | | ^ | & | * | ( | ) | | | +// | | = | - | + | { | } | | [ | ] | ; | : | \ | | +// | | | | | | | | | | | | + bindings = < +&trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 +&trans &kp 1 &kp 2 &kp 3 &kp 4 &kp 5 &kp 6 &kp 7 &kp 8 &kp 9 &kp 0 &kp F12 +&kp TAB &kp BANG &kp ATSN &kp HASH &kp CURU &kp PRCT &kp CRRT &kp AMPS &kp KMLT &kp LPRN &kp RPRN &kp PIPE +&trans &kp EQL &kp MINUS &kp KPLS &kp LCUR &kp RCUR &kp LBKT &kp RKBT &kp SCLN &kp COLN &kp BSLH &trans + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + >; + + sensor-bindings = <&inc_dec_cp M_VOLU M_VOLD &inc_dec_kp PGUP PGDN>; + }; + + raise_layer { +// ------------------------------------------------------------------------------------------------------------ +// | | | | | | | | | | | | | | +// | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | | +// | F1 | F2 | F3 | F4 | F5 | F6 | | | <- | ^ | v | -> | | +// | F7 | F8 | F9 | F10 | F11 | F12 | | + | - | = | [ | ] | \ | +// | | | | | | | | | | | | + bindings = < +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans +&kp GRAV &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 &trans +&kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &trans &kp LARW &kp UARW &kp DARW & RARW &trans +&kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp KPLS &kp MINUS &kp EQL &kp LBKT &kp RBKT &kp BSLH + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + >; + }; + + sensor-bindings = <&inc_dec_cp M_VOLU M_VOLD &inc_dec_kp PGUP PGDN>; + }; +}; diff --git a/app/boards/shields/sofle/sofle_left.conf b/app/boards/shields/sofle/sofle_left.conf new file mode 100644 index 0000000..e51dee4 --- /dev/null +++ b/app/boards/shields/sofle/sofle_left.conf @@ -0,0 +1,2 @@ +CONFIG_ZMK_SPLIT=y +CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL=y \ No newline at end of file diff --git a/app/boards/shields/sofle/sofle_left.overlay b/app/boards/shields/sofle/sofle_left.overlay new file mode 100644 index 0000000..bcfb558 --- /dev/null +++ b/app/boards/shields/sofle/sofle_left.overlay @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2020 Pete Johanson + * + * SPDX-License-Identifier: MIT + */ + +#include "sofle.dtsi" + +&kscan0 { + col-gpios + = <&pro_micro_a 1 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 16 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 10 GPIO_ACTIVE_HIGH> + ; +}; + +&left_encoder { + status = "okay"; +}; + diff --git a/app/boards/shields/sofle/sofle_right.conf b/app/boards/shields/sofle/sofle_right.conf new file mode 100644 index 0000000..990cf7c --- /dev/null +++ b/app/boards/shields/sofle/sofle_right.conf @@ -0,0 +1,2 @@ +CONFIG_ZMK_SPLIT=y +CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL=y diff --git a/app/boards/shields/sofle/sofle_right.overlay b/app/boards/shields/sofle/sofle_right.overlay new file mode 100644 index 0000000..133f926 --- /dev/null +++ b/app/boards/shields/sofle/sofle_right.overlay @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2020 Pete Johanson + * + * SPDX-License-Identifier: MIT + */ + +#include "sofle.dtsi" + +&default_transform { + col-offset = <6>; +}; + +&kscan0 { + col-gpios + = <&pro_micro_d 10 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 16 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 1 GPIO_ACTIVE_HIGH> + ; +}; + +&right_encoder { + status = "okay"; +}; -- cgit v1.2.3 From 0624c6c54a3292571229727b3e19088bb155e482 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Wed, 12 Aug 2020 10:20:51 -0400 Subject: State Of The Firmware #1. --- docs/blog/2020-05-24-wip.md | 2 +- docs/blog/2020-08-12-zmk-sotf-1.md | 52 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 docs/blog/2020-08-12-zmk-sotf-1.md diff --git a/docs/blog/2020-05-24-wip.md b/docs/blog/2020-05-24-wip.md index 2ec2956..eaf2b79 100644 --- a/docs/blog/2020-05-24-wip.md +++ b/docs/blog/2020-05-24-wip.md @@ -5,7 +5,7 @@ author: Pete Johanson author_title: Project Creator author_url: https://gitlab.com/petejohanson author_image_url: https://www.gravatar.com/avatar/2001ceff7e9dc753cf96fcb2e6f41110 -tags: [keyboards, firmeware, oss, ble] +tags: [keyboards, firmware, oss, ble] --- This blog is a work-in-progress as I work on basic docs + blog on this nascent keyboard firmware. diff --git a/docs/blog/2020-08-12-zmk-sotf-1.md b/docs/blog/2020-08-12-zmk-sotf-1.md new file mode 100644 index 0000000..2b69535 --- /dev/null +++ b/docs/blog/2020-08-12-zmk-sotf-1.md @@ -0,0 +1,52 @@ +--- +title: ZMK State Of The Firmware \#1 +author: Pete Johanson +author_title: Project Creator +author_url: https://gitlab.com/petejohanson +author_image_url: https://www.gravatar.com/avatar/2001ceff7e9dc753cf96fcb2e6f41110 +tags: [SOTF, keyboards, firmware, oss, ble] +--- + +Welcome to the first ZMK "State Of The Firmware"! + +With interest and Discord activity growing, it seemed important to lay out the progress made recently, current major bugs/showstoppers, and planned next steps. + +## Recent Activity + +There's been lots of various activity in ZMK land! + +- [Nicell](https://github.com/Nicell) (nice!nano creator) contributed initial [RGB Underglow](/docs/feature/underglow) ([#64](https://github.com/zmkfirmware/zmk/pull/64)) support to ZMK. +- Tons of [documentation](/docs) work. +- Refactoring ([#73](https://github.com/zmkfirmware/zmk/pull/73), [#74](https://github.com/zmkfirmware/zmk/pull/74)) of [keymaps](/docs/feature/keymaps) to make them simpler for users. +- Mod-Tap Behavior (docs coming!) is much improved ([#69](https://github.com/zmkfirmware/zmk/pull/69)) and usable now. +- An initial [`setup.sh`](http://localhost:3000/docs/user-setup#user-config-setup-script) script was created, allowing users to quickly bootstrap a "user config" setup and push it to GitHub, where GitHub Actions will build the firmware for you. +- Corne shield ([#80](https://github.com/zmkfirmware/zmk/pull/80)) shield definition was added. +- Initial [encoder](/docs/feature/encoders) support ([#61](https://github.com/zmkfirmware/zmk/pull/61)) was added. + +## Bugs and Showstoppers + +Despite the flurry of activity, there are still some serious bugs and show stoppers that potential ZMK users should be aware of: + +- [Bluetooth Related](https://github.com/zmkfirmware/zmk/issues/58) - There are several key bugs and fixes needed, including one complete show stopper: + - Fully working split wireless is not working. In particular, both split halves can properly pair, but once they do so, pairing with the _central_ host will not work. Workaround: You can currently have both halves pair, and use USB on the central side (Left side right now for Kyria, Corne, Lily58) and receive HID events over USB. + - BT bond information is not currently stored to the devices, so after powering off or restarting your device, users need to re-pair +- USB - There is one important USB related bug which is a showstopper: + - The Zephyr USB stack does not have a built in queue for endpoint data being written. As a result, HID events sent by ZMK are sometimes [dropped, or lost](https://github.com/zmkfirmware/zmk/issues/84). + +## Next Steps + +There's plenty of places to go next! To help keep folks in the loop for what's next, I've created a [Core Functionality](https://github.com/zmkfirmware/zmk/projects/1) project/kanban board in GitHub, where users should be able to get some visibility into items being focused on. + +Of course, at the top of that list currently is the above bugs/showstoppers, and then from there, I hope to: + +- Work on power management. +- Improve our documentation on various aspects of the system, mostly around: + - End user documentation for understanding how to use ZMK, better installation docs, etc. + - Developer focused documentation, so interested contributors can start building out more behaviors and ZMK functionality. +- Implement true "hold" detection, useful for several behaviors such as Mod-Tap and Layer-Tap. +- Hopefully acquire a proper and official USB Product ID for use for the project. +- Fun things that come up along the way! + +## Thanks! + +A big thanks for everyone who has shown interest in the project, tested things, asked questions, and contributed PRs ([Nicell](https://github.com/Nicell), [CrossR](https://github.com/CrossR), [careyk007](https://github.com/careyk007)). -- cgit v1.2.3 From c3b4525d2574bcd0cd03d91b069bd090c01292da Mon Sep 17 00:00:00 2001 From: Cody McGinnis Date: Thu, 13 Aug 2020 00:19:59 -0400 Subject: Fix edit url links for the website. --- docs/docusaurus.config.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index 2c3622f..64f9a45 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -105,12 +105,12 @@ module.exports = { homePageId: "intro", sidebarPath: require.resolve("./sidebars.js"), // Please change this to your repo. - editUrl: "https://githlab.com/zmkproject/zmk/edit/main/docs/", + editUrl: "https://github.com/zmkfirmware/zmk/edit/main/docs/", }, blog: { showReadingTime: true, // Please change this to your repo. - editUrl: "https://gitlab.com/zmkproject/zmk/edit/main/docs/blog/", + editUrl: "https://github.com/zmkfirmware/zmk/edit/main/docs/", }, theme: { customCss: require.resolve("./src/css/custom.css"), -- cgit v1.2.3 From 8b61beb2bbc62f754db670ad77266f84edde041d Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Fri, 14 Aug 2020 16:44:13 -0400 Subject: Bump max paired connections to 2 for central. --- app/Kconfig | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/Kconfig b/app/Kconfig index 4086955..be5a1e4 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -106,6 +106,10 @@ if ZMK_SPLIT_BLE_ROLE_CENTRAL config BT_MAX_CONN default 5 +config BT_MAX_PAIRED + # Bump this everywhere once we support switching active connections! + default 2 + endif config ZMK_SPLIT_BLE_ROLE_PERIPHERAL -- cgit v1.2.3 From 7e8a07e693431adfb64d12262b3c7614920c042c Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Fri, 14 Aug 2020 16:45:05 -0400 Subject: Remove use of printk. --- app/src/ble.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/app/src/ble.c b/app/src/ble.c index 7d986d7..488491c 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -31,11 +31,11 @@ static void connected(struct bt_conn *conn, u8_t err) if (err) { - printk("Failed to connect to %s (%u)\n", addr, err); + LOG_WRN("Failed to connect to %s (%u)", log_strdup(addr), err); return; } - printk("Connected %s\n", addr); + LOG_DBG("Connected %s", log_strdup(addr)); bt_conn_le_param_update(conn, BT_LE_CONN_PARAM(0x0006, 0x000c, 30, 400)); @@ -45,7 +45,7 @@ static void connected(struct bt_conn *conn, u8_t err) if (bt_conn_set_security(conn, BT_SECURITY_L2)) { - printk("Failed to set security\n"); + LOG_ERR("Failed to set security"); } } @@ -55,7 +55,7 @@ static void disconnected(struct bt_conn *conn, u8_t reason) bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr)); - printk("Disconnected from %s (reason 0x%02x)\n", addr, reason); + LOG_DBG("Disconnected from %s (reason 0x%02x)", log_strdup(addr), reason); } static void security_changed(struct bt_conn *conn, bt_security_t level, @@ -67,11 +67,11 @@ static void security_changed(struct bt_conn *conn, bt_security_t level, if (!err) { - printk("Security changed: %s level %u\n", addr, level); + LOG_DBG("Security changed: %s level %u", log_strdup(addr), level); } else { - printk("Security failed: %s level %u err %d\n", addr, level, + LOG_ERR("Security failed: %s level %u err %d", log_strdup(addr), level, err); } } @@ -107,7 +107,7 @@ static void auth_passkey_display(struct bt_conn *conn, unsigned int passkey) bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr)); - printk("Passkey for %s: %06u\n", addr, passkey); + LOG_DBG("Passkey for %s: %06u", log_strdup(addr), passkey); } #ifdef CONFIG_ZMK_BLE_PASSKEY_ENTRY @@ -118,7 +118,7 @@ static void auth_passkey_entry(struct bt_conn *conn) bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr)); - printk("Passkey entry requested for %s\n", addr); + LOG_DBG("Passkey entry requested for %s", log_strdup(addr)); auth_passkey_entry_conn = bt_conn_ref(conn); } @@ -138,7 +138,7 @@ static void auth_cancel(struct bt_conn *conn) passkey_digit = 0; - printk("Pairing cancelled: %s\n", addr); + LOG_DBG("Pairing cancelled: %s", log_strdup(addr)); } static struct bt_conn_auth_cb zmk_ble_auth_cb_display = { @@ -169,14 +169,14 @@ static void zmk_ble_ready(int err) LOG_DBG("ready? %d", err); if (err) { - printk("Bluetooth init failed (err %d)\n", err); + LOG_ERR("Bluetooth init failed (err %d)", err); return; } err = bt_le_adv_start(BT_LE_ADV_CONN_NAME, zmk_ble_ad, ARRAY_SIZE(zmk_ble_ad), NULL, 0); if (err) { - printk("Advertising failed to start (err %d)\n", err); + LOG_ERR("Advertising failed to start (err %d)", err); return; } } @@ -187,7 +187,7 @@ static int zmk_ble_init(struct device *_arg) if (err) { - printk("BLUETOOTH FAILED"); + LOG_ERR("BLUETOOTH FAILED (%d)", err); return err; } -- cgit v1.2.3 From aa4ae90fb7cd7d7e295f9f5d4af8ad63d9bc9715 Mon Sep 17 00:00:00 2001 From: Nick Date: Fri, 14 Aug 2020 21:31:18 -0500 Subject: Add missing configuration values for RGB underglow --- app/boards/shields/corne/corne.conf | 1 + app/boards/shields/kyria/kyria.conf | 1 + docs/docs/feature/underglow.md | 8 ++++++-- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/app/boards/shields/corne/corne.conf b/app/boards/shields/corne/corne.conf index c8e3c00..e96bf5a 100644 --- a/app/boards/shields/corne/corne.conf +++ b/app/boards/shields/corne/corne.conf @@ -1,5 +1,6 @@ # Uncomment the following line to enable the Corne RGB Underglow # ZMK_RGB_UNDERGLOW=y +# CONFIG_WS2812_STRIP=y # Uncomment the following line to enable the Corne OLED Display # CONFIG_ZMK_DISPLAY=y diff --git a/app/boards/shields/kyria/kyria.conf b/app/boards/shields/kyria/kyria.conf index fa98d1c..20aa8c2 100644 --- a/app/boards/shields/kyria/kyria.conf +++ b/app/boards/shields/kyria/kyria.conf @@ -7,3 +7,4 @@ # Uncomment the following line to enable RGB underglow # CONFIG_ZMK_RGB_UNDERGLOW=y +# CONFIG_WS2812_STRIP=y diff --git a/docs/docs/feature/underglow.md b/docs/docs/feature/underglow.md index 780845a..4be752f 100644 --- a/docs/docs/feature/underglow.md +++ b/docs/docs/feature/underglow.md @@ -21,10 +21,12 @@ Here you can see the RGB underglow feature in action using WS2812 LEDs. ## Enabling RGB Underglow -To enable RGB underglow on your board or shield, simply enable the `ZMK_RGB_UNDERGLOW` configuration value in the `.conf` file of your user config directory as such: +To enable RGB underglow on your board or shield, simply enable the `ZMK_RGB_UNDERGLOW` and `CONFIG_X_STRIP` configuration values in the `.conf` file of your user config directory as such: ``` CONFIG_ZMK_RGB_UNDERGLOW=y +# Use the STRIP config specific tot he LEDs you're using +CONFIG_WS2812_STRIP=y ``` If your board or shield does not have RGB underglow configured, refer to [Adding RGB Underglow to a Board](#adding-rgb-underglow-to-a-board). @@ -114,8 +116,10 @@ Once you have your `led_strip` properly defined you need to add it to the root d }; ``` -Finally you need to enable the `ZMK_RGB_UNDERGLOW` configuration value in the `.conf` file of your board (or set a default in the `Kconfig.defconfig`): +Finally you need to enable the `ZMK_RGB_UNDERGLOW` and `CONFIG_X_STRIP` STRIP configuration values in the `.conf` file of your board (or set a default in the `Kconfig.defconfig`): ``` CONFIG_ZMK_RGB_UNDERGLOW=y +# Use the STRIP config specific tot he LEDs you're using +CONFIG_WS2812_STRIP=y ``` -- cgit v1.2.3 From a03b3ab68c5a81dc7c98749241dbfe80e5f1b09b Mon Sep 17 00:00:00 2001 From: Nick Date: Fri, 14 Aug 2020 21:33:33 -0500 Subject: Fix grammar --- app/boards/shields/corne/corne.conf | 2 +- app/boards/shields/kyria/kyria.conf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/boards/shields/corne/corne.conf b/app/boards/shields/corne/corne.conf index e96bf5a..b79385b 100644 --- a/app/boards/shields/corne/corne.conf +++ b/app/boards/shields/corne/corne.conf @@ -1,4 +1,4 @@ -# Uncomment the following line to enable the Corne RGB Underglow +# Uncomment the following lines to enable the Corne RGB Underglow # ZMK_RGB_UNDERGLOW=y # CONFIG_WS2812_STRIP=y diff --git a/app/boards/shields/kyria/kyria.conf b/app/boards/shields/kyria/kyria.conf index 20aa8c2..7a0b5b6 100644 --- a/app/boards/shields/kyria/kyria.conf +++ b/app/boards/shields/kyria/kyria.conf @@ -5,6 +5,6 @@ # Uncomment the following line to enable the Kyria OLED Display # CONFIG_ZMK_DISPLAY=y -# Uncomment the following line to enable RGB underglow +# Uncomment the following lines to enable RGB underglow # CONFIG_ZMK_RGB_UNDERGLOW=y # CONFIG_WS2812_STRIP=y -- cgit v1.2.3 From 2863f150063bc4a31cc819efe973b59b45a10d10 Mon Sep 17 00:00:00 2001 From: Nick Date: Fri, 14 Aug 2020 21:36:11 -0500 Subject: Fix docs typos --- docs/docs/feature/underglow.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/docs/feature/underglow.md b/docs/docs/feature/underglow.md index 4be752f..c6517ce 100644 --- a/docs/docs/feature/underglow.md +++ b/docs/docs/feature/underglow.md @@ -21,11 +21,11 @@ Here you can see the RGB underglow feature in action using WS2812 LEDs. ## Enabling RGB Underglow -To enable RGB underglow on your board or shield, simply enable the `ZMK_RGB_UNDERGLOW` and `CONFIG_X_STRIP` configuration values in the `.conf` file of your user config directory as such: +To enable RGB underglow on your board or shield, simply enable the `ZMK_RGB_UNDERGLOW` and `X_STRIP` configuration values in the `.conf` file of your user config directory as such: ``` CONFIG_ZMK_RGB_UNDERGLOW=y -# Use the STRIP config specific tot he LEDs you're using +# Use the STRIP config specific to the LEDs you're using CONFIG_WS2812_STRIP=y ``` @@ -116,10 +116,10 @@ Once you have your `led_strip` properly defined you need to add it to the root d }; ``` -Finally you need to enable the `ZMK_RGB_UNDERGLOW` and `CONFIG_X_STRIP` STRIP configuration values in the `.conf` file of your board (or set a default in the `Kconfig.defconfig`): +Finally you need to enable the `ZMK_RGB_UNDERGLOW` and `X_STRIP` configuration values in the `.conf` file of your board (or set a default in the `Kconfig.defconfig`): ``` CONFIG_ZMK_RGB_UNDERGLOW=y -# Use the STRIP config specific tot he LEDs you're using +# Use the STRIP config specific to the LEDs you're using CONFIG_WS2812_STRIP=y ``` -- cgit v1.2.3 From 4acfa8d7ef2009ce966f6e58719d44abb193f659 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Fri, 14 Aug 2020 23:26:03 -0400 Subject: Add DCDC setting for nano. --- app/boards/arm/nice_nano/Kconfig | 6 ++++++ app/boards/arm/nice_nano/Kconfig.board | 1 + 2 files changed, 7 insertions(+) create mode 100644 app/boards/arm/nice_nano/Kconfig diff --git a/app/boards/arm/nice_nano/Kconfig b/app/boards/arm/nice_nano/Kconfig new file mode 100644 index 0000000..a190425 --- /dev/null +++ b/app/boards/arm/nice_nano/Kconfig @@ -0,0 +1,6 @@ + +config BOARD_ENABLE_DCDC + bool "Enable DCDC mode" + select SOC_DCDC_NRF52X + default y + depends on BOARD_NICE_NANO diff --git a/app/boards/arm/nice_nano/Kconfig.board b/app/boards/arm/nice_nano/Kconfig.board index 60ee58b..4fd394f 100644 --- a/app/boards/arm/nice_nano/Kconfig.board +++ b/app/boards/arm/nice_nano/Kconfig.board @@ -6,3 +6,4 @@ config BOARD_NICE_NANO bool "nice!nano" depends on SOC_NRF52840_QIAA + -- cgit v1.2.3 From 9dd8217cd4c5ae434bde6bd5eb4dca2274ce9cec Mon Sep 17 00:00:00 2001 From: Derek Date: Sat, 15 Aug 2020 15:32:36 -0400 Subject: Add bluemicro support --- app/boards/arm/bluemicro52840_v1/CMakeLists.txt | 8 ++ app/boards/arm/bluemicro52840_v1/Kconfig.board | 8 ++ app/boards/arm/bluemicro52840_v1/Kconfig.defconfig | 30 ++++++ .../bluemicro52840_v1/arduino_pro_micro_pins.dtsi | 52 +++++++++++ .../arm/bluemicro52840_v1/bluemicro52840_v1.dts | 103 +++++++++++++++++++++ .../arm/bluemicro52840_v1/bluemicro52840_v1.yaml | 15 +++ .../bluemicro52840_v1/bluemicro52840_v1_defconfig | 20 ++++ app/boards/arm/bluemicro52840_v1/board.cmake | 5 + 8 files changed, 241 insertions(+) create mode 100644 app/boards/arm/bluemicro52840_v1/CMakeLists.txt create mode 100644 app/boards/arm/bluemicro52840_v1/Kconfig.board create mode 100644 app/boards/arm/bluemicro52840_v1/Kconfig.defconfig create mode 100644 app/boards/arm/bluemicro52840_v1/arduino_pro_micro_pins.dtsi create mode 100644 app/boards/arm/bluemicro52840_v1/bluemicro52840_v1.dts create mode 100644 app/boards/arm/bluemicro52840_v1/bluemicro52840_v1.yaml create mode 100644 app/boards/arm/bluemicro52840_v1/bluemicro52840_v1_defconfig create mode 100644 app/boards/arm/bluemicro52840_v1/board.cmake diff --git a/app/boards/arm/bluemicro52840_v1/CMakeLists.txt b/app/boards/arm/bluemicro52840_v1/CMakeLists.txt new file mode 100644 index 0000000..00952c3 --- /dev/null +++ b/app/boards/arm/bluemicro52840_v1/CMakeLists.txt @@ -0,0 +1,8 @@ +set_property(GLOBAL APPEND PROPERTY extra_post_build_commands + COMMAND ${PYTHON_EXECUTABLE} ${ZEPHYR_BASE}/../tools/uf2/utils/uf2conv.py + -c + -b 0x26000 + -f 0xADA52840 + -o ${PROJECT_BINARY_DIR}/${CONFIG_KERNEL_BIN_NAME}.uf2 + ${PROJECT_BINARY_DIR}/${CONFIG_KERNEL_BIN_NAME}.bin +) diff --git a/app/boards/arm/bluemicro52840_v1/Kconfig.board b/app/boards/arm/bluemicro52840_v1/Kconfig.board new file mode 100644 index 0000000..dea0555 --- /dev/null +++ b/app/boards/arm/bluemicro52840_v1/Kconfig.board @@ -0,0 +1,8 @@ +# BlueMicro52840_V1 board configuration + +# Copyright (c) 2020 Pete Johanson, Derek Schmell +# SPDX-License-Identifier: MIT + +config BOARD_BLUEMICRO52840_V1 + bool "BlueMicro52840_V1" + depends on SOC_NRF52840_QIAA diff --git a/app/boards/arm/bluemicro52840_v1/Kconfig.defconfig b/app/boards/arm/bluemicro52840_v1/Kconfig.defconfig new file mode 100644 index 0000000..e33a655 --- /dev/null +++ b/app/boards/arm/bluemicro52840_v1/Kconfig.defconfig @@ -0,0 +1,30 @@ +# Electronut Labs Papyr board configuration + +# Copyright (c) 2020 Pete Johanson, Derek Schmell +# SPDX-License-Identifier: MIT + +if BOARD_BLUEMICRO52840_V1 + +config BOARD + default "bluemicro52840_v1" + +if USB + +config USB_NRFX + default y + +config USB_DEVICE_STACK + default y + +endif # USB + +config BT_CTLR + default BT + +config ZMK_BLE + default y + +config ZMK_USB + default y + +endif # BOARD_BLUEMICRO52840_V1 diff --git a/app/boards/arm/bluemicro52840_v1/arduino_pro_micro_pins.dtsi b/app/boards/arm/bluemicro52840_v1/arduino_pro_micro_pins.dtsi new file mode 100644 index 0000000..eb0afe8 --- /dev/null +++ b/app/boards/arm/bluemicro52840_v1/arduino_pro_micro_pins.dtsi @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2020 Pete Johanson + * + * SPDX-License-Identifier: MIT + */ + +/ { + pro_micro_d: connector_d { + compatible = "arduino-pro-micro"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <0 0 &gpio0 8 0> /* D0 D2 */ + , <1 0 &gpio0 6 0> /* D1 D3*/ + , <2 0 &gpio0 15 0> /* D2 D1*/ + , <3 0 &gpio0 17 0> /* D3 D0*/ + , <4 0 &gpio0 20 0> /* D4/A6 D4*/ + , <5 0 &gpio0 13 0> /* D5 C6*/ + , <6 0 &gpio0 24 0> /* D6/A7 D7*/ + , <7 0 &gpio0 9 0> /* D7 E6*/ + , <8 0 &gpio0 10 0> /* D8/A8 B4*/ + , <9 0 &gpio1 6 0> /* D9/A9 B5*/ + , <10 0 &gpio1 11 0> /* D10/A10 B6*/ + , <16 0 &gpio0 28 0> /* D16 B2*/ + , <14 0 &gpio0 3 0> /* D14 B3*/ + , <15 0 &gpio1 13 0> /* D15 B1*/ + ; + }; + + pro_micro_a: connector_a { + compatible = "arduino-pro-micro"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <0 0 &gpio0 2 0> /* A0 F7*/ + , <1 0 &gpio0 29 0> /* A1 F6*/ + , <2 0 &gpio0 26 0> /* A2 F5*/ + , <3 0 &gpio0 30 0> /* A3 F4*/ + , <6 0 &gpio0 20 0> /* D4/A6 D4*/ + , <7 0 &gpio0 24 0> /* D6/A7 D7*/ + , <8 0 &gpio0 10 0> /* D8/A8 B4*/ + , <9 0 &gpio1 6 0> /* D9/A9 B5*/ + , <10 0 &gpio1 13 0> /* D10/A10 B6*/ + ; + }; +}; + +pro_micro_i2c: &i2c0 {}; +pro_micro_spi: &spi0 {}; +pro_micro_serial: &uart0 {}; diff --git a/app/boards/arm/bluemicro52840_v1/bluemicro52840_v1.dts b/app/boards/arm/bluemicro52840_v1/bluemicro52840_v1.dts new file mode 100644 index 0000000..a1f95e3 --- /dev/null +++ b/app/boards/arm/bluemicro52840_v1/bluemicro52840_v1.dts @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2020 Pete Johanson, Derek Schmell + * + * SPDX-License-Identifier: MIT + */ + +/dts-v1/; +#include +#include "arduino_pro_micro_pins.dtsi" + +/ { + model = "BlueMicro52840_V1"; + compatible = "bluemicro52840,v1"; + + chosen { + zephyr,code-partition = &code_partition; + // zephyr,console = &uart0; + //zephyr,bt-mon-uart = &uart0; + //zephyr,bt-c2h-uart = &uart0; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + }; + + leds { + compatible = "gpio-leds"; + blue_led: led_0 { + gpios = <&gpio0 42 GPIO_ACTIVE_LOW>; + label = "Blue LED"; + }; + }; + +}; + +&gpio0 { + status = "okay"; +}; + +&gpio1 { + status = "okay"; +}; + +&uart0 { + compatible = "nordic,nrf-uart"; + current-speed = <115200>; + tx-pin = <6>; + rx-pin = <8>; +}; + +&i2c0 { + compatible = "nordic,nrf-twi"; + sda-pin = <25>; + scl-pin = <26>; +}; + +&uart0 { + compatible = "nordic,nrf-uarte"; + status = "okay"; + current-speed = <115200>; + tx-pin = <39>; + rx-pin = <34>; + rts-pin = <33>; + cts-pin = <12>; +}; + +&usbd { + status = "okay"; +}; + + +&flash0 { + /* + * For more information, see: + * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + boot_partition: partition@0 { + label = "adafruit_boot"; + reg = <0x000000000 0x0000C000>; + }; + code_partition: partition@26000 { + label = "code_partition"; + reg = <0x00026000 0x000d2000>; + }; + + /* + * The flash starting at 0x000f8000 and ending at + * 0x000fffff is reserved for use by the application. + */ + + /* + * Storage partition will be used by FCB/LittleFS/NVS + * if enabled. + */ + storage_partition: partition@f8000 { + label = "storage"; + reg = <0x000f8000 0x00008000>; + }; + }; +}; diff --git a/app/boards/arm/bluemicro52840_v1/bluemicro52840_v1.yaml b/app/boards/arm/bluemicro52840_v1/bluemicro52840_v1.yaml new file mode 100644 index 0000000..fca969d --- /dev/null +++ b/app/boards/arm/bluemicro52840_v1/bluemicro52840_v1.yaml @@ -0,0 +1,15 @@ +identifier: bluemicro52840_v1 +name: BlueMicro52840_V1 +type: mcu +arch: arm +toolchain: + - zephyr + - gnuarmemb + - xtools +supported: + - adc + - usb_device + - ble + - ieee802154 + - pwm + - watchdog diff --git a/app/boards/arm/bluemicro52840_v1/bluemicro52840_v1_defconfig b/app/boards/arm/bluemicro52840_v1/bluemicro52840_v1_defconfig new file mode 100644 index 0000000..f87e69d --- /dev/null +++ b/app/boards/arm/bluemicro52840_v1/bluemicro52840_v1_defconfig @@ -0,0 +1,20 @@ +# SPDX-License-Identifier: MIT + +CONFIG_SOC_SERIES_NRF52X=y +CONFIG_SOC_NRF52840_QIAA=y +CONFIG_BOARD_BLUEMICRO52840_V1=y + +# Enable MPU +CONFIG_ARM_MPU=y + +# enable GPIO +CONFIG_GPIO=y + +CONFIG_USE_DT_CODE_PARTITION=y + +CONFIG_MPU_ALLOW_FLASH_WRITE=y +CONFIG_NVS=y +CONFIG_SETTINGS_NVS=y +CONFIG_FLASH=y +CONFIG_FLASH_PAGE_LAYOUT=y +CONFIG_FLASH_MAP=y \ No newline at end of file diff --git a/app/boards/arm/bluemicro52840_v1/board.cmake b/app/boards/arm/bluemicro52840_v1/board.cmake new file mode 100644 index 0000000..12a1d93 --- /dev/null +++ b/app/boards/arm/bluemicro52840_v1/board.cmake @@ -0,0 +1,5 @@ +# SPDX-License-Identifier: Apache-2.0 + +board_runner_args(nrfjprog "--nrf-family=NRF52" "--softreset") +include(${ZEPHYR_BASE}/boards/common/blackmagicprobe.board.cmake) +include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) -- cgit v1.2.3 From dd165c68296a9ddf915a1f1681dc15995282ccea Mon Sep 17 00:00:00 2001 From: Derek Date: Sat, 15 Aug 2020 15:53:31 -0400 Subject: Corrected pins for scl-pin and sda-pin --- app/boards/arm/bluemicro52840_v1/bluemicro52840_v1.dts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/boards/arm/bluemicro52840_v1/bluemicro52840_v1.dts b/app/boards/arm/bluemicro52840_v1/bluemicro52840_v1.dts index a1f95e3..257a006 100644 --- a/app/boards/arm/bluemicro52840_v1/bluemicro52840_v1.dts +++ b/app/boards/arm/bluemicro52840_v1/bluemicro52840_v1.dts @@ -48,8 +48,8 @@ &i2c0 { compatible = "nordic,nrf-twi"; - sda-pin = <25>; - scl-pin = <26>; + sda-pin = <15>; + scl-pin = <17>; }; &uart0 { -- cgit v1.2.3 From 3e264e46d4c53ed7198731fcdfefc74396b48f1a Mon Sep 17 00:00:00 2001 From: Derek Date: Sat, 15 Aug 2020 16:01:35 -0400 Subject: Add splitreus62 shield --- app/boards/shields/splitreus62/Kconfig.defconfig | 54 ++++++++++++++++++++++ app/boards/shields/splitreus62/Kconfig.shield | 8 ++++ app/boards/shields/splitreus62/splitreus62.conf | 2 + app/boards/shields/splitreus62/splitreus62.dtsi | 50 ++++++++++++++++++++ app/boards/shields/splitreus62/splitreus62.keymap | 25 ++++++++++ .../shields/splitreus62/splitreus62_left.conf | 2 + .../shields/splitreus62/splitreus62_left.overlay | 19 ++++++++ .../shields/splitreus62/splitreus62_right.conf | 3 ++ .../shields/splitreus62/splitreus62_right.overlay | 22 +++++++++ 9 files changed, 185 insertions(+) create mode 100644 app/boards/shields/splitreus62/Kconfig.defconfig create mode 100644 app/boards/shields/splitreus62/Kconfig.shield create mode 100644 app/boards/shields/splitreus62/splitreus62.conf create mode 100644 app/boards/shields/splitreus62/splitreus62.dtsi create mode 100644 app/boards/shields/splitreus62/splitreus62.keymap create mode 100644 app/boards/shields/splitreus62/splitreus62_left.conf create mode 100644 app/boards/shields/splitreus62/splitreus62_left.overlay create mode 100644 app/boards/shields/splitreus62/splitreus62_right.conf create mode 100644 app/boards/shields/splitreus62/splitreus62_right.overlay diff --git a/app/boards/shields/splitreus62/Kconfig.defconfig b/app/boards/shields/splitreus62/Kconfig.defconfig new file mode 100644 index 0000000..c52752a --- /dev/null +++ b/app/boards/shields/splitreus62/Kconfig.defconfig @@ -0,0 +1,54 @@ + +if SHIELD_SPLITREUS62_LEFT + +config ZMK_KEYBOARD_NAME + default "Splitreus62 Left" + +endif + +if SHIELD_SPLITREUS62_RIGHT + +config ZMK_KEYBOARD_NAME + default "Splitreus62 Right" + +endif + +if SHIELD_SPLITREUS62_LEFT || SHIELD_SPLITREUS62_RIGHT + +if ZMK_DISPLAY + +config I2C + default n + +config SSD1306 + default n + +config SSD1306_REVERSE_MODE + default n + +endif # ZMK_DISPLAY + +if LVGL + +config LVGL_HOR_RES + default 128 + +config LVGL_VER_RES + default 32 + +config LVGL_VDB_SIZE + default 64 + +config LVGL_DPI + default 148 + +config LVGL_BITS_PER_PIXEL + default 1 + +choice LVGL_COLOR_DEPTH + default LVGL_COLOR_DEPTH_1 +endchoice + +endif # LVGL + +endif diff --git a/app/boards/shields/splitreus62/Kconfig.shield b/app/boards/shields/splitreus62/Kconfig.shield new file mode 100644 index 0000000..f20f236 --- /dev/null +++ b/app/boards/shields/splitreus62/Kconfig.shield @@ -0,0 +1,8 @@ +# Copyright (c) 2020 Pete Johanson +# SPDX-License-Identifier: MIT + +config SHIELD_SPLITREUS62_LEFT + def_bool $(shields_list_contains,splitreus62_left) + +config SHIELD_SPLITREUS62_RIGHT + def_bool $(shields_list_contains,splitreus62_right) diff --git a/app/boards/shields/splitreus62/splitreus62.conf b/app/boards/shields/splitreus62/splitreus62.conf new file mode 100644 index 0000000..73f0d9d --- /dev/null +++ b/app/boards/shields/splitreus62/splitreus62.conf @@ -0,0 +1,2 @@ +# Uncomment the following line to enable the Lily58 OLED Display +# CONFIG_ZMK_DISPLAY=y diff --git a/app/boards/shields/splitreus62/splitreus62.dtsi b/app/boards/shields/splitreus62/splitreus62.dtsi new file mode 100644 index 0000000..e1fb40b --- /dev/null +++ b/app/boards/shields/splitreus62/splitreus62.dtsi @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2020 Pete Johanson, Derek Schmell + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <12>; + rows = <6>; +// | SW0 | SW5 | SW10 | SW15 | SW20 | SW25 | SW25 | SW20 | SW15 | SW10 | SW5 | SW1 | +// | SW1 | SW6 | SW11 | SW16 | SW21 | SW26 | SW26 | SW21 | SW16 | SW11 | SW6 | SW2 | +// | SW2 | SW7 | SW12 | SW17 | SW22 | SW27 | SW27 | SW22 | SW17 | SW12 | SW7 | SW3 | +// | SW3 | SW8 | SW13 | SW18 | SW23 | SW28 | SW28 | SW23 | SW18 | SW13 | SW8 | SW4 | +// | SW4 | SW9 | SW14 | SW19 | SW24 | SW29 | SW29 | SW24 | SW19 | SW14 | SW9 | SW5 | +// SW30 | SW30 + map = < +RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) +RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) +RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) +RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) +RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8) RC(4,9) RC(4,10) RC(4,11) + RC(5,5) RC(5,6) + >; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + + diode-direction = "row2col"; + row-gpios + = <&pro_micro_d 1 GPIO_ACTIVE_HIGH > + , <&pro_micro_d 0 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 2 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 4 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 5 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 6 GPIO_ACTIVE_HIGH> + ; + + }; +}; diff --git a/app/boards/shields/splitreus62/splitreus62.keymap b/app/boards/shields/splitreus62/splitreus62.keymap new file mode 100644 index 0000000..cd683a2 --- /dev/null +++ b/app/boards/shields/splitreus62/splitreus62.keymap @@ -0,0 +1,25 @@ +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { +// ------------------------------------------------------------------------------------------------------------ +// | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - | +// | TAB | Q | W | E | R | T | | Y | U | I | O | P | \ | +// | CTRL | A | S | D | F | G | | H | J | K | L | ; | ' | +// | SHIFT | Z | X | C | V | B | | N | M | , | . | / | SHIFT | +// | LCTL | LGUI | LALT | GRAV | | EQL | DEL | BKSP| | RET | SPC | LBKT | RBKT | LBKT | HOME | END | + bindings = < +&kp ESC &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 &kp MINUS +&kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH +&kp LCTL &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SCLN &kp QUOT +&kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RSFT +&kp LCTL &kp LGUI &kp LALT &kp GRAV &kp EQL &kp DEL &kp SPC &kp LBKT &kp RBKT &kp MINUS &kp HOME &kp END + &kp BKSP &kp RET + >; + }; + }; +}; diff --git a/app/boards/shields/splitreus62/splitreus62_left.conf b/app/boards/shields/splitreus62/splitreus62_left.conf new file mode 100644 index 0000000..a835adc --- /dev/null +++ b/app/boards/shields/splitreus62/splitreus62_left.conf @@ -0,0 +1,2 @@ +CONFIG_ZMK_SPLIT=y +CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL=y \ No newline at end of file diff --git a/app/boards/shields/splitreus62/splitreus62_left.overlay b/app/boards/shields/splitreus62/splitreus62_left.overlay new file mode 100644 index 0000000..aea374a --- /dev/null +++ b/app/boards/shields/splitreus62/splitreus62_left.overlay @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2020 Pete Johanson + * + * SPDX-License-Identifier: MIT + */ + +#include "splitreus62.dtsi" + +&kscan0 { + col-gpios + = <&pro_micro_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; +}; + diff --git a/app/boards/shields/splitreus62/splitreus62_right.conf b/app/boards/shields/splitreus62/splitreus62_right.conf new file mode 100644 index 0000000..ab43d04 --- /dev/null +++ b/app/boards/shields/splitreus62/splitreus62_right.conf @@ -0,0 +1,3 @@ +CONFIG_ZMK_SPLIT=y +CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL=y +#CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL=y diff --git a/app/boards/shields/splitreus62/splitreus62_right.overlay b/app/boards/shields/splitreus62/splitreus62_right.overlay new file mode 100644 index 0000000..3c0f989 --- /dev/null +++ b/app/boards/shields/splitreus62/splitreus62_right.overlay @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2020 Pete Johanson + * + * SPDX-License-Identifier: MIT + */ + +#include "splitreus62.dtsi" + +&default_transform { + col-offset = <6>; +}; + +&kscan0 { + col-gpios + = <&pro_micro_d 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; +}; \ No newline at end of file -- cgit v1.2.3 From bb5eb51df743bd1c56c814c62f10d022c388df67 Mon Sep 17 00:00:00 2001 From: Derek Date: Sat, 15 Aug 2020 16:11:18 -0400 Subject: Updated comment and removed display flag --- app/boards/shields/splitreus62/splitreus62.conf | 2 -- app/boards/shields/splitreus62/splitreus62_right.conf | 3 +-- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/app/boards/shields/splitreus62/splitreus62.conf b/app/boards/shields/splitreus62/splitreus62.conf index 73f0d9d..e69de29 100644 --- a/app/boards/shields/splitreus62/splitreus62.conf +++ b/app/boards/shields/splitreus62/splitreus62.conf @@ -1,2 +0,0 @@ -# Uncomment the following line to enable the Lily58 OLED Display -# CONFIG_ZMK_DISPLAY=y diff --git a/app/boards/shields/splitreus62/splitreus62_right.conf b/app/boards/shields/splitreus62/splitreus62_right.conf index ab43d04..e51dee4 100644 --- a/app/boards/shields/splitreus62/splitreus62_right.conf +++ b/app/boards/shields/splitreus62/splitreus62_right.conf @@ -1,3 +1,2 @@ CONFIG_ZMK_SPLIT=y -CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL=y -#CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL=y +CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL=y \ No newline at end of file -- cgit v1.2.3 From ce7d7cd51d35bf22cf92a3765e021c10b583c587 Mon Sep 17 00:00:00 2001 From: Derek Date: Sat, 15 Aug 2020 16:21:38 -0400 Subject: Undo build.yaml changles --- .github/workflows/build.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5eb7971..a8bddf6 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -16,6 +16,10 @@ jobs: - kyria_right - lily58_left - lily58_right +<<<<<<< HEAD + +======= +>>>>>>> parent of c3164f4... Updated build.yaml include: - board: proton_c shield: clueboard_california -- cgit v1.2.3 From 1fa993fca22860d4706364e72116ffd154d01bac Mon Sep 17 00:00:00 2001 From: Derek Date: Sat, 15 Aug 2020 16:21:54 -0400 Subject: Update app/boards/shields/splitreus62/splitreus62_right.overlay Co-authored-by: Nick Winans --- app/boards/shields/splitreus62/splitreus62_right.overlay | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/boards/shields/splitreus62/splitreus62_right.overlay b/app/boards/shields/splitreus62/splitreus62_right.overlay index 3c0f989..35375cc 100644 --- a/app/boards/shields/splitreus62/splitreus62_right.overlay +++ b/app/boards/shields/splitreus62/splitreus62_right.overlay @@ -15,8 +15,8 @@ = <&pro_micro_d 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> , <&pro_micro_d 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> , <&pro_micro_d 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> , <&pro_micro_d 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> , <&pro_micro_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> ; -}; \ No newline at end of file +}; -- cgit v1.2.3 From ba136eb9eed862aefe2cacd83f24194c62a00459 Mon Sep 17 00:00:00 2001 From: Derek Date: Sat, 15 Aug 2020 16:22:00 -0400 Subject: Update app/boards/shields/splitreus62/splitreus62_left.overlay Co-authored-by: Nick Winans --- app/boards/shields/splitreus62/splitreus62_left.overlay | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/boards/shields/splitreus62/splitreus62_left.overlay b/app/boards/shields/splitreus62/splitreus62_left.overlay index aea374a..7210ca4 100644 --- a/app/boards/shields/splitreus62/splitreus62_left.overlay +++ b/app/boards/shields/splitreus62/splitreus62_left.overlay @@ -10,10 +10,9 @@ col-gpios = <&pro_micro_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> , <&pro_micro_d 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> , <&pro_micro_d 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> , <&pro_micro_d 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> , <&pro_micro_d 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> ; }; - -- cgit v1.2.3 From ff3b1d3fa31d8dbc226ae75e601ba0a9800252b0 Mon Sep 17 00:00:00 2001 From: Derek Date: Sat, 15 Aug 2020 16:26:55 -0400 Subject: Revert "Undo build.yaml changles" This reverts commit ce7d7cd51d35bf22cf92a3765e021c10b583c587. --- .github/workflows/build.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a8bddf6..5eb7971 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -16,10 +16,6 @@ jobs: - kyria_right - lily58_left - lily58_right -<<<<<<< HEAD - -======= ->>>>>>> parent of c3164f4... Updated build.yaml include: - board: proton_c shield: clueboard_california -- cgit v1.2.3 From caecce62b7805e7fa3db814f2eb1616ba3661262 Mon Sep 17 00:00:00 2001 From: Derek Date: Sat, 15 Aug 2020 16:32:14 -0400 Subject: Drop OLED support. --- app/boards/shields/splitreus62/Kconfig.defconfig | 36 ------------------------ 1 file changed, 36 deletions(-) diff --git a/app/boards/shields/splitreus62/Kconfig.defconfig b/app/boards/shields/splitreus62/Kconfig.defconfig index c52752a..1f5b324 100644 --- a/app/boards/shields/splitreus62/Kconfig.defconfig +++ b/app/boards/shields/splitreus62/Kconfig.defconfig @@ -15,40 +15,4 @@ endif if SHIELD_SPLITREUS62_LEFT || SHIELD_SPLITREUS62_RIGHT -if ZMK_DISPLAY - -config I2C - default n - -config SSD1306 - default n - -config SSD1306_REVERSE_MODE - default n - -endif # ZMK_DISPLAY - -if LVGL - -config LVGL_HOR_RES - default 128 - -config LVGL_VER_RES - default 32 - -config LVGL_VDB_SIZE - default 64 - -config LVGL_DPI - default 148 - -config LVGL_BITS_PER_PIXEL - default 1 - -choice LVGL_COLOR_DEPTH - default LVGL_COLOR_DEPTH_1 -endchoice - -endif # LVGL - endif -- cgit v1.2.3 From c44693cd4822c4a90b828aad3619987af2e94447 Mon Sep 17 00:00:00 2001 From: Derek Date: Sat, 15 Aug 2020 16:57:06 -0400 Subject: Update build.yml Updated workflow to include new board and shield --- .github/workflows/build.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5eb7971..3fa91e5 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -8,7 +8,7 @@ jobs: name: Build Test strategy: matrix: - board: [proton_c, nice_nano] + board: [proton_c, nice_nano, bluemicro52840_v1] shield: - corne_left - corne_right @@ -16,6 +16,8 @@ jobs: - kyria_right - lily58_left - lily58_right + - splitreus62_left + - splitreus62_right include: - board: proton_c shield: clueboard_california -- cgit v1.2.3 From 0a23d98962e5aa43d8c90670841cccf368660b58 Mon Sep 17 00:00:00 2001 From: Derek Date: Sat, 15 Aug 2020 17:09:44 -0400 Subject: Update build.yml Fails without splitreus62 shield and without itself added? --- .github/workflows/build.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3fa91e5..5eb7971 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -8,7 +8,7 @@ jobs: name: Build Test strategy: matrix: - board: [proton_c, nice_nano, bluemicro52840_v1] + board: [proton_c, nice_nano] shield: - corne_left - corne_right @@ -16,8 +16,6 @@ jobs: - kyria_right - lily58_left - lily58_right - - splitreus62_left - - splitreus62_right include: - board: proton_c shield: clueboard_california -- cgit v1.2.3 From 23b188330f53c3907802efb091614002ee4237b7 Mon Sep 17 00:00:00 2001 From: Derek Date: Sat, 15 Aug 2020 19:30:35 -0400 Subject: Update setup.sh Updated setup.sh --- docs/static/setup.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/static/setup.sh b/docs/static/setup.sh index 27dcb0b..71692ef 100644 --- a/docs/static/setup.sh +++ b/docs/static/setup.sh @@ -11,7 +11,7 @@ title="ZMK Config Setup:" # TODO: Check for user.name and user.email git configs being set prompt="Pick an MCU board:" -options=("nice!nano" "QMK Proton-C") +options=("nice!nano" "QMK Proton-C" "bluemicro52840_v1") echo "$title" echo "" @@ -37,7 +37,7 @@ echo "" echo "Keyboard Shield Selection:" prompt="Pick an keyboard:" -options=("Kyria" "Lily58" "Corne") +options=("Kyria" "Lily58" "Corne" "splitreus62") PS3="$prompt " # TODO: Add support for "Other" and linking to docs on adding custom shields in user config repos. -- cgit v1.2.3 From 7e1942867b0c7c19f6bd78e6f8a15227fbfc323b Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Sat, 15 Aug 2020 20:20:19 -0400 Subject: Doc fixes for keymaps. --- docs/docs/dev-guide-new-shield.md | 47 ++++++++++++++------------------------- 1 file changed, 17 insertions(+), 30 deletions(-) diff --git a/docs/docs/dev-guide-new-shield.md b/docs/docs/dev-guide-new-shield.md index 1119806..963a723 100644 --- a/docs/docs/dev-guide-new-shield.md +++ b/docs/docs/dev-guide-new-shield.md @@ -147,51 +147,38 @@ Some important things to note: ## Default Keymap -Each keyboard should provide an OOTB default keymap to be used when building the firmware, which can be overridden and customized by user configs. For "shield keyboards", this should be placed in the `app/boards/shields//keymap/keymap.overlay` file. The keymap is configured as an additional devicetree overlay that includes the following: +Each keyboard should provide an OOTB default keymap to be used when building the firmware, which can be overridden and customized by user configs. For "shield keyboards", this should be placed in the `app/boards/shields//.keymap` file. The keymap is configured as an additional devicetree overlay that includes the following: -- A node with `compatible="zmk,layers"` where each child node is a layer with a `bindings` array that binds each key position to a given behavior (e.g. key press, momentarily layer, etc). -- A node with `compatible="zmk,keymap"` that references the layers with a `layers` phandle-array property. -- A chosen node named `zmk,keymap` that references the defined keymap. +- A node with `compatible="zmk,keymap"` where each child node is a layer with a `bindings` array that binds each key position to a given behavior (e.g. key press, momentarily layer, etc). -Here is an example simple keymap for the nice60, with only one layer: +Here is an example simple keymap for the Kyria, with only one layer: ``` #include #include / { - chosen { - zmk,keymap = &keymap0; - }; - - keymap0: keymap { + keymap { compatible = "zmk,keymap"; - label ="Default nice!60 Keymap"; - layers = <&default>; - }; - layers { - compatible = "zmk,layers"; - - default: layer_0 { - label = "DEFAULT"; -// ------------------------------------------------------------------------------------------ -// | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BKSP | -// | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | "|" | -// | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | ENTER | -// | SHIFT | Z | X | C | V | B | N | M | , | . | / | SHIFT | -// | CTL | WIN | ALT | SPACE | ALT | WIN | MENU | CTL | -// ------------------------------------------------------------------------------------------ + default_layer { +// --------------------------------------------------------------------------------------------------------------------------------- +// | ESC | Q | W | E | R | T | | Y | U | I | O | P | \ | +// | TAB | A | S | D | F | G | | H | J | K | L | ; | ' | +// | SHIFT | Z | X | C | V | B | L SHIFT | L SHIFT | | L SHIFT | L SHIFT | N | M | , | . | / | CTRL | +// | GUI | DEL | RET | SPACE | ESC | | RET | SPACE | TAB | BSPC | R-ALT | bindings = < - &kp ESC &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 &kp MINUS &kp EQL &kp BKSP - &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSLH - &kp CLCK &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SCLN &kp QUOT &kp RET - &kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RSFT - &kp LCTL &kp LGUI &kp LALT &kp SPC &kp RALT &kp RGUI &kp GUI &kp RCTL + &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH + &kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SCLN &kp QUOT + &kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp LSFT &kp LSFT &kp LSFT &kp LSFT &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RCTL + &kp LGUI &kp DEL &kp RET &kp SPC &kp ESC &kp RET &kp SPC &kp TAB &kp BKSP &kp RALT >; + + sensor-bindings = <&inc_dec_cp M_VOLU M_VOLD &inc_dec_kp PGUP PGDN>; }; }; }; + ``` :::note -- cgit v1.2.3 From ee5900686bdb921beccf87566cb1ba4977059f99 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Sat, 15 Aug 2020 21:13:50 -0400 Subject: Fix the active/pull down flags for the example. --- docs/docs/dev-guide-new-shield.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/docs/dev-guide-new-shield.md b/docs/docs/dev-guide-new-shield.md index 963a723..8556623 100644 --- a/docs/docs/dev-guide-new-shield.md +++ b/docs/docs/dev-guide-new-shield.md @@ -81,9 +81,9 @@ this might look something like: ; row-gpios - = <&pro_micro_a 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro_a 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> - , <&pro_micro_a 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + = <&pro_micro_a 1 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_a 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_a 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> ; }; }; -- cgit v1.2.3 From 892394d9e6b795f3f7c60e5e4d433760b5fc64ed Mon Sep 17 00:00:00 2001 From: CrossR Date: Sun, 16 Aug 2020 12:44:18 +0100 Subject: Update to include missing encoder config. --- app/boards/shields/sofle/Kconfig.defconfig | 2 -- app/boards/shields/sofle/sofle.conf | 4 ++++ app/boards/shields/sofle/sofle.dtsi | 25 ++++++++++++++++++++++++- 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/app/boards/shields/sofle/Kconfig.defconfig b/app/boards/shields/sofle/Kconfig.defconfig index 4437868..2ccf147 100644 --- a/app/boards/shields/sofle/Kconfig.defconfig +++ b/app/boards/shields/sofle/Kconfig.defconfig @@ -3,14 +3,12 @@ if SHIELD_SOFLE_LEFT config ZMK_KEYBOARD_NAME default "Sofle Left" - endif if SHIELD_SOFLE_RIGHT config ZMK_KEYBOARD_NAME default "Sofle Right" - endif if SHIELD_SOFLE_LEFT || SHIELD_SOFLE_RIGHT diff --git a/app/boards/shields/sofle/sofle.conf b/app/boards/shields/sofle/sofle.conf index 60c20dc..2194add 100644 --- a/app/boards/shields/sofle/sofle.conf +++ b/app/boards/shields/sofle/sofle.conf @@ -1,2 +1,6 @@ # Uncomment the following line to enable the Sofle OLED Display # CONFIG_ZMK_DISPLAY=y + +# Uncomment these two lines to add support for encoders +# CONFIG_EC11=y +# CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y diff --git a/app/boards/shields/sofle/sofle.dtsi b/app/boards/shields/sofle/sofle.dtsi index dfa001c..cfd7a95 100644 --- a/app/boards/shields/sofle/sofle.dtsi +++ b/app/boards/shields/sofle/sofle.dtsi @@ -42,7 +42,30 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) , <&pro_micro_d 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> , <&pro_micro_d 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> ; - + }; + + // TODO: Check these pins! + left_encoder: encoder_left { + compatible = "alps,ec11"; + label = "LEFT_ENCODER"; + a-gpios = <&pro_micro_d 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro_d 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + resolution = <4>; + status = "disabled"; + }; + + right_encoder: encoder_right { + compatible = "alps,ec11"; + label = "RIGHT_ENCODER"; + a-gpios = <&pro_micro_d 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro_d 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + resolution = <4>; + status = "disabled"; + }; + + sensors { + compatible = "zmk,keymap-sensors"; + sensors = <&left_encoder &right_encoder>; }; }; -- cgit v1.2.3 From ba1cde94a80e7ecaf8e2a8373b08eb65ef820285 Mon Sep 17 00:00:00 2001 From: Derek Date: Sun, 16 Aug 2020 08:43:09 -0400 Subject: Update docs/static/setup.sh Co-authored-by: Pete Johanson --- docs/static/setup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/static/setup.sh b/docs/static/setup.sh index 71692ef..0717889 100644 --- a/docs/static/setup.sh +++ b/docs/static/setup.sh @@ -11,7 +11,7 @@ title="ZMK Config Setup:" # TODO: Check for user.name and user.email git configs being set prompt="Pick an MCU board:" -options=("nice!nano" "QMK Proton-C" "bluemicro52840_v1") +options=("nice!nano" "QMK Proton-C" "BlueMicro52840 (v1)") echo "$title" echo "" -- cgit v1.2.3 From 68da92f4ddb9fab9bc5cc92c96b50578f7b66266 Mon Sep 17 00:00:00 2001 From: Derek Date: Sun, 16 Aug 2020 08:45:03 -0400 Subject: Update setup.sh --- docs/static/setup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/static/setup.sh b/docs/static/setup.sh index 71692ef..ca223a8 100644 --- a/docs/static/setup.sh +++ b/docs/static/setup.sh @@ -37,7 +37,7 @@ echo "" echo "Keyboard Shield Selection:" prompt="Pick an keyboard:" -options=("Kyria" "Lily58" "Corne" "splitreus62") +options=("Kyria" "Lily58" "Corne") PS3="$prompt " # TODO: Add support for "Other" and linking to docs on adding custom shields in user config repos. -- cgit v1.2.3 From 75f4adb101850ae5a2d619cbeff1c5b19af7b846 Mon Sep 17 00:00:00 2001 From: Derek Date: Sun, 16 Aug 2020 08:46:16 -0400 Subject: Update arduino_pro_micro_pins.dtsi --- app/boards/arm/bluemicro52840_v1/arduino_pro_micro_pins.dtsi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/boards/arm/bluemicro52840_v1/arduino_pro_micro_pins.dtsi b/app/boards/arm/bluemicro52840_v1/arduino_pro_micro_pins.dtsi index eb0afe8..940d891 100644 --- a/app/boards/arm/bluemicro52840_v1/arduino_pro_micro_pins.dtsi +++ b/app/boards/arm/bluemicro52840_v1/arduino_pro_micro_pins.dtsi @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 Pete Johanson + * Copyright (c) 2020 Derek Schmell * * SPDX-License-Identifier: MIT */ -- cgit v1.2.3 From 6ef2102af989afd87a28615292f9f39f40e41aa0 Mon Sep 17 00:00:00 2001 From: Derek Date: Sun, 16 Aug 2020 08:48:34 -0400 Subject: Update board.cmake --- app/boards/arm/bluemicro52840_v1/board.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/boards/arm/bluemicro52840_v1/board.cmake b/app/boards/arm/bluemicro52840_v1/board.cmake index 12a1d93..c0eed65 100644 --- a/app/boards/arm/bluemicro52840_v1/board.cmake +++ b/app/boards/arm/bluemicro52840_v1/board.cmake @@ -1,5 +1,5 @@ -# SPDX-License-Identifier: Apache-2.0 - + #SPDX-License-Identifier: MIT + board_runner_args(nrfjprog "--nrf-family=NRF52" "--softreset") include(${ZEPHYR_BASE}/boards/common/blackmagicprobe.board.cmake) include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) -- cgit v1.2.3 From 5bb01c802b792dd016b2cd091b0983806b658f43 Mon Sep 17 00:00:00 2001 From: Derek Date: Sun, 16 Aug 2020 08:49:17 -0400 Subject: Update setup.sh --- docs/static/setup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/static/setup.sh b/docs/static/setup.sh index 27dcb0b..45eccd6 100644 --- a/docs/static/setup.sh +++ b/docs/static/setup.sh @@ -37,7 +37,7 @@ echo "" echo "Keyboard Shield Selection:" prompt="Pick an keyboard:" -options=("Kyria" "Lily58" "Corne") +options=("Kyria" "Lily58" "Corne" "Splitreus62") PS3="$prompt " # TODO: Add support for "Other" and linking to docs on adding custom shields in user config repos. -- cgit v1.2.3 From 17c43881b8441e3e5c2fe9b5d25cb5ee9536a26a Mon Sep 17 00:00:00 2001 From: Derek Date: Sun, 16 Aug 2020 13:43:59 -0400 Subject: Updated select block --- docs/static/setup.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/static/setup.sh b/docs/static/setup.sh index c4a4f61..72eee0b 100644 --- a/docs/static/setup.sh +++ b/docs/static/setup.sh @@ -23,6 +23,7 @@ select opt in "${options[@]}" "Quit"; do 1 ) board="nice_nano"; break;; 2 ) board="proton_c"; break;; + 3 ) board="BlueMicro52840 (v1)"; break;; $(( ${#options[@]}+1 )) ) echo "Goodbye!"; exit;; *) echo "Invalid option. Try another one.";continue;; -- cgit v1.2.3 From eff6934066e0d898c6dcf3e450d6381073d2bdef Mon Sep 17 00:00:00 2001 From: CrossR Date: Sun, 16 Aug 2020 19:15:47 +0100 Subject: Update pins. --- app/boards/shields/sofle/sofle.dtsi | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/app/boards/shields/sofle/sofle.dtsi b/app/boards/shields/sofle/sofle.dtsi index cfd7a95..4c220a2 100644 --- a/app/boards/shields/sofle/sofle.dtsi +++ b/app/boards/shields/sofle/sofle.dtsi @@ -44,22 +44,23 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) ; }; - // TODO: Check these pins! + // TODO: Check these pins and resolution! + left_encoder: encoder_left { compatible = "alps,ec11"; label = "LEFT_ENCODER"; - a-gpios = <&pro_micro_d 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - b-gpios = <&pro_micro_d 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - resolution = <4>; + a-gpios = <&pro_micro_a 1 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro_a 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + resolution = <2>; status = "disabled"; }; right_encoder: encoder_right { compatible = "alps,ec11"; label = "RIGHT_ENCODER"; - a-gpios = <&pro_micro_d 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - b-gpios = <&pro_micro_d 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - resolution = <4>; + a-gpios = <&pro_micro_a 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro_a 1 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + resolution = <2>; status = "disabled"; }; -- cgit v1.2.3 From 25c8a269982ae7414ef0e407900c0f793971e625 Mon Sep 17 00:00:00 2001 From: Kellen Carey Date: Sun, 16 Aug 2020 12:49:08 -0700 Subject: wait before sending HID report --- app/src/usb_hid.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/app/src/usb_hid.c b/app/src/usb_hid.c index 4c6dd4b..07c3d5f 100644 --- a/app/src/usb_hid.c +++ b/app/src/usb_hid.c @@ -1,4 +1,5 @@ +#include #include #include @@ -15,6 +16,18 @@ static enum usb_dc_status_code usb_status; static struct device *hid_dev; +static K_SEM_DEFINE(hid_sem, 1, 1); + +static void in_ready_cb(void) +{ + k_sem_give(&hid_sem); +} + +static const struct hid_ops ops = +{ + .int_in_ready = in_ready_cb, +}; + int zmk_usb_hid_send_report(const u8_t *report, size_t len) { if (usb_status == USB_DC_SUSPEND) @@ -22,6 +35,7 @@ int zmk_usb_hid_send_report(const u8_t *report, size_t len) return usb_wakeup_request(); } + k_sem_take(&hid_sem, K_FOREVER); return hid_int_ep_write(hid_dev, report, len, NULL); } @@ -43,7 +57,7 @@ static int zmk_usb_hid_init(struct device *_arg) usb_hid_register_device(hid_dev, zmk_hid_report_desc, sizeof(zmk_hid_report_desc), - NULL); + &ops); usb_hid_init(hid_dev); -- cgit v1.2.3 From 5b4e5a30c41ea6edfa592735fcf607c44b0b3243 Mon Sep 17 00:00:00 2001 From: Kellen Carey Date: Sun, 16 Aug 2020 12:51:06 -0700 Subject: remove unnecessary include --- app/src/usb_hid.c | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/usb_hid.c b/app/src/usb_hid.c index 07c3d5f..40511b0 100644 --- a/app/src/usb_hid.c +++ b/app/src/usb_hid.c @@ -1,5 +1,4 @@ -#include #include #include -- cgit v1.2.3 From 087574f607b4a500738b8155281cf24388ba4400 Mon Sep 17 00:00:00 2001 From: Nick Date: Sun, 16 Aug 2020 15:36:43 -0500 Subject: Create proper fix for split default conn bug --- app/Kconfig | 3 +++ app/src/ble.c | 19 ------------------- 2 files changed, 3 insertions(+), 19 deletions(-) diff --git a/app/Kconfig b/app/Kconfig index be5a1e4..b26be48 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -124,6 +124,9 @@ config ZMK_USB config BT_MAX_CONN default 5 +config BT_GAP_AUTO_UPDATE_CONN_PARAMS + default n + endif endchoice diff --git a/app/src/ble.c b/app/src/ble.c index 488491c..6d2903f 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -76,29 +76,10 @@ static void security_changed(struct bt_conn *conn, bt_security_t level, } } -#if !IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL) -static bool le_param_req(struct bt_conn *conn, struct bt_le_conn_param *param) { - static struct bt_conn_info info; - - bt_conn_get_info(conn, &info); - - /* This captures a param change from central half of a split board connection - to stop default params from getting set over the top of our preferred ones */ - if (info.role == BT_CONN_ROLE_MASTER && (param->interval_min != 6 || param->latency != 30)) { - return false; - } - - return true; -} -#endif - static struct bt_conn_cb conn_callbacks = { .connected = connected, .disconnected = disconnected, .security_changed = security_changed, -#if !IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL) - .le_param_req = le_param_req, -#endif }; static void auth_passkey_display(struct bt_conn *conn, unsigned int passkey) -- cgit v1.2.3 From 47b219cca55e053509f373cc4f4812d55afb1451 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Sun, 16 Aug 2020 21:27:37 -0400 Subject: Remove duplicate uart0 node. --- app/boards/arm/bluemicro52840_v1/bluemicro52840_v1.dts | 7 ------- 1 file changed, 7 deletions(-) diff --git a/app/boards/arm/bluemicro52840_v1/bluemicro52840_v1.dts b/app/boards/arm/bluemicro52840_v1/bluemicro52840_v1.dts index 257a006..c56ca18 100644 --- a/app/boards/arm/bluemicro52840_v1/bluemicro52840_v1.dts +++ b/app/boards/arm/bluemicro52840_v1/bluemicro52840_v1.dts @@ -39,13 +39,6 @@ status = "okay"; }; -&uart0 { - compatible = "nordic,nrf-uart"; - current-speed = <115200>; - tx-pin = <6>; - rx-pin = <8>; -}; - &i2c0 { compatible = "nordic,nrf-twi"; sda-pin = <15>; -- cgit v1.2.3 From abe40f8ef52265f9d807775a82f40ca783622018 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Sun, 16 Aug 2020 21:30:45 -0400 Subject: Various fixes. --- app/boards/arm/bluemicro52840_v1/Kconfig.defconfig | 2 +- app/boards/arm/bluemicro52840_v1/board.cmake | 4 ++-- docs/static/setup.sh | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/boards/arm/bluemicro52840_v1/Kconfig.defconfig b/app/boards/arm/bluemicro52840_v1/Kconfig.defconfig index e33a655..90a5ed9 100644 --- a/app/boards/arm/bluemicro52840_v1/Kconfig.defconfig +++ b/app/boards/arm/bluemicro52840_v1/Kconfig.defconfig @@ -1,4 +1,4 @@ -# Electronut Labs Papyr board configuration +# BlueMicro52840 board configuration # Copyright (c) 2020 Pete Johanson, Derek Schmell # SPDX-License-Identifier: MIT diff --git a/app/boards/arm/bluemicro52840_v1/board.cmake b/app/boards/arm/bluemicro52840_v1/board.cmake index c0eed65..fa847d5 100644 --- a/app/boards/arm/bluemicro52840_v1/board.cmake +++ b/app/boards/arm/bluemicro52840_v1/board.cmake @@ -1,5 +1,5 @@ - #SPDX-License-Identifier: MIT - +# SPDX-License-Identifier: MIT + board_runner_args(nrfjprog "--nrf-family=NRF52" "--softreset") include(${ZEPHYR_BASE}/boards/common/blackmagicprobe.board.cmake) include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) diff --git a/docs/static/setup.sh b/docs/static/setup.sh index 72eee0b..55c96ff 100644 --- a/docs/static/setup.sh +++ b/docs/static/setup.sh @@ -23,7 +23,7 @@ select opt in "${options[@]}" "Quit"; do 1 ) board="nice_nano"; break;; 2 ) board="proton_c"; break;; - 3 ) board="BlueMicro52840 (v1)"; break;; + 3 ) board="bluemicro52840_v1"; break;; $(( ${#options[@]}+1 )) ) echo "Goodbye!"; exit;; *) echo "Invalid option. Try another one.";continue;; -- cgit v1.2.3 From 8b4d2b6093dcdf22348e8f5b76f1d389328fad1e Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Sun, 16 Aug 2020 21:33:01 -0400 Subject: Add DCDC mode config. --- app/boards/arm/bluemicro52840_v1/Kconfig | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 app/boards/arm/bluemicro52840_v1/Kconfig diff --git a/app/boards/arm/bluemicro52840_v1/Kconfig b/app/boards/arm/bluemicro52840_v1/Kconfig new file mode 100644 index 0000000..67751a0 --- /dev/null +++ b/app/boards/arm/bluemicro52840_v1/Kconfig @@ -0,0 +1,8 @@ +# SPDX-License-Identifier: MIT + +config BOARD_ENABLE_DCDC + bool "Enable DCDC mode" + select SOC_DCDC_NRF52X + default y + depends on BOARD_BLUEMICRO52840_V1 + -- cgit v1.2.3 From 15405f351ac8446bbadd2d46e65f6c90dd7c4c6d Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Sun, 16 Aug 2020 21:34:48 -0400 Subject: Add BlueMicro52840 to build matrix. --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5eb7971..a87ce5f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -8,7 +8,7 @@ jobs: name: Build Test strategy: matrix: - board: [proton_c, nice_nano] + board: [proton_c, nice_nano, bluemicro52840_v1] shield: - corne_left - corne_right -- cgit v1.2.3 From 1607656c531f315f7d9209f576a2e0784b8e0d75 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Sun, 16 Aug 2020 23:16:50 -0400 Subject: Note the fixed showstoppers. --- docs/blog/2020-08-12-zmk-sotf-1.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/blog/2020-08-12-zmk-sotf-1.md b/docs/blog/2020-08-12-zmk-sotf-1.md index 2b69535..8a3ca7c 100644 --- a/docs/blog/2020-08-12-zmk-sotf-1.md +++ b/docs/blog/2020-08-12-zmk-sotf-1.md @@ -28,10 +28,10 @@ There's been lots of various activity in ZMK land! Despite the flurry of activity, there are still some serious bugs and show stoppers that potential ZMK users should be aware of: - [Bluetooth Related](https://github.com/zmkfirmware/zmk/issues/58) - There are several key bugs and fixes needed, including one complete show stopper: - - Fully working split wireless is not working. In particular, both split halves can properly pair, but once they do so, pairing with the _central_ host will not work. Workaround: You can currently have both halves pair, and use USB on the central side (Left side right now for Kyria, Corne, Lily58) and receive HID events over USB. + - Fully working split wireless is not working. In particular, both split halves can properly pair, but once they do so, pairing with the _central_ host will not work. Workaround: You can currently have both halves pair, and use USB on the central side (Left side right now for Kyria, Corne, Lily58) and receive HID events over USB. - Fixed in 8b61beb. - BT bond information is not currently stored to the devices, so after powering off or restarting your device, users need to re-pair - USB - There is one important USB related bug which is a showstopper: - - The Zephyr USB stack does not have a built in queue for endpoint data being written. As a result, HID events sent by ZMK are sometimes [dropped, or lost](https://github.com/zmkfirmware/zmk/issues/84). + - The Zephyr USB stack does not have a built in queue for endpoint data being written. As a result, HID events sent by ZMK are sometimes dropped, or lost. - Fixed by careyk007 in #93. ## Next Steps -- cgit v1.2.3 From 064323b667e33b3f68e56165e9add66b7482ed68 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Mon, 17 Aug 2020 22:34:06 -0400 Subject: fix(build): Remove more unused west modules. --- .github/workflows/build.yml | 8 ++++---- app/west.yml | 12 ++++++++++++ 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a87ce5f..98ca44d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -34,11 +34,11 @@ jobs: tools/ zephyr/ bootloader/ - key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('app/west.yml') }} + key: 2-${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('app/west.yml') }} restore-keys: | - ${{ runner.os }}-build-${{ env.cache-name }}- - ${{ runner.os }}-build- - ${{ runner.os }}- + 2-${{ runner.os }}-build-${{ env.cache-name }}- + 2-${{ runner.os }}-build- + 2-${{ runner.os }}- - name: West Init uses: "docker://zmkfirmware/zephyr-west-action-arm:latest" id: west-init diff --git a/app/west.yml b/app/west.yml index 3784d97..cba53ab 100644 --- a/app/west.yml +++ b/app/west.yml @@ -21,6 +21,18 @@ manifest: - hal_microchip - hal_nxp - hal_openisa + - hal_silabs + - hal_xtensa + - hal_st + - hal_ti + - loramac-node + - mcuboot + - mcumgr + - net-tools + - segger + - openthread + - edtt + - trusted-firmware-m - name: uf2 remote: microsoft path: tools/uf2 -- cgit v1.2.3 From e5ba03f0881658514c24b1227c514ed57c0c7937 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Mon, 17 Aug 2020 23:23:30 -0400 Subject: Revert "Merge pull request #93 from careyk007/main" This reverts commit 8cd8933c87aadd2ce7b31c1367bfaad81fc2a36b, reversing changes made to 3f1dfbaad1a867f59c13814a517e03dfce4d4223. --- app/src/usb_hid.c | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/app/src/usb_hid.c b/app/src/usb_hid.c index 40511b0..4c6dd4b 100644 --- a/app/src/usb_hid.c +++ b/app/src/usb_hid.c @@ -15,18 +15,6 @@ static enum usb_dc_status_code usb_status; static struct device *hid_dev; -static K_SEM_DEFINE(hid_sem, 1, 1); - -static void in_ready_cb(void) -{ - k_sem_give(&hid_sem); -} - -static const struct hid_ops ops = -{ - .int_in_ready = in_ready_cb, -}; - int zmk_usb_hid_send_report(const u8_t *report, size_t len) { if (usb_status == USB_DC_SUSPEND) @@ -34,7 +22,6 @@ int zmk_usb_hid_send_report(const u8_t *report, size_t len) return usb_wakeup_request(); } - k_sem_take(&hid_sem, K_FOREVER); return hid_int_ep_write(hid_dev, report, len, NULL); } @@ -56,7 +43,7 @@ static int zmk_usb_hid_init(struct device *_arg) usb_hid_register_device(hid_dev, zmk_hid_report_desc, sizeof(zmk_hid_report_desc), - &ops); + NULL); usb_hid_init(hid_dev); -- cgit v1.2.3 From d7dee20e8d9b0b566859304063df2176aef8c057 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Tue, 18 Aug 2020 09:56:25 -0400 Subject: Add missing license header. --- app/src/ble.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/src/ble.c b/app/src/ble.c index 6d2903f..71bbccd 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -1,3 +1,8 @@ +/* + * Copyright (c) 2020 Peter Johanson + * + * SPDX-License-Identifier: MIT + */ #include #include -- cgit v1.2.3 From 4402e4fbc7bc79206589d3006fde802c4ba70ec7 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Tue, 18 Aug 2020 11:20:15 -0400 Subject: feeature(bt): Add "unpair combo" on startup. * Especially for splits, we need the ability to unpair all paired devices as sledgehammer if we need to "reset things", and doing so via keymaps isn't suitable. * Allows shields to define a collection of key positions that if all held 2 seconds after startup, will unpair all existing pairs for the device. --- app/CMakeLists.txt | 1 + app/Kconfig | 10 +++- app/boards/shields/corne/corne.dtsi | 4 ++ app/boards/shields/corne/corne_left.conf | 3 +- app/boards/shields/corne/corne_left.overlay | 4 ++ app/boards/shields/corne/corne_right.conf | 3 +- app/boards/shields/corne/corne_right.overlay | 3 + app/boards/shields/kyria/kyria.dtsi | 4 ++ app/boards/shields/kyria/kyria_left.conf | 3 +- app/boards/shields/kyria/kyria_left.overlay | 4 ++ app/boards/shields/kyria/kyria_right.conf | 3 +- app/boards/shields/kyria/kyria_right.overlay | 4 ++ app/boards/shields/lily58/lily58.dtsi | 4 ++ app/boards/shields/lily58/lily58_left.conf | 3 +- app/boards/shields/lily58/lily58_left.overlay | 3 + app/boards/shields/lily58/lily58_right.conf | 1 + app/boards/shields/lily58/lily58_right.overlay | 3 + app/drivers/zephyr/kscan_gpio_matrix.c | 10 +++- app/dts/bindings/zmk,bt-unpair-combo.yaml | 12 ++++ app/include/zmk/ble.h | 2 +- app/src/ble.c | 6 ++ app/src/ble_unpair_combo.c | 80 ++++++++++++++++++++++++++ 22 files changed, 160 insertions(+), 10 deletions(-) create mode 100644 app/dts/bindings/zmk,bt-unpair-combo.yaml create mode 100644 app/src/ble_unpair_combo.c diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index d0d343b..1f6de5d 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -42,6 +42,7 @@ target_sources(app PRIVATE src/behaviors/behavior_transparent.c) target_sources(app PRIVATE src/behaviors/behavior_sensor_rotate_key_press.c) target_sources_ifdef(CONFIG_ZMK_RGB_UNDERGLOW app PRIVATE src/behaviors/behavior_rgb_underglow.c) target_sources_ifdef(CONFIG_ZMK_BLE app PRIVATE src/ble.c) +target_sources_ifdef(CONFIG_ZMK_BLE_UNPAIR_COMBO app PRIVATE src/ble_unpair_combo.c) target_sources_ifdef(CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL app PRIVATE src/split_listener.c) target_sources_ifdef(CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL app PRIVATE src/split/bluetooth/service.c) target_sources_ifdef(CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL app PRIVATE src/split/bluetooth/central.c) diff --git a/app/Kconfig b/app/Kconfig index b26be48..416c985 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -40,11 +40,17 @@ menuconfig ZMK_BLE select BT_PERIPHERAL select BT_GATT_DIS select BT_GATT_BAS - # select SETTINGS - # select BT_SETTINGS + select SETTINGS + select BT_SETTINGS if ZMK_BLE +config ZMK_BLE_UNPAIR_COMBO + bool "Enable BT unpair combo" + help + Adds a magic key combo that can be held on startup to remove all paired devices + default n + config ZMK_BLE_INIT_PRIORITY int "Init Priority" default 50 diff --git a/app/boards/shields/corne/corne.dtsi b/app/boards/shields/corne/corne.dtsi index 70d6495..3df055c 100644 --- a/app/boards/shields/corne/corne.dtsi +++ b/app/boards/shields/corne/corne.dtsi @@ -58,6 +58,10 @@ RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10 }; + bt_unpair_combo: bt_unpair_combo { + compatible = "zmk,bt-unpair-combo"; + }; + // TODO: per-key RGB node(s)? }; diff --git a/app/boards/shields/corne/corne_left.conf b/app/boards/shields/corne/corne_left.conf index e51dee4..338fa59 100644 --- a/app/boards/shields/corne/corne_left.conf +++ b/app/boards/shields/corne/corne_left.conf @@ -1,2 +1,3 @@ CONFIG_ZMK_SPLIT=y -CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL=y \ No newline at end of file +CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL=y +CONFIG_ZMK_BLE_UNPAIR_COMBO=y \ No newline at end of file diff --git a/app/boards/shields/corne/corne_left.overlay b/app/boards/shields/corne/corne_left.overlay index 399bddd..f12c417 100644 --- a/app/boards/shields/corne/corne_left.overlay +++ b/app/boards/shields/corne/corne_left.overlay @@ -16,3 +16,7 @@ , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> ; }; + +&bt_unpair_combo { + key-positions = <0 38>; +}; diff --git a/app/boards/shields/corne/corne_right.conf b/app/boards/shields/corne/corne_right.conf index a835adc..be344c4 100644 --- a/app/boards/shields/corne/corne_right.conf +++ b/app/boards/shields/corne/corne_right.conf @@ -1,2 +1,3 @@ CONFIG_ZMK_SPLIT=y -CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL=y \ No newline at end of file +CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL=y +CONFIG_ZMK_BLE_UNPAIR_COMBO=y \ No newline at end of file diff --git a/app/boards/shields/corne/corne_right.overlay b/app/boards/shields/corne/corne_right.overlay index 652d5ed..9d97d85 100644 --- a/app/boards/shields/corne/corne_right.overlay +++ b/app/boards/shields/corne/corne_right.overlay @@ -21,3 +21,6 @@ ; }; +&bt_unpair_combo { + key-positions = <11 39>; +}; diff --git a/app/boards/shields/kyria/kyria.dtsi b/app/boards/shields/kyria/kyria.dtsi index bbead84..a13f7f0 100644 --- a/app/boards/shields/kyria/kyria.dtsi +++ b/app/boards/shields/kyria/kyria.dtsi @@ -81,6 +81,10 @@ RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) sensors = <&left_encoder &right_encoder>; }; + bt_unpair_combo: bt_unpair_combo { + compatible = "zmk,bt-unpair-combo"; + }; + // TODO: RGB node(s) }; diff --git a/app/boards/shields/kyria/kyria_left.conf b/app/boards/shields/kyria/kyria_left.conf index e51dee4..338fa59 100644 --- a/app/boards/shields/kyria/kyria_left.conf +++ b/app/boards/shields/kyria/kyria_left.conf @@ -1,2 +1,3 @@ CONFIG_ZMK_SPLIT=y -CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL=y \ No newline at end of file +CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL=y +CONFIG_ZMK_BLE_UNPAIR_COMBO=y \ No newline at end of file diff --git a/app/boards/shields/kyria/kyria_left.overlay b/app/boards/shields/kyria/kyria_left.overlay index c8b5be2..441c1a6 100644 --- a/app/boards/shields/kyria/kyria_left.overlay +++ b/app/boards/shields/kyria/kyria_left.overlay @@ -22,3 +22,7 @@ &left_encoder { status = "okay"; }; + +&bt_unpair_combo { + key-positions = <0 44>; +}; \ No newline at end of file diff --git a/app/boards/shields/kyria/kyria_right.conf b/app/boards/shields/kyria/kyria_right.conf index a835adc..be344c4 100644 --- a/app/boards/shields/kyria/kyria_right.conf +++ b/app/boards/shields/kyria/kyria_right.conf @@ -1,2 +1,3 @@ CONFIG_ZMK_SPLIT=y -CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL=y \ No newline at end of file +CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL=y +CONFIG_ZMK_BLE_UNPAIR_COMBO=y \ No newline at end of file diff --git a/app/boards/shields/kyria/kyria_right.overlay b/app/boards/shields/kyria/kyria_right.overlay index 8163c95..8ee0fcb 100644 --- a/app/boards/shields/kyria/kyria_right.overlay +++ b/app/boards/shields/kyria/kyria_right.overlay @@ -27,3 +27,7 @@ &right_encoder { status = "okay"; }; + +&bt_unpair_combo { + key-positions = <11 45>; +}; \ No newline at end of file diff --git a/app/boards/shields/lily58/lily58.dtsi b/app/boards/shields/lily58/lily58.dtsi index 8655d8c..cbda523 100644 --- a/app/boards/shields/lily58/lily58.dtsi +++ b/app/boards/shields/lily58/lily58.dtsi @@ -44,6 +44,10 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) ; }; + + bt_unpair_combo: bt_unpair_combo { + compatible = "zmk,bt-unpair-combo"; + }; }; &pro_micro_i2c { diff --git a/app/boards/shields/lily58/lily58_left.conf b/app/boards/shields/lily58/lily58_left.conf index e51dee4..338fa59 100644 --- a/app/boards/shields/lily58/lily58_left.conf +++ b/app/boards/shields/lily58/lily58_left.conf @@ -1,2 +1,3 @@ CONFIG_ZMK_SPLIT=y -CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL=y \ No newline at end of file +CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL=y +CONFIG_ZMK_BLE_UNPAIR_COMBO=y \ No newline at end of file diff --git a/app/boards/shields/lily58/lily58_left.overlay b/app/boards/shields/lily58/lily58_left.overlay index c8e2213..c6f630f 100644 --- a/app/boards/shields/lily58/lily58_left.overlay +++ b/app/boards/shields/lily58/lily58_left.overlay @@ -17,3 +17,6 @@ ; }; +&bt_unpair_combo { + key-positions = <0 42>; +}; diff --git a/app/boards/shields/lily58/lily58_right.conf b/app/boards/shields/lily58/lily58_right.conf index 990cf7c..cf16779 100644 --- a/app/boards/shields/lily58/lily58_right.conf +++ b/app/boards/shields/lily58/lily58_right.conf @@ -1,2 +1,3 @@ CONFIG_ZMK_SPLIT=y CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL=y +CONFIG_ZMK_BLE_UNPAIR_COMBO=y diff --git a/app/boards/shields/lily58/lily58_right.overlay b/app/boards/shields/lily58/lily58_right.overlay index 748be14..84f0b06 100644 --- a/app/boards/shields/lily58/lily58_right.overlay +++ b/app/boards/shields/lily58/lily58_right.overlay @@ -21,3 +21,6 @@ ; }; +&bt_unpair_combo { + key-positions = <11 43>; +}; diff --git a/app/drivers/zephyr/kscan_gpio_matrix.c b/app/drivers/zephyr/kscan_gpio_matrix.c index baaca30..b19c492 100644 --- a/app/drivers/zephyr/kscan_gpio_matrix.c +++ b/app/drivers/zephyr/kscan_gpio_matrix.c @@ -205,7 +205,13 @@ static int kscan_gpio_config_interrupts(struct device **devices, } \ data->callback = callback; \ return 0; \ - } \ + }; \ + static int kscan_gpio_enable_##n(struct device *dev) \ + { \ + int err = kscan_gpio_enable_interrupts_##n(dev); \ + if (err) { return err; } \ + return kscan_gpio_read_##n(dev); \ + }; \ static int kscan_gpio_init_##n(struct device *dev) \ { \ struct kscan_gpio_data_##n *data = dev->driver_data; \ @@ -258,7 +264,7 @@ static int kscan_gpio_config_interrupts(struct device **devices, } \ static const struct kscan_driver_api gpio_driver_api_##n = { \ .config = kscan_gpio_configure_##n, \ - .enable_callback = kscan_gpio_enable_interrupts_##n, \ + .enable_callback = kscan_gpio_enable_##n, \ .disable_callback = kscan_gpio_disable_interrupts_##n, \ }; \ static const struct kscan_gpio_config_##n kscan_gpio_config_##n = { \ diff --git a/app/dts/bindings/zmk,bt-unpair-combo.yaml b/app/dts/bindings/zmk,bt-unpair-combo.yaml new file mode 100644 index 0000000..d781347 --- /dev/null +++ b/app/dts/bindings/zmk,bt-unpair-combo.yaml @@ -0,0 +1,12 @@ +# Copyright (c) 2020, Pete Johanson +# SPDX-License-Identifier: MIT + +description: | + Defines a set of key positions that will unpair all BT devices if held on startup. + +compatible: "zmk,bt-unpair-combo" + +properties: + key-positions: + type: array + required: true diff --git a/app/include/zmk/ble.h b/app/include/zmk/ble.h index a77237d..e760ed7 100644 --- a/app/include/zmk/ble.h +++ b/app/include/zmk/ble.h @@ -3,5 +3,5 @@ #include -int zmk_ble_init(); +int zmk_ble_unpair_all(); bool zmk_ble_handle_key_user(struct zmk_key_event *key_event); diff --git a/app/src/ble.c b/app/src/ble.c index 71bbccd..686a536 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -190,6 +190,12 @@ static int zmk_ble_init(struct device *_arg) return 0; } +int zmk_ble_unpair_all() +{ + LOG_DBG(""); + return bt_unpair(BT_ID_DEFAULT, NULL); +}; + bool zmk_ble_handle_key_user(struct zmk_key_event *key_event) { zmk_key key = key_event->key; diff --git a/app/src/ble_unpair_combo.c b/app/src/ble_unpair_combo.c new file mode 100644 index 0000000..a33a8e2 --- /dev/null +++ b/app/src/ble_unpair_combo.c @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2020 Peter Johanson + * + * SPDX-License-Identifier: MIT + */ + +#include +#include + +#include + +#define DT_DRV_COMPAT zmk_bt_unpair_combo + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#include +#include +#include + + +static u8_t combo_state; + +const u32_t key_positions[] = DT_INST_PROP(0, key_positions); +#define KP_LEN DT_INST_PROP_LEN(0, key_positions) + +int index_for_key_position(u32_t kp) +{ + for (int i = 0; i < KP_LEN; i++) { + if (key_positions[i] == kp) { + return i; + } + } + + return -1; +} + +int unpair_combo_listener(const struct zmk_event_header *eh) +{ + if (is_position_state_changed(eh)) { + const struct position_state_changed *psc = cast_position_state_changed(eh); + + int kp_index = index_for_key_position(psc->position); + if (kp_index < 0) { + return 0; + } + + WRITE_BIT(combo_state, kp_index, psc->state); + } + + return 0; +}; + +void unpair_combo_work_handler(struct k_work *work) +{ + for (int i = 0; i < KP_LEN; i++) { + if (!(combo_state & BIT(i))) { + LOG_DBG("Key position %d not held, skipping unpair combo", key_positions[i]); + return; + } + } + + zmk_ble_unpair_all(); +}; + +struct k_delayed_work unpair_combo_work; + +int zmk_ble_unpair_combo_init(struct device *_unused) +{ + k_delayed_work_init(&unpair_combo_work, unpair_combo_work_handler); + k_delayed_work_submit(&unpair_combo_work, K_SECONDS(2)); + + return 0; +}; + +ZMK_LISTENER(zmk_ble_unpair_combo, unpair_combo_listener); +ZMK_SUBSCRIPTION(zmk_ble_unpair_combo, position_state_changed); + +SYS_INIT(zmk_ble_unpair_combo_init, + APPLICATION, + CONFIG_APPLICATION_INIT_PRIORITY); -- cgit v1.2.3 From a82f990d4c518165fc745ce2b5fb5cf2dd6b2727 Mon Sep 17 00:00:00 2001 From: Cody McGinnis Date: Tue, 18 Aug 2020 14:02:24 -0400 Subject: feat(keymap): allow users to toggle layers --- app/CMakeLists.txt | 1 + app/dts/behaviors.dtsi | 1 + app/dts/behaviors/toggle_layer.dtsi | 9 ++++ .../behaviors/zmk,behavior-toggle-layer.yaml | 8 ++++ app/include/zmk/keymap.h | 1 + app/src/behaviors/behavior_toggle_layer.c | 54 ++++++++++++++++++++++ app/src/keymap.c | 5 ++ 7 files changed, 79 insertions(+) create mode 100644 app/dts/behaviors/toggle_layer.dtsi create mode 100644 app/dts/bindings/behaviors/zmk,behavior-toggle-layer.yaml create mode 100644 app/src/behaviors/behavior_toggle_layer.c diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index d0d343b..e0b9aea 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -38,6 +38,7 @@ target_sources(app PRIVATE src/behaviors/behavior_key_press.c) target_sources(app PRIVATE src/behaviors/behavior_reset.c) target_sources(app PRIVATE src/behaviors/behavior_mod_tap.c) target_sources(app PRIVATE src/behaviors/behavior_momentary_layer.c) +target_sources(app PRIVATE src/behaviors/behavior_toggle_layer.c) target_sources(app PRIVATE src/behaviors/behavior_transparent.c) target_sources(app PRIVATE src/behaviors/behavior_sensor_rotate_key_press.c) target_sources_ifdef(CONFIG_ZMK_RGB_UNDERGLOW app PRIVATE src/behaviors/behavior_rgb_underglow.c) diff --git a/app/dts/behaviors.dtsi b/app/dts/behaviors.dtsi index 04e42b6..a47a8b8 100644 --- a/app/dts/behaviors.dtsi +++ b/app/dts/behaviors.dtsi @@ -2,6 +2,7 @@ #include #include #include +#include #include #include #include \ No newline at end of file diff --git a/app/dts/behaviors/toggle_layer.dtsi b/app/dts/behaviors/toggle_layer.dtsi new file mode 100644 index 0000000..df6fd23 --- /dev/null +++ b/app/dts/behaviors/toggle_layer.dtsi @@ -0,0 +1,9 @@ +/ { + behaviors { + tog: behavior_toggle_layer { + compatible = "zmk,behavior-toggle-layer"; + label = "TOGGLE_LAYER"; + #binding-cells = <1>; + }; + }; +}; diff --git a/app/dts/bindings/behaviors/zmk,behavior-toggle-layer.yaml b/app/dts/bindings/behaviors/zmk,behavior-toggle-layer.yaml new file mode 100644 index 0000000..065949f --- /dev/null +++ b/app/dts/bindings/behaviors/zmk,behavior-toggle-layer.yaml @@ -0,0 +1,8 @@ +# Copyright (c) 2020, Cody McGinnis +# SPDX-License-Identifier: MIT + +description: Toggle Layer + +compatible: "zmk,behavior-toggle-layer" + +include: one_param.yaml diff --git a/app/include/zmk/keymap.h b/app/include/zmk/keymap.h index 4a6bb37..c55207f 100644 --- a/app/include/zmk/keymap.h +++ b/app/include/zmk/keymap.h @@ -1,5 +1,6 @@ #pragma once +bool zmk_keymap_layer_active(u8_t layer); int zmk_keymap_layer_activate(u8_t layer); int zmk_keymap_layer_deactivate(u8_t layer); diff --git a/app/src/behaviors/behavior_toggle_layer.c b/app/src/behaviors/behavior_toggle_layer.c new file mode 100644 index 0000000..ff0fe6a --- /dev/null +++ b/app/src/behaviors/behavior_toggle_layer.c @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2020 Cody McGinnis + * + * SPDX-License-Identifier: MIT + */ + +#define DT_DRV_COMPAT zmk_behavior_toggle_layer + +#include +#include +#include + +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +struct behavior_tog_config { }; +struct behavior_tog_data { }; + +static int behavior_tog_init(struct device *dev) +{ + return 0; +}; + + +static int tog_keymap_binding_pressed(struct device *dev, u32_t position, u32_t layer, u32_t _) +{ + LOG_DBG("position %d layer %d current %d", position, layer, zmk_keymap_layer_active(layer)); + + if (zmk_keymap_layer_active(layer)) + return zmk_keymap_layer_deactivate(layer); + + return zmk_keymap_layer_activate(layer); +} + +static int tog_keymap_binding_released(struct device *dev, u32_t position, u32_t layer, u32_t _) +{ + return 0; +} + +static const struct behavior_driver_api behavior_tog_driver_api = { + .binding_pressed = tog_keymap_binding_pressed, + .binding_released = tog_keymap_binding_released, +}; + +static const struct behavior_tog_config behavior_tog_config = {}; + +static struct behavior_tog_data behavior_tog_data; + +DEVICE_AND_API_INIT(behavior_tog, DT_INST_LABEL(0), behavior_tog_init, + &behavior_tog_data, + &behavior_tog_config, + APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, + &behavior_tog_driver_api); diff --git a/app/src/keymap.c b/app/src/keymap.c index ff494f7..ebb42ef 100644 --- a/app/src/keymap.c +++ b/app/src/keymap.c @@ -76,6 +76,11 @@ static struct zmk_behavior_binding zmk_sensor_keymap[ZMK_KEYMAP_LAYERS_LEN][ZMK_ WRITE_BIT(zmk_keymap_layer_state, layer, state); \ return 0; +bool zmk_keymap_layer_active(u8_t layer) +{ + return (zmk_keymap_layer_state & (BIT(layer))) == (BIT(layer)); +}; + int zmk_keymap_layer_activate(u8_t layer) { SET_LAYER_STATE(layer, true); -- cgit v1.2.3 From ae104374c0af0c2cbf9d246f980ccce56e60c105 Mon Sep 17 00:00:00 2001 From: Cody McGinnis Date: Tue, 18 Aug 2020 14:02:24 -0400 Subject: feat(docs): document the toggle layer behavior --- docs/docs/behavior/layers.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/docs/docs/behavior/layers.md b/docs/docs/behavior/layers.md index 2388caf..09defad 100644 --- a/docs/docs/behavior/layers.md +++ b/docs/docs/behavior/layers.md @@ -39,3 +39,18 @@ Example: ``` &mo LOWER ``` + +## Toggle Layer + +The "toggle layer" behavior allows you to enable a layer until the layer is manually disabled. + +### Behavior Binding + +- Reference: `&tog` +- Parameter: The layer number to enable/disable, e.g. `1` + +Example: + +``` +&tog LOWER +``` \ No newline at end of file -- cgit v1.2.3 From 7facb6eee8c5864c86b0a69213db4aabf6f24585 Mon Sep 17 00:00:00 2001 From: Cody McGinnis Date: Tue, 18 Aug 2020 14:02:25 -0400 Subject: fix(keymap): move the toggle layer logic to keymap.c --- app/dts/behaviors/toggle_layer.dtsi | 8 +++++++- app/include/zmk/keymap.h | 1 + app/src/behaviors/behavior_toggle_layer.c | 7 +------ app/src/keymap.c | 8 ++++++++ 4 files changed, 17 insertions(+), 7 deletions(-) diff --git a/app/dts/behaviors/toggle_layer.dtsi b/app/dts/behaviors/toggle_layer.dtsi index df6fd23..86a050d 100644 --- a/app/dts/behaviors/toggle_layer.dtsi +++ b/app/dts/behaviors/toggle_layer.dtsi @@ -1,4 +1,10 @@ -/ { +/* + * Copyright (c) 2020 Cody McGinnis + * + * SPDX-License-Identifier: MIT + */ + + / { behaviors { tog: behavior_toggle_layer { compatible = "zmk,behavior-toggle-layer"; diff --git a/app/include/zmk/keymap.h b/app/include/zmk/keymap.h index c55207f..c1f6393 100644 --- a/app/include/zmk/keymap.h +++ b/app/include/zmk/keymap.h @@ -3,5 +3,6 @@ bool zmk_keymap_layer_active(u8_t layer); int zmk_keymap_layer_activate(u8_t layer); int zmk_keymap_layer_deactivate(u8_t layer); +int zmk_keymap_layer_toggle(u8_t layer); int zmk_keymap_position_state_changed(u32_t position, bool pressed); diff --git a/app/src/behaviors/behavior_toggle_layer.c b/app/src/behaviors/behavior_toggle_layer.c index ff0fe6a..13f4a29 100644 --- a/app/src/behaviors/behavior_toggle_layer.c +++ b/app/src/behaviors/behavior_toggle_layer.c @@ -25,12 +25,7 @@ static int behavior_tog_init(struct device *dev) static int tog_keymap_binding_pressed(struct device *dev, u32_t position, u32_t layer, u32_t _) { - LOG_DBG("position %d layer %d current %d", position, layer, zmk_keymap_layer_active(layer)); - - if (zmk_keymap_layer_active(layer)) - return zmk_keymap_layer_deactivate(layer); - - return zmk_keymap_layer_activate(layer); + return zmk_keymap_layer_toggle(layer); } static int tog_keymap_binding_released(struct device *dev, u32_t position, u32_t layer, u32_t _) diff --git a/app/src/keymap.c b/app/src/keymap.c index ebb42ef..754305d 100644 --- a/app/src/keymap.c +++ b/app/src/keymap.c @@ -91,6 +91,14 @@ int zmk_keymap_layer_deactivate(u8_t layer) SET_LAYER_STATE(layer, false); }; +int zmk_keymap_layer_toggle(u8_t layer) +{ + if (zmk_keymap_layer_active(layer)) + return zmk_keymap_layer_deactivate(layer); + + return zmk_keymap_layer_activate(layer); +}; + bool is_active_position(u32_t position, u8_t layer) { return (zmk_keymap_layer_state & BIT(layer)) == BIT(layer) -- cgit v1.2.3 From bb4f45a57a5d8c62b911cefdada1f80d1ff70a71 Mon Sep 17 00:00:00 2001 From: Cody McGinnis Date: Tue, 18 Aug 2020 14:02:25 -0400 Subject: fix(docs): add another example to toggle layer --- docs/docs/behavior/layers.md | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/docs/docs/behavior/layers.md b/docs/docs/behavior/layers.md index 09defad..3e520ca 100644 --- a/docs/docs/behavior/layers.md +++ b/docs/docs/behavior/layers.md @@ -53,4 +53,40 @@ Example: ``` &tog LOWER -``` \ No newline at end of file +``` + +"Toggle layer" for a : +``` +#define DEFAULT 0 +#define NAVI 1 + +#define NONE 0 + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { + bindings = < + &tog NAVI &kp KDIV &kp KMLT &kp KMIN + &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp KPLS + &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp KPLS + &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp RET + &kp NUM_0 &kp NUM_0 &kp DOT &kp RET + >; + }; + + nav_layer { + bindings = < + &tog NAVI &kp KDIV &kp KMLT &kp KMIN + &kp HOME &kp UARW &kp PGUP &kp KPLS + &kp LARW &none &kp RARW &kp KPLS + &kp END &kp DARW &kp PGDN &kp RET + &kp INS &kp INS &kp DEL &kp RET + >; + }; + }; +}; +``` + +It is possible to use "toggle layer" to have keys that raise and lower the layers as well. \ No newline at end of file -- cgit v1.2.3 From 2ffe09b617419a25e45c387e001ea59d3cbb5652 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Tue, 18 Aug 2020 14:11:48 -0400 Subject: fix(docs): Fix typo in key press behavior doc. --- docs/docs/behavior/key-press.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/behavior/key-press.md b/docs/docs/behavior/key-press.md index 08296bb..1ae7e31 100644 --- a/docs/docs/behavior/key-press.md +++ b/docs/docs/behavior/key-press.md @@ -4,7 +4,7 @@ title: Key Presses ## Summary -The most basic of behaiors, is the ability to send certain keycode presses and releases in response to activating +The most basic of behaviors, is the ability to send certain keycode presses and releases in response to activating a certain key. For reference on keycode values, see the [USB HID Usage Tables](https://www.usb.org/document-library/hid-usage-tables-12). -- cgit v1.2.3 From 50643b2c561ef58d4c96e7dba6c55c0ef291146a Mon Sep 17 00:00:00 2001 From: Cody McGinnis Date: Tue, 18 Aug 2020 14:21:39 -0400 Subject: fix(keymap): add brackets around if statement body --- app/src/keymap.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/keymap.c b/app/src/keymap.c index 754305d..ee6e370 100644 --- a/app/src/keymap.c +++ b/app/src/keymap.c @@ -94,7 +94,9 @@ int zmk_keymap_layer_deactivate(u8_t layer) int zmk_keymap_layer_toggle(u8_t layer) { if (zmk_keymap_layer_active(layer)) - return zmk_keymap_layer_deactivate(layer); + { + return zmk_keymap_layer_deactivate(layer); + } return zmk_keymap_layer_activate(layer); }; -- cgit v1.2.3 From 63e02d60dcfbf4e4d7f9954075d1e087f816944b Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Tue, 18 Aug 2020 14:14:28 -0400 Subject: feat(behaviors): Add &none behavior --- app/CMakeLists.txt | 1 + app/dts/behaviors.dtsi | 1 + app/dts/behaviors/none.dtsi | 15 +++++++ app/dts/bindings/behaviors/zmk,behavior-none.yaml | 8 ++++ app/src/behaviors/behavior_none.c | 48 +++++++++++++++++++++++ docs/docs/behavior/misc.md | 41 +++++++++++++++++++ docs/sidebars.js | 1 + 7 files changed, 115 insertions(+) create mode 100644 app/dts/behaviors/none.dtsi create mode 100644 app/dts/bindings/behaviors/zmk,behavior-none.yaml create mode 100644 app/src/behaviors/behavior_none.c create mode 100644 docs/docs/behavior/misc.md diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index d0d343b..28a1204 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -39,6 +39,7 @@ target_sources(app PRIVATE src/behaviors/behavior_reset.c) target_sources(app PRIVATE src/behaviors/behavior_mod_tap.c) target_sources(app PRIVATE src/behaviors/behavior_momentary_layer.c) target_sources(app PRIVATE src/behaviors/behavior_transparent.c) +target_sources(app PRIVATE src/behaviors/behavior_none.c) target_sources(app PRIVATE src/behaviors/behavior_sensor_rotate_key_press.c) target_sources_ifdef(CONFIG_ZMK_RGB_UNDERGLOW app PRIVATE src/behaviors/behavior_rgb_underglow.c) target_sources_ifdef(CONFIG_ZMK_BLE app PRIVATE src/ble.c) diff --git a/app/dts/behaviors.dtsi b/app/dts/behaviors.dtsi index 04e42b6..5302c17 100644 --- a/app/dts/behaviors.dtsi +++ b/app/dts/behaviors.dtsi @@ -1,5 +1,6 @@ #include #include +#include #include #include #include diff --git a/app/dts/behaviors/none.dtsi b/app/dts/behaviors/none.dtsi new file mode 100644 index 0000000..e84ed49 --- /dev/null +++ b/app/dts/behaviors/none.dtsi @@ -0,0 +1,15 @@ +/* + * Copyright (c) 2020 Pete Johanson + * + * SPDX-License-Identifier: MIT + */ + +/ { + behaviors { + none: behavior_none { + compatible = "zmk,behavior-none"; + label = "NONE"; + #binding-cells = <0>; + }; + }; +}; diff --git a/app/dts/bindings/behaviors/zmk,behavior-none.yaml b/app/dts/bindings/behaviors/zmk,behavior-none.yaml new file mode 100644 index 0000000..9c66c94 --- /dev/null +++ b/app/dts/bindings/behaviors/zmk,behavior-none.yaml @@ -0,0 +1,8 @@ +# Copyright (c) 2020, Pete Johanson +# SPDX-License-Identifier: MIT + +description: None Binding Behavior + +compatible: "zmk,behavior-none" + +include: zero_param.yaml diff --git a/app/src/behaviors/behavior_none.c b/app/src/behaviors/behavior_none.c new file mode 100644 index 0000000..7e77e54 --- /dev/null +++ b/app/src/behaviors/behavior_none.c @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2020 Peter Johanson + * + * SPDX-License-Identifier: MIT + */ + +#define DT_DRV_COMPAT zmk_behavior_none + +#include +#include +#include +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +struct behavior_none_config { }; +struct behavior_none_data { }; + +static int behavior_none_init(struct device *dev) +{ + return 0; +}; + +static int on_keymap_binding_pressed(struct device *dev, u32_t position, u32_t _param1, u32_t _param2) +{ + return 1; +} + +static int on_keymap_binding_released(struct device *dev, u32_t position, u32_t _param1, u32_t _param2) +{ + return 1; +} + +static const struct behavior_driver_api behavior_none_driver_api = { + .binding_pressed = on_keymap_binding_pressed, + .binding_released = on_keymap_binding_released, +}; + + +static const struct behavior_none_config behavior_none_config = {}; + +static struct behavior_none_data behavior_none_data; + +DEVICE_AND_API_INIT(behavior_none, DT_INST_LABEL(0), behavior_none_init, + &behavior_none_data, + &behavior_none_config, + APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, + &behavior_none_driver_api); \ No newline at end of file diff --git a/docs/docs/behavior/misc.md b/docs/docs/behavior/misc.md new file mode 100644 index 0000000..799c91c --- /dev/null +++ b/docs/docs/behavior/misc.md @@ -0,0 +1,41 @@ +--- +title: Miscellaneous +--- + +## Summary + +There are a few miscellaneous behaviors that are helpful when working with layers in keymaps, +in particular, with handling what happens in higher layers, and if events are passed to +the next layer or not + +## Transparent + +The transparent behavior simply ignores key position presses/releases, so they will be +passed down to the next active layer in the stack. + +### Behavior Binding + +- Reference: `&trans` +- Parameters: None + +Example: + +``` +&trans +``` + +## None + +The none behavior simply swallows and stops key position presses/releases, so they will **not** +be passed down to the next active layer in the stack. + +### Behavior Binding + +- Reference: `&none` +- Parameters: None + +Example: + +``` +&none +``` diff --git a/docs/sidebars.js b/docs/sidebars.js index 1bd0358..90bdfa2 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -10,6 +10,7 @@ module.exports = { Behaviors: [ "behavior/key-press", "behavior/layers", + "behavior/misc", "behavior/lighting", ], Development: [ -- cgit v1.2.3 From d2d9fc86cf0ed0ab4bb896ee247fb212512d5aaf Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Tue, 18 Aug 2020 15:24:38 -0400 Subject: feat(docs): Basic mod-tap behavior docs. --- docs/docs/behavior/mod-tap.md | 29 +++++++++++++++++++++++++++++ docs/sidebars.js | 1 + 2 files changed, 30 insertions(+) create mode 100644 docs/docs/behavior/mod-tap.md diff --git a/docs/docs/behavior/mod-tap.md b/docs/docs/behavior/mod-tap.md new file mode 100644 index 0000000..cae667e --- /dev/null +++ b/docs/docs/behavior/mod-tap.md @@ -0,0 +1,29 @@ +--- +title: Mod-Tap +--- + +## Summary + +The Mod-Tap behavior allows varying the effect of pressing and releasing a key position depending +on whether it is used with other simultaneous key presses at the same time. + +If pressed and released independently, the Mod-Tap behavior will send the press and release events +for the configure keycode. If pressed and held while another key is pressed and released, then +the configured modifiers will be applied to that _other_ key press, and no press will be generated +on the release of the Mod-Tap key. + +## Mod-Tap + +The Mod-Tap behavior either acts as a held modifier, or as a tapped keycode. + +### Behavior Binding + +- Reference: `&mt` +- Parameter #1: The modifiers to be used when activating as a modifier, e.g. `MOD_LSFT` +- Parameter #2: The keycode to sent when used as a tap, e.g. `A`, `B`. + +Example: + +``` +&mt MOD_LSFT A +``` diff --git a/docs/sidebars.js b/docs/sidebars.js index 90bdfa2..be02a65 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -11,6 +11,7 @@ module.exports = { "behavior/key-press", "behavior/layers", "behavior/misc", + "behavior/mod-tap", "behavior/lighting", ], Development: [ -- cgit v1.2.3 From 05235ca96d021c1ec0fce60570d9786ee41aa437 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Tue, 18 Aug 2020 16:18:16 -0400 Subject: fix(bluetooth): Stop peripheral half advertising once connected. --- app/src/ble.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/app/src/ble.c b/app/src/ble.c index 71bbccd..bf1dee7 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -28,6 +28,16 @@ static struct bt_conn *auth_passkey_entry_conn; static u8_t passkey_entries[6] = {0, 0, 0, 0, 0, 0}; static u8_t passkey_digit = 0; +#if IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL) +#define ZMK_ADV_PARAMS BT_LE_ADV_PARAM(BT_LE_ADV_OPT_CONNECTABLE | \ + BT_LE_ADV_OPT_USE_NAME | \ + BT_LE_ADV_OPT_ONE_TIME, \ + BT_GAP_ADV_FAST_INT_MIN_2, \ + BT_GAP_ADV_FAST_INT_MAX_2, NULL) +#else +#define ZMK_ADV_PARAMS BT_LE_ADV_CONN_NAME +#endif + static void connected(struct bt_conn *conn, u8_t err) { char addr[BT_ADDR_LE_STR_LEN]; @@ -159,7 +169,7 @@ static void zmk_ble_ready(int err) return; } - err = bt_le_adv_start(BT_LE_ADV_CONN_NAME, zmk_ble_ad, ARRAY_SIZE(zmk_ble_ad), NULL, 0); + err = bt_le_adv_start(ZMK_ADV_PARAMS, zmk_ble_ad, ARRAY_SIZE(zmk_ble_ad), NULL, 0); if (err) { LOG_ERR("Advertising failed to start (err %d)", err); -- cgit v1.2.3 From 59f85c93cdd1a1a2a420378989323c378907564c Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Tue, 18 Aug 2020 16:33:24 -0400 Subject: fix(boards): Remove dup `uart0` overrides for nano --- app/boards/arm/nice_nano/nice_nano.dts | 7 ------- 1 file changed, 7 deletions(-) diff --git a/app/boards/arm/nice_nano/nice_nano.dts b/app/boards/arm/nice_nano/nice_nano.dts index 7c676e3..c1b9cc0 100644 --- a/app/boards/arm/nice_nano/nice_nano.dts +++ b/app/boards/arm/nice_nano/nice_nano.dts @@ -39,13 +39,6 @@ status = "okay"; }; -&uart0 { - compatible = "nordic,nrf-uart"; - current-speed = <115200>; - tx-pin = <6>; - rx-pin = <8>; -}; - &i2c0 { compatible = "nordic,nrf-twi"; sda-pin = <17>; -- cgit v1.2.3 From 66c4b7ebb0ec914089a8f08905d832b16493dd73 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Mon, 17 Aug 2020 22:17:59 -0400 Subject: fix(usb): Restore write semaphore, release it on write failures. --- app/src/usb_hid.c | 36 ++++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/app/src/usb_hid.c b/app/src/usb_hid.c index 4c6dd4b..784fc25 100644 --- a/app/src/usb_hid.c +++ b/app/src/usb_hid.c @@ -11,18 +11,42 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); -static enum usb_dc_status_code usb_status; +static enum usb_dc_status_code usb_status = USB_DC_UNKNOWN; static struct device *hid_dev; +static K_SEM_DEFINE(hid_sem, 1, 1); + +static void in_ready_cb(void) +{ + k_sem_give(&hid_sem); +} + +static const struct hid_ops ops = +{ + .int_in_ready = in_ready_cb, +}; + int zmk_usb_hid_send_report(const u8_t *report, size_t len) { - if (usb_status == USB_DC_SUSPEND) - { + switch(usb_status) { + case USB_DC_SUSPEND: return usb_wakeup_request(); + case USB_DC_ERROR: + case USB_DC_RESET: + case USB_DC_DISCONNECTED: + case USB_DC_UNKNOWN: + return -ENODEV; + default: + k_sem_take(&hid_sem, K_MSEC(30)); + int err = hid_int_ep_write(hid_dev, report, len, NULL); + + if (err) { + k_sem_give(&hid_sem); + } + + return err; } - - return hid_int_ep_write(hid_dev, report, len, NULL); } void usb_hid_status_cb(enum usb_dc_status_code status, const u8_t *params) @@ -43,7 +67,7 @@ static int zmk_usb_hid_init(struct device *_arg) usb_hid_register_device(hid_dev, zmk_hid_report_desc, sizeof(zmk_hid_report_desc), - NULL); + &ops); usb_hid_init(hid_dev); -- cgit v1.2.3 From 3c4a9686f86ee2ac90e81cfd5a408d08aa380cde Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Tue, 18 Aug 2020 21:56:22 -0400 Subject: fix(boards): Proper last col transform for Corne. --- app/boards/shields/corne/corne.dtsi | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/boards/shields/corne/corne.dtsi b/app/boards/shields/corne/corne.dtsi index 3df055c..c5420c4 100644 --- a/app/boards/shields/corne/corne.dtsi +++ b/app/boards/shields/corne/corne.dtsi @@ -21,9 +21,9 @@ // | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 | // | SW19 | SW20 | SW21 | | SW21 | SW20 | SW19 | map = < -RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,12) -RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,12) -RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,12) +RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) +RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) +RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) >; }; -- cgit v1.2.3 From 307e2b3e6366e5b284ee39913d2de46781952148 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Tue, 18 Aug 2020 23:24:53 -0400 Subject: fix(shields): OLED fixes for Corne, add anchors. --- app/boards/shields/corne/corne.dtsi | 7 +++++-- app/boards/shields/lily58/lily58.dtsi | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/app/boards/shields/corne/corne.dtsi b/app/boards/shields/corne/corne.dtsi index c5420c4..af14bae 100644 --- a/app/boards/shields/corne/corne.dtsi +++ b/app/boards/shields/corne/corne.dtsi @@ -68,7 +68,7 @@ RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10 &pro_micro_i2c { status = "okay"; - ssd1306@3c { + oled: ssd1306@3c { compatible = "solomon,ssd1306fb"; reg = <0x3c>; label = "DISPLAY"; @@ -77,7 +77,10 @@ RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10 segment-offset = <0>; page-offset = <0>; display-offset = <0>; - multiplex-ratio = <63>; + multiplex-ratio = <31>; + segment-remap; + com-invdir; + com-sequential; prechargep = <0x22>; }; }; diff --git a/app/boards/shields/lily58/lily58.dtsi b/app/boards/shields/lily58/lily58.dtsi index cbda523..24f6805 100644 --- a/app/boards/shields/lily58/lily58.dtsi +++ b/app/boards/shields/lily58/lily58.dtsi @@ -53,7 +53,7 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) &pro_micro_i2c { status = "okay"; - ssd1306@3c { + oled: ssd1306@3c { compatible = "solomon,ssd1306fb"; reg = <0x3c>; label = "DISPLAY"; -- cgit v1.2.3 From feadfc93dc5cae23afbca1cfeb6433463aee4b43 Mon Sep 17 00:00:00 2001 From: Cody McGinnis Date: Wed, 19 Aug 2020 00:07:08 -0400 Subject: feat(docs): create a bond clearing page --- docs/docs/assets/bond-clearing/corne.jpg | Bin 0 -> 147244 bytes docs/docs/assets/bond-clearing/kyria.jpg | Bin 0 -> 140236 bytes docs/docs/bond-reset.md | 26 ++++++++++++++++++++++++++ docs/sidebars.js | 2 +- 4 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 docs/docs/assets/bond-clearing/corne.jpg create mode 100644 docs/docs/assets/bond-clearing/kyria.jpg create mode 100644 docs/docs/bond-reset.md diff --git a/docs/docs/assets/bond-clearing/corne.jpg b/docs/docs/assets/bond-clearing/corne.jpg new file mode 100644 index 0000000..1e070a2 Binary files /dev/null and b/docs/docs/assets/bond-clearing/corne.jpg differ diff --git a/docs/docs/assets/bond-clearing/kyria.jpg b/docs/docs/assets/bond-clearing/kyria.jpg new file mode 100644 index 0000000..9fa22a0 Binary files /dev/null and b/docs/docs/assets/bond-clearing/kyria.jpg differ diff --git a/docs/docs/bond-reset.md b/docs/docs/bond-reset.md new file mode 100644 index 0000000..03d6dd1 --- /dev/null +++ b/docs/docs/bond-reset.md @@ -0,0 +1,26 @@ +--- +id: bond-reset +title: Reset BLE Connections +sidebar_label: BLE Reset +--- + +Known as a 'bond reset', a special key combination, that is not related to the user defined key map, which +clears all wireless connection configurations. + +:::warning +Currently, ZMK only supports a single BLE host. If you remove the keyboard from the host's bluetooth devices +list, you will need to clear the bonds. +::: + +### Split Keyboards + +Split keyboards will need to be cleared on both halves. For best results try to reset them at the same time. + + +## Kyria + +![Kyria bond-reset combo](assets/bond-clearing/kyria.jpg) + +## Corne + +![Corne bond-reset combo](assets/bond-clearing/corne.jpg) \ No newline at end of file diff --git a/docs/sidebars.js b/docs/sidebars.js index be02a65..8c7c97f 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -1,6 +1,6 @@ module.exports = { someSidebar: { - "Getting Started": ["intro", "hardware", "faq", "user-setup"], + "Getting Started": ["intro", "hardware", "faq", "user-setup", "bond-reset"], Features: [ "feature/keymaps", "feature/displays", -- cgit v1.2.3 From 02f541969cc74ec86fba3c3b01679f93fa86d698 Mon Sep 17 00:00:00 2001 From: Cody McGinnis Date: Wed, 19 Aug 2020 00:11:44 -0400 Subject: fix(docs): make time to clear explicit --- docs/docs/bond-reset.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/docs/bond-reset.md b/docs/docs/bond-reset.md index 03d6dd1..1d3732b 100644 --- a/docs/docs/bond-reset.md +++ b/docs/docs/bond-reset.md @@ -5,7 +5,8 @@ sidebar_label: BLE Reset --- Known as a 'bond reset', a special key combination, that is not related to the user defined key map, which -clears all wireless connection configurations. +clears all wireless connection configurations. The keys must be held for 3 to 5 seconds after the device is +reset. :::warning Currently, ZMK only supports a single BLE host. If you remove the keyboard from the host's bluetooth devices -- cgit v1.2.3 From 674c230dbbea00ab56c837744c6f4abc050a89ea Mon Sep 17 00:00:00 2001 From: Nick Date: Tue, 18 Aug 2020 23:28:06 -0500 Subject: fix(board): Cleanup nice!nano DT --- app/boards/arm/nice_nano/Kconfig | 1 + app/boards/arm/nice_nano/Kconfig.defconfig | 2 -- app/boards/arm/nice_nano/nice_nano.dts | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/app/boards/arm/nice_nano/Kconfig b/app/boards/arm/nice_nano/Kconfig index a190425..fb5537a 100644 --- a/app/boards/arm/nice_nano/Kconfig +++ b/app/boards/arm/nice_nano/Kconfig @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: MIT config BOARD_ENABLE_DCDC bool "Enable DCDC mode" diff --git a/app/boards/arm/nice_nano/Kconfig.defconfig b/app/boards/arm/nice_nano/Kconfig.defconfig index 2431813..0961ddd 100644 --- a/app/boards/arm/nice_nano/Kconfig.defconfig +++ b/app/boards/arm/nice_nano/Kconfig.defconfig @@ -1,5 +1,3 @@ -# Electronut Labs Papyr board configuration - # Copyright (c) 2020 Pete Johanson # SPDX-License-Identifier: MIT diff --git a/app/boards/arm/nice_nano/nice_nano.dts b/app/boards/arm/nice_nano/nice_nano.dts index c1b9cc0..2e9556b 100644 --- a/app/boards/arm/nice_nano/nice_nano.dts +++ b/app/boards/arm/nice_nano/nice_nano.dts @@ -24,7 +24,7 @@ leds { compatible = "gpio-leds"; blue_led: led_0 { - gpios = <&gpio0 15 GPIO_ACTIVE_LOW>; + gpios = <&gpio0 15 GPIO_ACTIVE_HIGH>; label = "Blue LED"; }; }; -- cgit v1.2.3 From cab34d835f244cb9f7c3cc29cd5a1a2f154a27fc Mon Sep 17 00:00:00 2001 From: Nick Date: Tue, 18 Aug 2020 23:28:34 -0500 Subject: fix(board): Fix status LED on BlueMicro --- app/boards/arm/bluemicro52840_v1/bluemicro52840_v1.dts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/boards/arm/bluemicro52840_v1/bluemicro52840_v1.dts b/app/boards/arm/bluemicro52840_v1/bluemicro52840_v1.dts index c56ca18..f8abc66 100644 --- a/app/boards/arm/bluemicro52840_v1/bluemicro52840_v1.dts +++ b/app/boards/arm/bluemicro52840_v1/bluemicro52840_v1.dts @@ -24,7 +24,7 @@ leds { compatible = "gpio-leds"; blue_led: led_0 { - gpios = <&gpio0 42 GPIO_ACTIVE_LOW>; + gpios = <&gpio0 42 GPIO_ACTIVE_HIGH>; label = "Blue LED"; }; }; -- cgit v1.2.3 From 4085145b8506257bca2aeddc46f8f249fd648cf0 Mon Sep 17 00:00:00 2001 From: Jared Giles Date: Wed, 19 Aug 2020 18:37:47 +0100 Subject: Working on corne default keymap --- app/boards/shields/corne/corne.keymap | 60 +++++++++++++++++++++++++---------- 1 file changed, 44 insertions(+), 16 deletions(-) diff --git a/app/boards/shields/corne/corne.keymap b/app/boards/shields/corne/corne.keymap index 2f7f38b..a88d036 100644 --- a/app/boards/shields/corne/corne.keymap +++ b/app/boards/shields/corne/corne.keymap @@ -2,21 +2,49 @@ #include / { - keymap { - compatible = "zmk,keymap"; + keymap { + compatible = "zmk,keymap"; - default_layer { -// --------------------------------------------------------------------------------------------------------------------------------- -// | ESC | Q | W | E | R | T | | Y | U | I | O | P | \ | -// | TAB | A | S | D | F | G | | H | J | K | L | ; | ' | -// | SHIFT | Z | X | C | V | B | | N | M | , | . | / | CTRL | -// | GUI | DEL | RET | | TAB | BSPC | R-ALT | - bindings = < - &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH - &kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SCLN &kp QUOT - &kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RCTL - &kp LGUI &kp DEL &kp RET &kp TAB &kp BKSP &kp RALT - >; - }; - }; + default_layer { +// ----------------------------------------------------------------------------------------- +// | TAB | Q | W | E | R | T | | Y | U | I | O | P | BKSP | +// | CTRL | A | S | D | F | G | | H | J | K | L | ; | ' | +// | SHFT | Z | X | C | V | B | | N | M | , | . | / | SHFT | +// | GUI | LWR | SPC | | ENT | RSE | ALT | + bindings = < + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BKSP + &kp LCTL &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SCLN &kp QUOT + &kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RSFT + &kp LGUI &mo 1 &kp SPC &kp RET &mo 2 &kp RALT + >; + }; + lower_layer { +// ----------------------------------------------------------------------------------------- +// | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | BKSP | +// | CTRL | | | | | | | RGT | UP | DWN | LFT | | | +// | SHFT | | | | | | | | | | | | | +// | GUI | | SPC | | ENT | | ALT | + bindings = < + &kp ESC &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 &kp BKSP + &kp LCTL &trans &trans &trans &trans &trans &kp RARW &kp UARW &kp DARW &kp LARW &trans &trans + &kp LSFT &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + &kp LGUI &trans &kp SPC &kp RET &trans &kp RALT + >; + }; + + raise_layer { +// ----------------------------------------------------------------------------------------- +// | ESC | ! | @ | # | $ | % | | ^ | & | * | ( | ) | BKSP | +// | CTRL | | | | | | | - | = | { | } | "|" | ` | +// | SHFT | | | | | | | _ | + | [ | ] | \ | ~ | // TODO: Fix this row when &mkp is committed +// | GUI | | SPC | | ENT | | ALT | + bindings = < + &kp ESC &kp BANG &kp ATSN &kp HASH &kp CURU &kp PRCT &kp CRRT &kp AMPS &kp KMLT &kp LPRN &kp RPRN &kp BKSP + &kp LCTL &trans &trans &trans &trans &trans &kp MINUS &kp EQL &kp LBKT &kp RBKT &kp PIPE &trans + &kp LSFT &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + &kp LGUI &trans &kp SPC &kp RET &trans &kp RALT + >; + }; + }; }; + -- cgit v1.2.3 From 93b1e0ac442234c4ce60caf6937fa764df8d9913 Mon Sep 17 00:00:00 2001 From: Okke Formsma Date: Tue, 18 Aug 2020 21:27:19 +0200 Subject: Add nrfmicro 1.1, 1.1 flipped and 1.3 boards. --- .github/workflows/build.yml | 2 +- app/boards/arm/nrfmicro/CMakeLists.txt | 14 ++++ app/boards/arm/nrfmicro/Kconfig | 5 ++ app/boards/arm/nrfmicro/Kconfig.board | 16 ++++ app/boards/arm/nrfmicro/Kconfig.defconfig | 33 ++++++++ .../arm/nrfmicro/arduino_pro_micro_pins.dtsi | 54 +++++++++++++ .../nrfmicro/arduino_pro_micro_pins_flipped.dtsi | 52 ++++++++++++ app/boards/arm/nrfmicro/board.cmake | 5 ++ app/boards/arm/nrfmicro/nrfmicro_11.dts | 93 ++++++++++++++++++++++ app/boards/arm/nrfmicro/nrfmicro_11.yaml | 15 ++++ app/boards/arm/nrfmicro/nrfmicro_11_defconfig | 22 +++++ app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts | 93 ++++++++++++++++++++++ app/boards/arm/nrfmicro/nrfmicro_11_flipped.yaml | 15 ++++ .../arm/nrfmicro/nrfmicro_11_flipped_defconfig | 22 +++++ app/boards/arm/nrfmicro/nrfmicro_13.dts | 93 ++++++++++++++++++++++ app/boards/arm/nrfmicro/nrfmicro_13.yaml | 15 ++++ app/boards/arm/nrfmicro/nrfmicro_13_defconfig | 22 +++++ app/boards/arm/nrfmicro/pinmux.c | 37 +++++++++ .../shields/kyria/boards/nrfmicro_11.overlay | 29 +++++++ .../kyria/boards/nrfmicro_11_flipped.overlay | 28 +++++++ .../shields/kyria/boards/nrfmicro_13.overlay | 28 +++++++ 21 files changed, 692 insertions(+), 1 deletion(-) create mode 100644 app/boards/arm/nrfmicro/CMakeLists.txt create mode 100644 app/boards/arm/nrfmicro/Kconfig create mode 100644 app/boards/arm/nrfmicro/Kconfig.board create mode 100644 app/boards/arm/nrfmicro/Kconfig.defconfig create mode 100644 app/boards/arm/nrfmicro/arduino_pro_micro_pins.dtsi create mode 100644 app/boards/arm/nrfmicro/arduino_pro_micro_pins_flipped.dtsi create mode 100644 app/boards/arm/nrfmicro/board.cmake create mode 100644 app/boards/arm/nrfmicro/nrfmicro_11.dts create mode 100644 app/boards/arm/nrfmicro/nrfmicro_11.yaml create mode 100644 app/boards/arm/nrfmicro/nrfmicro_11_defconfig create mode 100644 app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts create mode 100644 app/boards/arm/nrfmicro/nrfmicro_11_flipped.yaml create mode 100644 app/boards/arm/nrfmicro/nrfmicro_11_flipped_defconfig create mode 100644 app/boards/arm/nrfmicro/nrfmicro_13.dts create mode 100644 app/boards/arm/nrfmicro/nrfmicro_13.yaml create mode 100644 app/boards/arm/nrfmicro/nrfmicro_13_defconfig create mode 100644 app/boards/arm/nrfmicro/pinmux.c create mode 100644 app/boards/shields/kyria/boards/nrfmicro_11.overlay create mode 100644 app/boards/shields/kyria/boards/nrfmicro_11_flipped.overlay create mode 100644 app/boards/shields/kyria/boards/nrfmicro_13.overlay diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 98ca44d..8a2ea9a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -8,7 +8,7 @@ jobs: name: Build Test strategy: matrix: - board: [proton_c, nice_nano, bluemicro52840_v1] + board: [proton_c, nice_nano, bluemicro52840_v1, nrfmicro_13] shield: - corne_left - corne_right diff --git a/app/boards/arm/nrfmicro/CMakeLists.txt b/app/boards/arm/nrfmicro/CMakeLists.txt new file mode 100644 index 0000000..cd4843a --- /dev/null +++ b/app/boards/arm/nrfmicro/CMakeLists.txt @@ -0,0 +1,14 @@ +set_property(GLOBAL APPEND PROPERTY extra_post_build_commands + COMMAND ${PYTHON_EXECUTABLE} ${ZEPHYR_BASE}/../tools/uf2/utils/uf2conv.py + -c + -b 0x26000 + -f 0xADA52840 + -o ${PROJECT_BINARY_DIR}/${CONFIG_KERNEL_BIN_NAME}.uf2 + ${PROJECT_BINARY_DIR}/${CONFIG_KERNEL_BIN_NAME}.bin +) + +if(CONFIG_PINMUX) +zephyr_library() +zephyr_library_sources(pinmux.c) +zephyr_library_include_directories(${ZEPHYR_BASE}/drivers) +endif() \ No newline at end of file diff --git a/app/boards/arm/nrfmicro/Kconfig b/app/boards/arm/nrfmicro/Kconfig new file mode 100644 index 0000000..17a3347 --- /dev/null +++ b/app/boards/arm/nrfmicro/Kconfig @@ -0,0 +1,5 @@ +config BOARD_ENABLE_DCDC + bool "Enable DCDC mode" + select SOC_DCDC_NRF52X + default y + depends on (BOARD_NRFMICRO_11 || BOARD_NRFMICRO_11_FLIPPED || BOARD_NRFMICRO_13) diff --git a/app/boards/arm/nrfmicro/Kconfig.board b/app/boards/arm/nrfmicro/Kconfig.board new file mode 100644 index 0000000..177373a --- /dev/null +++ b/app/boards/arm/nrfmicro/Kconfig.board @@ -0,0 +1,16 @@ +# nrfmicro board configuration + +# Copyright (c) 2020 Okke Formsma, joric +# SPDX-License-Identifier: MIT + +config BOARD_NRFMICRO_11 + bool "nrfmicro_11" + depends on SOC_NRF52840_QIAA + +config BOARD_NRFMICRO_11_FLIPPED + bool "nrfmicro_11_flipped" + depends on SOC_NRF52840_QIAA + +config BOARD_NRFMICRO_13 + bool "nrfmicro_13" + depends on SOC_NRF52840_QIAA diff --git a/app/boards/arm/nrfmicro/Kconfig.defconfig b/app/boards/arm/nrfmicro/Kconfig.defconfig new file mode 100644 index 0000000..2212277 --- /dev/null +++ b/app/boards/arm/nrfmicro/Kconfig.defconfig @@ -0,0 +1,33 @@ +# Electronut Labs Papyr board configuration + +# Copyright (c) 2020 Okke Formsma, joric +# SPDX-License-Identifier: MIT + +if BOARD_NRFMICRO_11 || BOARD_NRFMICRO_11_FLIPPED || BOARD_NRFMICRO_13 + +config BOARD + default "nrfmicro" + +if USB + +config USB_NRFX + default y + +config USB_DEVICE_STACK + default y + +endif # USB + +config BT_CTLR + default BT + +config ZMK_BLE + default y + +config ZMK_USB + default y + +config PINMUX + default y + +endif # BOARD_NRFMICRO_11 || BOARD_NRFMICRO_11_FLIPPED || BOARD_NRFMICRO_13 diff --git a/app/boards/arm/nrfmicro/arduino_pro_micro_pins.dtsi b/app/boards/arm/nrfmicro/arduino_pro_micro_pins.dtsi new file mode 100644 index 0000000..6cde2b4 --- /dev/null +++ b/app/boards/arm/nrfmicro/arduino_pro_micro_pins.dtsi @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2020 Okke Formsma, joric + * + * SPDX-License-Identifier: MIT + */ + + +/ { + pro_micro_d: connector_d { + compatible = "arduino-pro-micro"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <0 0 &gpio0 8 0> /* D0 */ + , <1 0 &gpio0 6 0> /* D1 */ + , <2 0 &gpio0 15 0> /* D2 */ + , <3 0 &gpio0 17 0> /* D3 */ + , <4 0 &gpio0 20 0> /* D4/A6 */ + , <5 0 &gpio0 13 0> /* D5 */ + , <6 0 &gpio0 24 0> /* D6/A7 */ + , <7 0 &gpio0 9 0> /* D7 */ + , <8 0 &gpio0 10 0> /* D8/A8 */ + , <9 0 &gpio1 6 0> /* D9/A9 */ + , <10 0 &gpio1 11 0> /* D10/A10 */ + , <16 0 &gpio0 28 0> /* D16 */ + , <14 0 &gpio0 3 0> /* D14 */ + , <15 0 &gpio1 13 0> /* D15 */ + ; + }; + + pro_micro_a: connector_a { + compatible = "arduino-pro-micro"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <0 0 &gpio0 2 0> /* A0 */ + , <1 0 &gpio0 29 0> /* A1 */ + , <2 0 &gpio0 31 0> /* A2 */ + , <3 0 &gpio0 30 0> /* A3 */ + , <6 0 &gpio0 20 0> /* D4/A6 */ + , <7 0 &gpio0 24 0> /* D6/A7 */ + , <8 0 &gpio0 10 0> /* D8/A8 */ + , <9 0 &gpio1 6 0> /* D9/A9 */ + , <10 0 &gpio1 11 0> /* D10/A10 */ + ; + }; +}; + + +pro_micro_i2c: &i2c0 {}; +pro_micro_spi: &spi0 {}; +pro_micro_serial: &uart0 {}; diff --git a/app/boards/arm/nrfmicro/arduino_pro_micro_pins_flipped.dtsi b/app/boards/arm/nrfmicro/arduino_pro_micro_pins_flipped.dtsi new file mode 100644 index 0000000..9bad7f4 --- /dev/null +++ b/app/boards/arm/nrfmicro/arduino_pro_micro_pins_flipped.dtsi @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2020 Okke Formsma, joric + * + * SPDX-License-Identifier: MIT + */ + +/ { + pro_micro_d: connector_d { + compatible = "arduino-pro-micro"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <0 0 &gpio0 8 0> /* D0 */ + , <1 0 &gpio0 6 0> /* D1 */ + , <2 0 &gpio0 30 0> /* D2 */ + , <3 0 &gpio0 31 0> /* D3 */ + , <4 0 &gpio0 29 0> /* D4/A6 */ + , <5 0 &gpio0 2 0> /* D5 */ + , <6 0 &gpio1 13 0> /* D6/A7 */ + , <7 0 &gpio0 3 0> /* D7 */ + , <8 0 &gpio0 28 0> /* D8/A8 */ + , <9 0 &gpio1 11 0> /* D9/A9 */ + , <10 0 &gpio1 6 0> /* D10/A10 */ + , <16 0 &gpio0 10 0> /* D16 */ + , <14 0 &gpio0 9 0> /* D14 */ + , <15 0 &gpio0 24 0> /* D15 */ + ; + }; + + pro_micro_a: connector_a { + compatible = "arduino-pro-micro"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <0 0 &gpio0 13 0> /* A0 */ + , <1 0 &gpio0 20 0> /* A1 */ + , <2 0 &gpio0 17 0> /* A2 */ + , <3 0 &gpio0 15 0> /* A3 */ + , <6 0 &gpio0 29 0> /* D4/A6 */ + , <7 0 &gpio1 13 0> /* D6/A7 */ + , <8 0 &gpio0 28 0> /* D8/A8 */ + , <9 0 &gpio1 11 0> /* D9/A9 */ + , <10 0 &gpio1 6 0> /* D10/A10 */ + ; + }; +}; + +pro_micro_i2c: &i2c0 {}; +pro_micro_spi: &spi0 {}; +pro_micro_serial: &uart0 {}; diff --git a/app/boards/arm/nrfmicro/board.cmake b/app/boards/arm/nrfmicro/board.cmake new file mode 100644 index 0000000..fa847d5 --- /dev/null +++ b/app/boards/arm/nrfmicro/board.cmake @@ -0,0 +1,5 @@ +# SPDX-License-Identifier: MIT + +board_runner_args(nrfjprog "--nrf-family=NRF52" "--softreset") +include(${ZEPHYR_BASE}/boards/common/blackmagicprobe.board.cmake) +include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) diff --git a/app/boards/arm/nrfmicro/nrfmicro_11.dts b/app/boards/arm/nrfmicro/nrfmicro_11.dts new file mode 100644 index 0000000..dc07ac8 --- /dev/null +++ b/app/boards/arm/nrfmicro/nrfmicro_11.dts @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2020 Okke Formsma, joric + * + * SPDX-License-Identifier: MIT + */ + +/dts-v1/; +#include +#include "arduino_pro_micro_pins.dtsi" + +/ { + model = "nrfmicro"; + compatible = "joric,nrfmicro"; + + chosen { + zephyr,code-partition = &code_partition; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + }; + + leds { + compatible = "gpio-leds"; + blue_led: led_0 { + gpios = <&gpio1 10 GPIO_ACTIVE_HIGH>; + label = "Blue LED"; + }; + }; + +}; + +&gpio0 { + status = "okay"; +}; + +&gpio1 { + status = "okay"; +}; + +&i2c0 { + compatible = "nordic,nrf-twi"; + sda-pin = <15>; + scl-pin = <17>; +}; + +&uart0 { + compatible = "nordic,nrf-uarte"; + status = "okay"; + current-speed = <115200>; + tx-pin = <39>; + rx-pin = <34>; + rts-pin = <33>; + cts-pin = <12>; +}; + +&usbd { + status = "okay"; +}; + + +&flash0 { + /* + * For more information, see: + * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + boot_partition: partition@0 { + label = "adafruit_boot"; + reg = <0x000000000 0x0000C000>; + }; + code_partition: partition@26000 { + label = "code_partition"; + reg = <0x00026000 0x000d2000>; + }; + + /* + * The flash starting at 0x000f8000 and ending at + * 0x000fffff is reserved for use by the application. + */ + + /* + * Storage partition will be used by FCB/LittleFS/NVS + * if enabled. + */ + storage_partition: partition@f8000 { + label = "storage"; + reg = <0x000f8000 0x00008000>; + }; + }; +}; diff --git a/app/boards/arm/nrfmicro/nrfmicro_11.yaml b/app/boards/arm/nrfmicro/nrfmicro_11.yaml new file mode 100644 index 0000000..4608130 --- /dev/null +++ b/app/boards/arm/nrfmicro/nrfmicro_11.yaml @@ -0,0 +1,15 @@ +identifier: nrfmicro_11 +name: nrfmicro_11 +type: mcu +arch: arm +toolchain: + - zephyr + - gnuarmemb + - xtools +supported: + - adc + - usb_device + - ble + - ieee802154 + - pwm + - watchdog diff --git a/app/boards/arm/nrfmicro/nrfmicro_11_defconfig b/app/boards/arm/nrfmicro/nrfmicro_11_defconfig new file mode 100644 index 0000000..c1ac836 --- /dev/null +++ b/app/boards/arm/nrfmicro/nrfmicro_11_defconfig @@ -0,0 +1,22 @@ +# SPDX-License-Identifier: MIT + +CONFIG_SOC_SERIES_NRF52X=y +CONFIG_SOC_NRF52840_QIAA=y +CONFIG_BOARD_NRFMICRO_11=y + +# Enable MPU +CONFIG_ARM_MPU=y + +# enable GPIO +CONFIG_GPIO=y + +CONFIG_USE_DT_CODE_PARTITION=y + +CONFIG_MPU_ALLOW_FLASH_WRITE=y +CONFIG_NVS=y +CONFIG_SETTINGS_NVS=y +CONFIG_FLASH=y +CONFIG_FLASH_PAGE_LAYOUT=y +CONFIG_FLASH_MAP=y +CONFIG_CLOCK_CONTROL_NRF=y +CONFIG_CLOCK_CONTROL_NRF_K32SRC_RC=y diff --git a/app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts b/app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts new file mode 100644 index 0000000..5bf493f --- /dev/null +++ b/app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2020 Okke Formsma, joric + * + * SPDX-License-Identifier: MIT + */ + +/dts-v1/; +#include +#include "arduino_pro_micro_pins_flipped.dtsi" + +/ { + model = "nrfmicro"; + compatible = "joric,nrfmicro"; + + chosen { + zephyr,code-partition = &code_partition; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + }; + + leds { + compatible = "gpio-leds"; + blue_led: led_0 { + gpios = <&gpio1 10 GPIO_ACTIVE_HIGH>; + label = "Blue LED"; + }; + }; + +}; + +&gpio0 { + status = "okay"; +}; + +&gpio1 { + status = "okay"; +}; + +&i2c0 { + compatible = "nordic,nrf-twi"; + sda-pin = <30>; + scl-pin = <31>; +}; + +&uart0 { + compatible = "nordic,nrf-uarte"; + status = "okay"; + current-speed = <115200>; + tx-pin = <39>; + rx-pin = <34>; + rts-pin = <33>; + cts-pin = <12>; +}; + +&usbd { + status = "okay"; +}; + + +&flash0 { + /* + * For more information, see: + * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + boot_partition: partition@0 { + label = "adafruit_boot"; + reg = <0x000000000 0x0000C000>; + }; + code_partition: partition@26000 { + label = "code_partition"; + reg = <0x00026000 0x000d2000>; + }; + + /* + * The flash starting at 0x000f8000 and ending at + * 0x000fffff is reserved for use by the application. + */ + + /* + * Storage partition will be used by FCB/LittleFS/NVS + * if enabled. + */ + storage_partition: partition@f8000 { + label = "storage"; + reg = <0x000f8000 0x00008000>; + }; + }; +}; diff --git a/app/boards/arm/nrfmicro/nrfmicro_11_flipped.yaml b/app/boards/arm/nrfmicro/nrfmicro_11_flipped.yaml new file mode 100644 index 0000000..74461f0 --- /dev/null +++ b/app/boards/arm/nrfmicro/nrfmicro_11_flipped.yaml @@ -0,0 +1,15 @@ +identifier: nrfmicro_11_flipped +name: nrfmicro_11_flipped +type: mcu +arch: arm +toolchain: + - zephyr + - gnuarmemb + - xtools +supported: + - adc + - usb_device + - ble + - ieee802154 + - pwm + - watchdog diff --git a/app/boards/arm/nrfmicro/nrfmicro_11_flipped_defconfig b/app/boards/arm/nrfmicro/nrfmicro_11_flipped_defconfig new file mode 100644 index 0000000..b35cb79 --- /dev/null +++ b/app/boards/arm/nrfmicro/nrfmicro_11_flipped_defconfig @@ -0,0 +1,22 @@ +# SPDX-License-Identifier: MIT + +CONFIG_SOC_SERIES_NRF52X=y +CONFIG_SOC_NRF52840_QIAA=y +CONFIG_BOARD_NRFMICRO_11_FLIPPED=y + +# Enable MPU +CONFIG_ARM_MPU=y + +# enable GPIO +CONFIG_GPIO=y + +CONFIG_USE_DT_CODE_PARTITION=y + +CONFIG_MPU_ALLOW_FLASH_WRITE=y +CONFIG_NVS=y +CONFIG_SETTINGS_NVS=y +CONFIG_FLASH=y +CONFIG_FLASH_PAGE_LAYOUT=y +CONFIG_FLASH_MAP=y +CONFIG_CLOCK_CONTROL_NRF=y +CONFIG_CLOCK_CONTROL_NRF_K32SRC_RC=y diff --git a/app/boards/arm/nrfmicro/nrfmicro_13.dts b/app/boards/arm/nrfmicro/nrfmicro_13.dts new file mode 100644 index 0000000..dc07ac8 --- /dev/null +++ b/app/boards/arm/nrfmicro/nrfmicro_13.dts @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2020 Okke Formsma, joric + * + * SPDX-License-Identifier: MIT + */ + +/dts-v1/; +#include +#include "arduino_pro_micro_pins.dtsi" + +/ { + model = "nrfmicro"; + compatible = "joric,nrfmicro"; + + chosen { + zephyr,code-partition = &code_partition; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + }; + + leds { + compatible = "gpio-leds"; + blue_led: led_0 { + gpios = <&gpio1 10 GPIO_ACTIVE_HIGH>; + label = "Blue LED"; + }; + }; + +}; + +&gpio0 { + status = "okay"; +}; + +&gpio1 { + status = "okay"; +}; + +&i2c0 { + compatible = "nordic,nrf-twi"; + sda-pin = <15>; + scl-pin = <17>; +}; + +&uart0 { + compatible = "nordic,nrf-uarte"; + status = "okay"; + current-speed = <115200>; + tx-pin = <39>; + rx-pin = <34>; + rts-pin = <33>; + cts-pin = <12>; +}; + +&usbd { + status = "okay"; +}; + + +&flash0 { + /* + * For more information, see: + * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + boot_partition: partition@0 { + label = "adafruit_boot"; + reg = <0x000000000 0x0000C000>; + }; + code_partition: partition@26000 { + label = "code_partition"; + reg = <0x00026000 0x000d2000>; + }; + + /* + * The flash starting at 0x000f8000 and ending at + * 0x000fffff is reserved for use by the application. + */ + + /* + * Storage partition will be used by FCB/LittleFS/NVS + * if enabled. + */ + storage_partition: partition@f8000 { + label = "storage"; + reg = <0x000f8000 0x00008000>; + }; + }; +}; diff --git a/app/boards/arm/nrfmicro/nrfmicro_13.yaml b/app/boards/arm/nrfmicro/nrfmicro_13.yaml new file mode 100644 index 0000000..a7415e4 --- /dev/null +++ b/app/boards/arm/nrfmicro/nrfmicro_13.yaml @@ -0,0 +1,15 @@ +identifier: nrfmicro_13 +name: nrfmicro_13 +type: mcu +arch: arm +toolchain: + - zephyr + - gnuarmemb + - xtools +supported: + - adc + - usb_device + - ble + - ieee802154 + - pwm + - watchdog diff --git a/app/boards/arm/nrfmicro/nrfmicro_13_defconfig b/app/boards/arm/nrfmicro/nrfmicro_13_defconfig new file mode 100644 index 0000000..cac1164 --- /dev/null +++ b/app/boards/arm/nrfmicro/nrfmicro_13_defconfig @@ -0,0 +1,22 @@ +# SPDX-License-Identifier: MIT + +CONFIG_SOC_SERIES_NRF52X=y +CONFIG_SOC_NRF52840_QIAA=y +CONFIG_BOARD_NRFMICRO_13=y + +# Enable MPU +CONFIG_ARM_MPU=y + +# enable GPIO +CONFIG_GPIO=y + +CONFIG_USE_DT_CODE_PARTITION=y + +CONFIG_MPU_ALLOW_FLASH_WRITE=y +CONFIG_NVS=y +CONFIG_SETTINGS_NVS=y +CONFIG_FLASH=y +CONFIG_FLASH_PAGE_LAYOUT=y +CONFIG_FLASH_MAP=y +CONFIG_CLOCK_CONTROL_NRF=y +CONFIG_CLOCK_CONTROL_NRF_K32SRC_RC=y diff --git a/app/boards/arm/nrfmicro/pinmux.c b/app/boards/arm/nrfmicro/pinmux.c new file mode 100644 index 0000000..803d20d --- /dev/null +++ b/app/boards/arm/nrfmicro/pinmux.c @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2020 Okke Formsma, joric + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include +#include +#include + +static int pinmux_nrfmicro_init(struct device *port) +{ + ARG_UNUSED(port); + + struct device *p1 = device_get_binding("GPIO_1"); + +#if defined(BOARD_NRFMICRO_13) + struct device *p0 = device_get_binding("GPIO_0"); + // enable EXT_VCC (use 0 for nRFMicro 1.3, use 1 for nRFMicro 1.1) + gpio_pin_configure(p1, 9, GPIO_OUTPUT); + gpio_pin_set(p1, 9, 0); + + // enable charger (nRFMicro 1.3 only) + gpio_pin_configure(p0, 5, GPIO_OUTPUT); + gpio_pin_set(p0, 5, 0); +#else + // enable EXT_VCC (use 0 for nRFMicro 1.3, use 1 for nRFMicro 1.1) + gpio_pin_configure(p1, 9, GPIO_OUTPUT); + gpio_pin_set(p1, 9, 1); +#endif + return 0; +} + +SYS_INIT(pinmux_nrfmicro_init, APPLICATION, CONFIG_APPLICATION_INIT_PRIORITY); \ No newline at end of file diff --git a/app/boards/shields/kyria/boards/nrfmicro_11.overlay b/app/boards/shields/kyria/boards/nrfmicro_11.overlay new file mode 100644 index 0000000..d7f724f --- /dev/null +++ b/app/boards/shields/kyria/boards/nrfmicro_11.overlay @@ -0,0 +1,29 @@ +&spi1 { + compatible = "nordic,nrf-spi"; + status = "okay"; + mosi-pin = <6>; + // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. + sck-pin = <12>; // 0.12 is not broken out on the nRFMicro + miso-pin = <22>; // 0.22 is not broken out on the nRFMicro + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; + diff --git a/app/boards/shields/kyria/boards/nrfmicro_11_flipped.overlay b/app/boards/shields/kyria/boards/nrfmicro_11_flipped.overlay new file mode 100644 index 0000000..c5f2a94 --- /dev/null +++ b/app/boards/shields/kyria/boards/nrfmicro_11_flipped.overlay @@ -0,0 +1,28 @@ +&spi1 { + compatible = "nordic,nrf-spi"; + status = "okay"; + mosi-pin = <6>; + // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. + sck-pin = <12>; // 0.12 is not broken out on the nRFMicro + miso-pin = <22>; // 0.22 is not broken out on the nRFMicro + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/app/boards/shields/kyria/boards/nrfmicro_13.overlay b/app/boards/shields/kyria/boards/nrfmicro_13.overlay new file mode 100644 index 0000000..c5f2a94 --- /dev/null +++ b/app/boards/shields/kyria/boards/nrfmicro_13.overlay @@ -0,0 +1,28 @@ +&spi1 { + compatible = "nordic,nrf-spi"; + status = "okay"; + mosi-pin = <6>; + // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. + sck-pin = <12>; // 0.12 is not broken out on the nRFMicro + miso-pin = <22>; // 0.22 is not broken out on the nRFMicro + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; -- cgit v1.2.3 From aa187a54d475b6ac6fe8c78f9365332465ed3029 Mon Sep 17 00:00:00 2001 From: CrossR Date: Wed, 19 Aug 2020 20:18:27 +0100 Subject: Fix keymap. --- app/boards/shields/sofle/sofle.dtsi | 18 +++++------ app/boards/shields/sofle/sofle.keymap | 56 +++++++++++++++++------------------ 2 files changed, 36 insertions(+), 38 deletions(-) diff --git a/app/boards/shields/sofle/sofle.dtsi b/app/boards/shields/sofle/sofle.dtsi index 4c220a2..d6f29d3 100644 --- a/app/boards/shields/sofle/sofle.dtsi +++ b/app/boards/shields/sofle/sofle.dtsi @@ -19,14 +19,14 @@ // | SW6 | SW5 | SW4 | SW3 | SW2 | SW1 | | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 | // | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | // | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 | | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 | -// | SW24 | SW23 | SW22 | SW21 | SW20 | SW19 | | SW19 | SW20 | SW21 | SW22 | SW23 | SW24 | -// | SW29 | SW28 | SW27 | SW26 | SW25 | | SW25 | SW26 | SW27 | SW28 | SW29 | +// | SW24 | SW23 | SW22 | SW21 | SW20 | SW19 | SW25 | | SW25 | SW19 | SW20 | SW21 | SW22 | SW23 | SW24 | +// | SW30 | SW29 | SW28 | SW27 | SW26 | | SW26 | SW27 | SW28 | SW29 | SW30 | map = < -RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) -RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) -RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) -RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) - RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,9) RC(4,10) RC(4,11) RC(4,12) RC(4,13) +RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) +RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) +RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) +RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) + RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,7) RC(4,8) RC(4,9) RC(4,10) RC(4,11) >; }; @@ -49,7 +49,7 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) left_encoder: encoder_left { compatible = "alps,ec11"; label = "LEFT_ENCODER"; - a-gpios = <&pro_micro_a 1 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + a-gpios = <&pro_micro_a 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&pro_micro_a 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; resolution = <2>; status = "disabled"; @@ -59,7 +59,7 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) compatible = "alps,ec11"; label = "RIGHT_ENCODER"; a-gpios = <&pro_micro_a 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - b-gpios = <&pro_micro_a 1 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro_a 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; resolution = <2>; status = "disabled"; }; diff --git a/app/boards/shields/sofle/sofle.keymap b/app/boards/shields/sofle/sofle.keymap index 45c20cb..02f4560 100644 --- a/app/boards/shields/sofle/sofle.keymap +++ b/app/boards/shields/sofle/sofle.keymap @@ -1,25 +1,23 @@ #include #include -//TODO: Is the encoder stuff needed on every single layer? - / { keymap { compatible = "zmk,keymap"; default_layer { // ------------------------------------------------------------------------------------------------------------ -// | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` | -// | ESC | Q | W | E | R | T | | Y | U | I | O | P | Bkspc | -// | CTRL | A | S | D | F | G | | H | J | K | L | ; | ' | -// | SHIFT | Z | X | C | V | B | | N | M | , | . | / | SHIFT | +// | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | | +// | ESC | Q | W | E | R | T | | Y | U | I | O | P | BKSPC | +// | TAB | A | S | D | F | G | | H | J | K | L | ; | ' | +// | SHIFT | Z | X | C | V | B | MUTE | | | N | M | , | . | / | SHIFT | // | GUI | ALT | CTRL | LOWER| ENTER | | SPACE | RAISE| CTRL | ALT | GUI | bindings = < -&kp GRAV &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 &kp GRAV -&kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BKSP -&kp LCTL &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SCLN &kp QUOT -&kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RSFT - &kp LGUI &kp LALT &kp LCTL &mo 1 &kp RET &kp SPC &mo 2 &kp RCTL &kp RALT &kp RGUI +&kp GRAV &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 &none +&kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BKSP +&kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SCLN &kp QUOT +&kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp M_MUTE &none &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RSFT + &kp LGUI &kp LALT &kp LCTL &mo 1 &kp RET &kp SPC &mo 2 &kp RCTL &kp RALT &kp RGUI >; sensor-bindings = <&inc_dec_cp M_VOLU M_VOLD &inc_dec_kp PGUP PGDN>; @@ -28,16 +26,16 @@ lower_layer { // ------------------------------------------------------------------------------------------------------------ // | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 | -// | | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | F12 | -// | TAB | ! | @ | # | $ | % | | ^ | & | * | ( | ) | | | -// | | = | - | + | { | } | | [ | ] | ; | : | \ | | +// | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | F12 | +// | | ! | @ | # | $ | % | | ^ | & | * | ( | ) | | | +// | | = | - | + | { | } | | | | [ | ] | ; | : | \ | | // | | | | | | | | | | | | bindings = < -&trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 -&trans &kp 1 &kp 2 &kp 3 &kp 4 &kp 5 &kp 6 &kp 7 &kp 8 &kp 9 &kp 0 &kp F12 -&kp TAB &kp BANG &kp ATSN &kp HASH &kp CURU &kp PRCT &kp CRRT &kp AMPS &kp KMLT &kp LPRN &kp RPRN &kp PIPE -&trans &kp EQL &kp MINUS &kp KPLS &kp LCUR &kp RCUR &kp LBKT &kp RKBT &kp SCLN &kp COLN &kp BSLH &trans - &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans +&trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 +&kp GRAV &kp 1 &kp 2 &kp 3 &kp 4 &kp 5 &kp 6 &kp 7 &kp 8 &kp 9 &kp 0 &kp F12 +&trans &kp BANG &kp ATSN &kp HASH &kp CURU &kp PRCT &kp CRRT &kp AMPS &kp KMLT &kp LPRN &kp RPRN &kp PIPE +&trans &kp EQL &kp MINUS &kp KPLS &kp LCUR &kp RCUR &trans &trans &kp LBKT &kp RKBT &kp SCLN &kp COLN &kp BSLH &trans + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans >; sensor-bindings = <&inc_dec_cp M_VOLU M_VOLD &inc_dec_kp PGUP PGDN>; @@ -45,17 +43,17 @@ raise_layer { // ------------------------------------------------------------------------------------------------------------ -// | | | | | | | | | | | | | | -// | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | | -// | F1 | F2 | F3 | F4 | F5 | F6 | | | <- | ^ | v | -> | | -// | F7 | F8 | F9 | F10 | F11 | F12 | | + | - | = | [ | ] | \ | -// | | | | | | | | | | | | +// | | | | | | | | | | | | | | +// | | INS | PSCR | GUI | | | | PGUP | | ^ | | | | +// | | ALT | CTRL | SHIFT | | CAPS | | PGDN | <- | v | -> | DEL | BKSPC | +// | | UNDO | CUT | COPY | PASTE | | | | | | | | | | | +// | | | | | | | | | | | | bindings = < -&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans -&kp GRAV &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 &trans -&kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &trans &kp LARW &kp UARW &kp DARW & RARW &trans -&kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp KPLS &kp MINUS &kp EQL &kp LBKT &kp RBKT &kp BSLH - &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans +&trans &kp INS &kp PRSC &kp GUI &trans &trans &kp PGUP &trans &kp UARW &trans &kp NUM_0 &trans +&trans &kp LALT &kp LCTL &kp LSFT &trans &kp CLCK &kp PGDN &kp LARW &kp DARW &kp RARW &kp DEL &kp BKSP +&trans &kp 0x7A &kp 0x7B &kp 0x7C &kp 0x7D &trans &trans &trans &trans &trans &trans &trans &trans &trans + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans >; }; -- cgit v1.2.3 From dcd36f12e049ee2c423204ebaaa3c16062d9fd5e Mon Sep 17 00:00:00 2001 From: CrossR Date: Wed, 19 Aug 2020 20:53:22 +0100 Subject: Add BT clear bind. Should check the positions are correct. --- app/boards/shields/sofle/sofle.dtsi | 122 ++++++++++++++------------- app/boards/shields/sofle/sofle_left.conf | 3 +- app/boards/shields/sofle/sofle_left.overlay | 3 + app/boards/shields/sofle/sofle_right.conf | 1 + app/boards/shields/sofle/sofle_right.overlay | 4 + 5 files changed, 72 insertions(+), 61 deletions(-) diff --git a/app/boards/shields/sofle/sofle.dtsi b/app/boards/shields/sofle/sofle.dtsi index d6f29d3..1a5ea84 100644 --- a/app/boards/shields/sofle/sofle.dtsi +++ b/app/boards/shields/sofle/sofle.dtsi @@ -7,85 +7,87 @@ #include / { - chosen { - zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; - }; + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; - default_transform: keymap_transform_0 { - compatible = "zmk,matrix-transform"; - columns = <16>; - rows = <4>; + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <16>; + rows = <4>; // | SW6 | SW5 | SW4 | SW3 | SW2 | SW1 | | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 | // | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | // | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 | | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 | // | SW24 | SW23 | SW22 | SW21 | SW20 | SW19 | SW25 | | SW25 | SW19 | SW20 | SW21 | SW22 | SW23 | SW24 | // | SW30 | SW29 | SW28 | SW27 | SW26 | | SW26 | SW27 | SW28 | SW29 | SW30 | - map = < + map = < RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,7) RC(4,8) RC(4,9) RC(4,10) RC(4,11) - >; - }; + >; + }; - kscan0: kscan { - compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; - diode-direction = "col2row"; - row-gpios - = <&pro_micro_d 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - ; - }; + diode-direction = "col2row"; + row-gpios + = <&pro_micro_d 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + }; - // TODO: Check these pins and resolution! + left_encoder: encoder_left { + compatible = "alps,ec11"; + label = "LEFT_ENCODER"; + a-gpios = <&pro_micro_a 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro_a 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + resolution = <2>; + status = "disabled"; + }; - left_encoder: encoder_left { - compatible = "alps,ec11"; - label = "LEFT_ENCODER"; - a-gpios = <&pro_micro_a 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - b-gpios = <&pro_micro_a 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - resolution = <2>; - status = "disabled"; - }; + right_encoder: encoder_right { + compatible = "alps,ec11"; + label = "RIGHT_ENCODER"; + a-gpios = <&pro_micro_a 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro_a 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + resolution = <2>; + status = "disabled"; + }; - right_encoder: encoder_right { - compatible = "alps,ec11"; - label = "RIGHT_ENCODER"; - a-gpios = <&pro_micro_a 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - b-gpios = <&pro_micro_a 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - resolution = <2>; - status = "disabled"; - }; + sensors { + compatible = "zmk,keymap-sensors"; + sensors = <&left_encoder &right_encoder>; + }; - sensors { - compatible = "zmk,keymap-sensors"; - sensors = <&left_encoder &right_encoder>; - }; + bt_unpair_combo: bt_unpair_combo { + compatible = "zmk,bt-unpair-combo"; + }; }; &pro_micro_i2c { - status = "okay"; + status = "okay"; - ssd1306@3c { - compatible = "solomon,ssd1306fb"; - reg = <0x3c>; - label = "DISPLAY"; - width = <128>; - height = <32>; - segment-offset = <0>; - page-offset = <0>; - display-offset = <0>; - multiplex-ratio = <31>; - segment-remap; - com-invdir; - com-sequential; - prechargep = <0x22>; - }; + ssd1306@3c { + compatible = "solomon,ssd1306fb"; + reg = <0x3c>; + label = "DISPLAY"; + width = <128>; + height = <32>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <31>; + segment-remap; + com-invdir; + com-sequential; + prechargep = <0x22>; + }; }; diff --git a/app/boards/shields/sofle/sofle_left.conf b/app/boards/shields/sofle/sofle_left.conf index e51dee4..d2d1e3c 100644 --- a/app/boards/shields/sofle/sofle_left.conf +++ b/app/boards/shields/sofle/sofle_left.conf @@ -1,2 +1,3 @@ CONFIG_ZMK_SPLIT=y -CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL=y \ No newline at end of file +CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL=y +CONFIG_ZMK_BLE_UNPAIR_COMBO=y diff --git a/app/boards/shields/sofle/sofle_left.overlay b/app/boards/shields/sofle/sofle_left.overlay index bcfb558..f6719dd 100644 --- a/app/boards/shields/sofle/sofle_left.overlay +++ b/app/boards/shields/sofle/sofle_left.overlay @@ -21,3 +21,6 @@ status = "okay"; }; +&bt_unpair_combo { + key-positions = <0 52>; +}; diff --git a/app/boards/shields/sofle/sofle_right.conf b/app/boards/shields/sofle/sofle_right.conf index 990cf7c..cf16779 100644 --- a/app/boards/shields/sofle/sofle_right.conf +++ b/app/boards/shields/sofle/sofle_right.conf @@ -1,2 +1,3 @@ CONFIG_ZMK_SPLIT=y CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL=y +CONFIG_ZMK_BLE_UNPAIR_COMBO=y diff --git a/app/boards/shields/sofle/sofle_right.overlay b/app/boards/shields/sofle/sofle_right.overlay index 133f926..ee1a606 100644 --- a/app/boards/shields/sofle/sofle_right.overlay +++ b/app/boards/shields/sofle/sofle_right.overlay @@ -24,3 +24,7 @@ &right_encoder { status = "okay"; }; + +&bt_unpair_combo { + key-positions = <11 55>; +}; -- cgit v1.2.3 From 506c3b031e042430149cd663a561a13cd6e5835b Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Wed, 19 Aug 2020 16:35:18 -0400 Subject: refactor(boards): Rename to bluemicro840_v1. --- .github/workflows/build.yml | 2 +- app/boards/arm/bluemicro52840_v1/CMakeLists.txt | 8 -- app/boards/arm/bluemicro52840_v1/Kconfig | 8 -- app/boards/arm/bluemicro52840_v1/Kconfig.board | 8 -- app/boards/arm/bluemicro52840_v1/Kconfig.defconfig | 30 ------- .../bluemicro52840_v1/arduino_pro_micro_pins.dtsi | 52 ------------ .../arm/bluemicro52840_v1/bluemicro52840_v1.dts | 96 ---------------------- .../arm/bluemicro52840_v1/bluemicro52840_v1.yaml | 15 ---- .../bluemicro52840_v1/bluemicro52840_v1_defconfig | 20 ----- app/boards/arm/bluemicro52840_v1/board.cmake | 5 -- app/boards/arm/bluemicro840/CMakeLists.txt | 8 ++ app/boards/arm/bluemicro840/Kconfig | 8 ++ app/boards/arm/bluemicro840/Kconfig.board | 8 ++ app/boards/arm/bluemicro840/Kconfig.defconfig | 30 +++++++ .../arm/bluemicro840/arduino_pro_micro_pins.dtsi | 52 ++++++++++++ app/boards/arm/bluemicro840/bluemicro840_v1.dts | 96 ++++++++++++++++++++++ app/boards/arm/bluemicro840/bluemicro840_v1.yaml | 15 ++++ .../arm/bluemicro840/bluemicro840_v1_defconfig | 20 +++++ app/boards/arm/bluemicro840/board.cmake | 5 ++ docs/docs/hardware.md | 2 + docs/static/setup.sh | 4 +- 21 files changed, 247 insertions(+), 245 deletions(-) delete mode 100644 app/boards/arm/bluemicro52840_v1/CMakeLists.txt delete mode 100644 app/boards/arm/bluemicro52840_v1/Kconfig delete mode 100644 app/boards/arm/bluemicro52840_v1/Kconfig.board delete mode 100644 app/boards/arm/bluemicro52840_v1/Kconfig.defconfig delete mode 100644 app/boards/arm/bluemicro52840_v1/arduino_pro_micro_pins.dtsi delete mode 100644 app/boards/arm/bluemicro52840_v1/bluemicro52840_v1.dts delete mode 100644 app/boards/arm/bluemicro52840_v1/bluemicro52840_v1.yaml delete mode 100644 app/boards/arm/bluemicro52840_v1/bluemicro52840_v1_defconfig delete mode 100644 app/boards/arm/bluemicro52840_v1/board.cmake create mode 100644 app/boards/arm/bluemicro840/CMakeLists.txt create mode 100644 app/boards/arm/bluemicro840/Kconfig create mode 100644 app/boards/arm/bluemicro840/Kconfig.board create mode 100644 app/boards/arm/bluemicro840/Kconfig.defconfig create mode 100644 app/boards/arm/bluemicro840/arduino_pro_micro_pins.dtsi create mode 100644 app/boards/arm/bluemicro840/bluemicro840_v1.dts create mode 100644 app/boards/arm/bluemicro840/bluemicro840_v1.yaml create mode 100644 app/boards/arm/bluemicro840/bluemicro840_v1_defconfig create mode 100644 app/boards/arm/bluemicro840/board.cmake diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8a2ea9a..0f0e74a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -8,7 +8,7 @@ jobs: name: Build Test strategy: matrix: - board: [proton_c, nice_nano, bluemicro52840_v1, nrfmicro_13] + board: [proton_c, nice_nano, bluemicro840_v1, nrfmicro_13] shield: - corne_left - corne_right diff --git a/app/boards/arm/bluemicro52840_v1/CMakeLists.txt b/app/boards/arm/bluemicro52840_v1/CMakeLists.txt deleted file mode 100644 index 00952c3..0000000 --- a/app/boards/arm/bluemicro52840_v1/CMakeLists.txt +++ /dev/null @@ -1,8 +0,0 @@ -set_property(GLOBAL APPEND PROPERTY extra_post_build_commands - COMMAND ${PYTHON_EXECUTABLE} ${ZEPHYR_BASE}/../tools/uf2/utils/uf2conv.py - -c - -b 0x26000 - -f 0xADA52840 - -o ${PROJECT_BINARY_DIR}/${CONFIG_KERNEL_BIN_NAME}.uf2 - ${PROJECT_BINARY_DIR}/${CONFIG_KERNEL_BIN_NAME}.bin -) diff --git a/app/boards/arm/bluemicro52840_v1/Kconfig b/app/boards/arm/bluemicro52840_v1/Kconfig deleted file mode 100644 index 67751a0..0000000 --- a/app/boards/arm/bluemicro52840_v1/Kconfig +++ /dev/null @@ -1,8 +0,0 @@ -# SPDX-License-Identifier: MIT - -config BOARD_ENABLE_DCDC - bool "Enable DCDC mode" - select SOC_DCDC_NRF52X - default y - depends on BOARD_BLUEMICRO52840_V1 - diff --git a/app/boards/arm/bluemicro52840_v1/Kconfig.board b/app/boards/arm/bluemicro52840_v1/Kconfig.board deleted file mode 100644 index dea0555..0000000 --- a/app/boards/arm/bluemicro52840_v1/Kconfig.board +++ /dev/null @@ -1,8 +0,0 @@ -# BlueMicro52840_V1 board configuration - -# Copyright (c) 2020 Pete Johanson, Derek Schmell -# SPDX-License-Identifier: MIT - -config BOARD_BLUEMICRO52840_V1 - bool "BlueMicro52840_V1" - depends on SOC_NRF52840_QIAA diff --git a/app/boards/arm/bluemicro52840_v1/Kconfig.defconfig b/app/boards/arm/bluemicro52840_v1/Kconfig.defconfig deleted file mode 100644 index 90a5ed9..0000000 --- a/app/boards/arm/bluemicro52840_v1/Kconfig.defconfig +++ /dev/null @@ -1,30 +0,0 @@ -# BlueMicro52840 board configuration - -# Copyright (c) 2020 Pete Johanson, Derek Schmell -# SPDX-License-Identifier: MIT - -if BOARD_BLUEMICRO52840_V1 - -config BOARD - default "bluemicro52840_v1" - -if USB - -config USB_NRFX - default y - -config USB_DEVICE_STACK - default y - -endif # USB - -config BT_CTLR - default BT - -config ZMK_BLE - default y - -config ZMK_USB - default y - -endif # BOARD_BLUEMICRO52840_V1 diff --git a/app/boards/arm/bluemicro52840_v1/arduino_pro_micro_pins.dtsi b/app/boards/arm/bluemicro52840_v1/arduino_pro_micro_pins.dtsi deleted file mode 100644 index 940d891..0000000 --- a/app/boards/arm/bluemicro52840_v1/arduino_pro_micro_pins.dtsi +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (c) 2020 Derek Schmell - * - * SPDX-License-Identifier: MIT - */ - -/ { - pro_micro_d: connector_d { - compatible = "arduino-pro-micro"; - #gpio-cells = <2>; - gpio-map-mask = <0xffffffff 0xffffffc0>; - gpio-map-pass-thru = <0 0x3f>; - gpio-map - = <0 0 &gpio0 8 0> /* D0 D2 */ - , <1 0 &gpio0 6 0> /* D1 D3*/ - , <2 0 &gpio0 15 0> /* D2 D1*/ - , <3 0 &gpio0 17 0> /* D3 D0*/ - , <4 0 &gpio0 20 0> /* D4/A6 D4*/ - , <5 0 &gpio0 13 0> /* D5 C6*/ - , <6 0 &gpio0 24 0> /* D6/A7 D7*/ - , <7 0 &gpio0 9 0> /* D7 E6*/ - , <8 0 &gpio0 10 0> /* D8/A8 B4*/ - , <9 0 &gpio1 6 0> /* D9/A9 B5*/ - , <10 0 &gpio1 11 0> /* D10/A10 B6*/ - , <16 0 &gpio0 28 0> /* D16 B2*/ - , <14 0 &gpio0 3 0> /* D14 B3*/ - , <15 0 &gpio1 13 0> /* D15 B1*/ - ; - }; - - pro_micro_a: connector_a { - compatible = "arduino-pro-micro"; - #gpio-cells = <2>; - gpio-map-mask = <0xffffffff 0xffffffc0>; - gpio-map-pass-thru = <0 0x3f>; - gpio-map - = <0 0 &gpio0 2 0> /* A0 F7*/ - , <1 0 &gpio0 29 0> /* A1 F6*/ - , <2 0 &gpio0 26 0> /* A2 F5*/ - , <3 0 &gpio0 30 0> /* A3 F4*/ - , <6 0 &gpio0 20 0> /* D4/A6 D4*/ - , <7 0 &gpio0 24 0> /* D6/A7 D7*/ - , <8 0 &gpio0 10 0> /* D8/A8 B4*/ - , <9 0 &gpio1 6 0> /* D9/A9 B5*/ - , <10 0 &gpio1 13 0> /* D10/A10 B6*/ - ; - }; -}; - -pro_micro_i2c: &i2c0 {}; -pro_micro_spi: &spi0 {}; -pro_micro_serial: &uart0 {}; diff --git a/app/boards/arm/bluemicro52840_v1/bluemicro52840_v1.dts b/app/boards/arm/bluemicro52840_v1/bluemicro52840_v1.dts deleted file mode 100644 index f8abc66..0000000 --- a/app/boards/arm/bluemicro52840_v1/bluemicro52840_v1.dts +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright (c) 2020 Pete Johanson, Derek Schmell - * - * SPDX-License-Identifier: MIT - */ - -/dts-v1/; -#include -#include "arduino_pro_micro_pins.dtsi" - -/ { - model = "BlueMicro52840_V1"; - compatible = "bluemicro52840,v1"; - - chosen { - zephyr,code-partition = &code_partition; - // zephyr,console = &uart0; - //zephyr,bt-mon-uart = &uart0; - //zephyr,bt-c2h-uart = &uart0; - zephyr,sram = &sram0; - zephyr,flash = &flash0; - }; - - leds { - compatible = "gpio-leds"; - blue_led: led_0 { - gpios = <&gpio0 42 GPIO_ACTIVE_HIGH>; - label = "Blue LED"; - }; - }; - -}; - -&gpio0 { - status = "okay"; -}; - -&gpio1 { - status = "okay"; -}; - -&i2c0 { - compatible = "nordic,nrf-twi"; - sda-pin = <15>; - scl-pin = <17>; -}; - -&uart0 { - compatible = "nordic,nrf-uarte"; - status = "okay"; - current-speed = <115200>; - tx-pin = <39>; - rx-pin = <34>; - rts-pin = <33>; - cts-pin = <12>; -}; - -&usbd { - status = "okay"; -}; - - -&flash0 { - /* - * For more information, see: - * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html - */ - partitions { - compatible = "fixed-partitions"; - #address-cells = <1>; - #size-cells = <1>; - - boot_partition: partition@0 { - label = "adafruit_boot"; - reg = <0x000000000 0x0000C000>; - }; - code_partition: partition@26000 { - label = "code_partition"; - reg = <0x00026000 0x000d2000>; - }; - - /* - * The flash starting at 0x000f8000 and ending at - * 0x000fffff is reserved for use by the application. - */ - - /* - * Storage partition will be used by FCB/LittleFS/NVS - * if enabled. - */ - storage_partition: partition@f8000 { - label = "storage"; - reg = <0x000f8000 0x00008000>; - }; - }; -}; diff --git a/app/boards/arm/bluemicro52840_v1/bluemicro52840_v1.yaml b/app/boards/arm/bluemicro52840_v1/bluemicro52840_v1.yaml deleted file mode 100644 index fca969d..0000000 --- a/app/boards/arm/bluemicro52840_v1/bluemicro52840_v1.yaml +++ /dev/null @@ -1,15 +0,0 @@ -identifier: bluemicro52840_v1 -name: BlueMicro52840_V1 -type: mcu -arch: arm -toolchain: - - zephyr - - gnuarmemb - - xtools -supported: - - adc - - usb_device - - ble - - ieee802154 - - pwm - - watchdog diff --git a/app/boards/arm/bluemicro52840_v1/bluemicro52840_v1_defconfig b/app/boards/arm/bluemicro52840_v1/bluemicro52840_v1_defconfig deleted file mode 100644 index f87e69d..0000000 --- a/app/boards/arm/bluemicro52840_v1/bluemicro52840_v1_defconfig +++ /dev/null @@ -1,20 +0,0 @@ -# SPDX-License-Identifier: MIT - -CONFIG_SOC_SERIES_NRF52X=y -CONFIG_SOC_NRF52840_QIAA=y -CONFIG_BOARD_BLUEMICRO52840_V1=y - -# Enable MPU -CONFIG_ARM_MPU=y - -# enable GPIO -CONFIG_GPIO=y - -CONFIG_USE_DT_CODE_PARTITION=y - -CONFIG_MPU_ALLOW_FLASH_WRITE=y -CONFIG_NVS=y -CONFIG_SETTINGS_NVS=y -CONFIG_FLASH=y -CONFIG_FLASH_PAGE_LAYOUT=y -CONFIG_FLASH_MAP=y \ No newline at end of file diff --git a/app/boards/arm/bluemicro52840_v1/board.cmake b/app/boards/arm/bluemicro52840_v1/board.cmake deleted file mode 100644 index fa847d5..0000000 --- a/app/boards/arm/bluemicro52840_v1/board.cmake +++ /dev/null @@ -1,5 +0,0 @@ -# SPDX-License-Identifier: MIT - -board_runner_args(nrfjprog "--nrf-family=NRF52" "--softreset") -include(${ZEPHYR_BASE}/boards/common/blackmagicprobe.board.cmake) -include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) diff --git a/app/boards/arm/bluemicro840/CMakeLists.txt b/app/boards/arm/bluemicro840/CMakeLists.txt new file mode 100644 index 0000000..00952c3 --- /dev/null +++ b/app/boards/arm/bluemicro840/CMakeLists.txt @@ -0,0 +1,8 @@ +set_property(GLOBAL APPEND PROPERTY extra_post_build_commands + COMMAND ${PYTHON_EXECUTABLE} ${ZEPHYR_BASE}/../tools/uf2/utils/uf2conv.py + -c + -b 0x26000 + -f 0xADA52840 + -o ${PROJECT_BINARY_DIR}/${CONFIG_KERNEL_BIN_NAME}.uf2 + ${PROJECT_BINARY_DIR}/${CONFIG_KERNEL_BIN_NAME}.bin +) diff --git a/app/boards/arm/bluemicro840/Kconfig b/app/boards/arm/bluemicro840/Kconfig new file mode 100644 index 0000000..0e6743d --- /dev/null +++ b/app/boards/arm/bluemicro840/Kconfig @@ -0,0 +1,8 @@ +# SPDX-License-Identifier: MIT + +config BOARD_ENABLE_DCDC + bool "Enable DCDC mode" + select SOC_DCDC_NRF52X + default y + depends on BOARD_BLUEMICRO840_V1 + diff --git a/app/boards/arm/bluemicro840/Kconfig.board b/app/boards/arm/bluemicro840/Kconfig.board new file mode 100644 index 0000000..bc271af --- /dev/null +++ b/app/boards/arm/bluemicro840/Kconfig.board @@ -0,0 +1,8 @@ +# BlueMicro840 board configuration + +# Copyright (c) 2020 Pete Johanson, Derek Schmell +# SPDX-License-Identifier: MIT + +config BOARD_BLUEMICRO840_V1 + bool "BlueMicro840_V1" + depends on SOC_NRF52840_QIAA diff --git a/app/boards/arm/bluemicro840/Kconfig.defconfig b/app/boards/arm/bluemicro840/Kconfig.defconfig new file mode 100644 index 0000000..566b5a4 --- /dev/null +++ b/app/boards/arm/bluemicro840/Kconfig.defconfig @@ -0,0 +1,30 @@ +# BlueMicro840 board configuration + +# Copyright (c) 2020 Pete Johanson, Derek Schmell +# SPDX-License-Identifier: MIT + +if BOARD_BLUEMICRO840_V1 + +config BOARD + default "bluemicro840_v1" + +if USB + +config USB_NRFX + default y + +config USB_DEVICE_STACK + default y + +endif # USB + +config BT_CTLR + default BT + +config ZMK_BLE + default y + +config ZMK_USB + default y + +endif # BOARD_BLUEMICRO840_V1 diff --git a/app/boards/arm/bluemicro840/arduino_pro_micro_pins.dtsi b/app/boards/arm/bluemicro840/arduino_pro_micro_pins.dtsi new file mode 100644 index 0000000..940d891 --- /dev/null +++ b/app/boards/arm/bluemicro840/arduino_pro_micro_pins.dtsi @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2020 Derek Schmell + * + * SPDX-License-Identifier: MIT + */ + +/ { + pro_micro_d: connector_d { + compatible = "arduino-pro-micro"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <0 0 &gpio0 8 0> /* D0 D2 */ + , <1 0 &gpio0 6 0> /* D1 D3*/ + , <2 0 &gpio0 15 0> /* D2 D1*/ + , <3 0 &gpio0 17 0> /* D3 D0*/ + , <4 0 &gpio0 20 0> /* D4/A6 D4*/ + , <5 0 &gpio0 13 0> /* D5 C6*/ + , <6 0 &gpio0 24 0> /* D6/A7 D7*/ + , <7 0 &gpio0 9 0> /* D7 E6*/ + , <8 0 &gpio0 10 0> /* D8/A8 B4*/ + , <9 0 &gpio1 6 0> /* D9/A9 B5*/ + , <10 0 &gpio1 11 0> /* D10/A10 B6*/ + , <16 0 &gpio0 28 0> /* D16 B2*/ + , <14 0 &gpio0 3 0> /* D14 B3*/ + , <15 0 &gpio1 13 0> /* D15 B1*/ + ; + }; + + pro_micro_a: connector_a { + compatible = "arduino-pro-micro"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <0 0 &gpio0 2 0> /* A0 F7*/ + , <1 0 &gpio0 29 0> /* A1 F6*/ + , <2 0 &gpio0 26 0> /* A2 F5*/ + , <3 0 &gpio0 30 0> /* A3 F4*/ + , <6 0 &gpio0 20 0> /* D4/A6 D4*/ + , <7 0 &gpio0 24 0> /* D6/A7 D7*/ + , <8 0 &gpio0 10 0> /* D8/A8 B4*/ + , <9 0 &gpio1 6 0> /* D9/A9 B5*/ + , <10 0 &gpio1 13 0> /* D10/A10 B6*/ + ; + }; +}; + +pro_micro_i2c: &i2c0 {}; +pro_micro_spi: &spi0 {}; +pro_micro_serial: &uart0 {}; diff --git a/app/boards/arm/bluemicro840/bluemicro840_v1.dts b/app/boards/arm/bluemicro840/bluemicro840_v1.dts new file mode 100644 index 0000000..c693662 --- /dev/null +++ b/app/boards/arm/bluemicro840/bluemicro840_v1.dts @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2020 Pete Johanson, Derek Schmell + * + * SPDX-License-Identifier: MIT + */ + +/dts-v1/; +#include +#include "arduino_pro_micro_pins.dtsi" + +/ { + model = "BlueMicro840_V1"; + compatible = "bluemicro840,v1"; + + chosen { + zephyr,code-partition = &code_partition; + // zephyr,console = &uart0; + //zephyr,bt-mon-uart = &uart0; + //zephyr,bt-c2h-uart = &uart0; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + }; + + leds { + compatible = "gpio-leds"; + blue_led: led_0 { + gpios = <&gpio0 42 GPIO_ACTIVE_HIGH>; + label = "Blue LED"; + }; + }; + +}; + +&gpio0 { + status = "okay"; +}; + +&gpio1 { + status = "okay"; +}; + +&i2c0 { + compatible = "nordic,nrf-twi"; + sda-pin = <15>; + scl-pin = <17>; +}; + +&uart0 { + compatible = "nordic,nrf-uarte"; + status = "okay"; + current-speed = <115200>; + tx-pin = <39>; + rx-pin = <34>; + rts-pin = <33>; + cts-pin = <12>; +}; + +&usbd { + status = "okay"; +}; + + +&flash0 { + /* + * For more information, see: + * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + boot_partition: partition@0 { + label = "adafruit_boot"; + reg = <0x000000000 0x0000C000>; + }; + code_partition: partition@26000 { + label = "code_partition"; + reg = <0x00026000 0x000d2000>; + }; + + /* + * The flash starting at 0x000f8000 and ending at + * 0x000fffff is reserved for use by the application. + */ + + /* + * Storage partition will be used by FCB/LittleFS/NVS + * if enabled. + */ + storage_partition: partition@f8000 { + label = "storage"; + reg = <0x000f8000 0x00008000>; + }; + }; +}; diff --git a/app/boards/arm/bluemicro840/bluemicro840_v1.yaml b/app/boards/arm/bluemicro840/bluemicro840_v1.yaml new file mode 100644 index 0000000..9e1dd54 --- /dev/null +++ b/app/boards/arm/bluemicro840/bluemicro840_v1.yaml @@ -0,0 +1,15 @@ +identifier: bluemicro840_v1 +name: BlueMicro840_V1 +type: mcu +arch: arm +toolchain: + - zephyr + - gnuarmemb + - xtools +supported: + - adc + - usb_device + - ble + - ieee802154 + - pwm + - watchdog diff --git a/app/boards/arm/bluemicro840/bluemicro840_v1_defconfig b/app/boards/arm/bluemicro840/bluemicro840_v1_defconfig new file mode 100644 index 0000000..96f03ca --- /dev/null +++ b/app/boards/arm/bluemicro840/bluemicro840_v1_defconfig @@ -0,0 +1,20 @@ +# SPDX-License-Identifier: MIT + +CONFIG_SOC_SERIES_NRF52X=y +CONFIG_SOC_NRF52840_QIAA=y +CONFIG_BOARD_BLUEMICRO840_V1=y + +# Enable MPU +CONFIG_ARM_MPU=y + +# enable GPIO +CONFIG_GPIO=y + +CONFIG_USE_DT_CODE_PARTITION=y + +CONFIG_MPU_ALLOW_FLASH_WRITE=y +CONFIG_NVS=y +CONFIG_SETTINGS_NVS=y +CONFIG_FLASH=y +CONFIG_FLASH_PAGE_LAYOUT=y +CONFIG_FLASH_MAP=y \ No newline at end of file diff --git a/app/boards/arm/bluemicro840/board.cmake b/app/boards/arm/bluemicro840/board.cmake new file mode 100644 index 0000000..fa847d5 --- /dev/null +++ b/app/boards/arm/bluemicro840/board.cmake @@ -0,0 +1,5 @@ +# SPDX-License-Identifier: MIT + +board_runner_args(nrfjprog "--nrf-family=NRF52" "--softreset") +include(${ZEPHYR_BASE}/boards/common/blackmagicprobe.board.cmake) +include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) diff --git a/docs/docs/hardware.md b/docs/docs/hardware.md index 951cee0..9e6a956 100644 --- a/docs/docs/hardware.md +++ b/docs/docs/hardware.md @@ -17,6 +17,8 @@ That being said, there are currently only a few specific [boards](/docs/faq#what ## Boards - [nice!nano](https://docs.nicekeyboards.com/#/nice!nano/) (`nice_nano`) +- [nrfMicro](https://github.com/joric/nrfmicro) (`nrfmicro_13`, `nrfmicro_11`, `nrfmicro_11_flipped`) +- [BlueMicro840](https://store.jpconstantineau.com/#/group/bluemicro) (`bluemicro840_v1`) - [QMK Proton-C](https://qmk.fm/proton-c/) (`proton_c`) ## Keyboard Shields diff --git a/docs/static/setup.sh b/docs/static/setup.sh index 55c96ff..bb61df6 100644 --- a/docs/static/setup.sh +++ b/docs/static/setup.sh @@ -11,7 +11,7 @@ title="ZMK Config Setup:" # TODO: Check for user.name and user.email git configs being set prompt="Pick an MCU board:" -options=("nice!nano" "QMK Proton-C" "BlueMicro52840 (v1)") +options=("nice!nano" "QMK Proton-C" "BlueMicro840 (v1)") echo "$title" echo "" @@ -23,7 +23,7 @@ select opt in "${options[@]}" "Quit"; do 1 ) board="nice_nano"; break;; 2 ) board="proton_c"; break;; - 3 ) board="bluemicro52840_v1"; break;; + 3 ) board="bluemicro840_v1"; break;; $(( ${#options[@]}+1 )) ) echo "Goodbye!"; exit;; *) echo "Invalid option. Try another one.";continue;; -- cgit v1.2.3 From 0d7bf03158b6c49c6db65732dd086820bc4fc64b Mon Sep 17 00:00:00 2001 From: CrossR Date: Wed, 19 Aug 2020 21:52:31 +0100 Subject: Fix BT unpair combo. --- app/boards/shields/sofle/sofle_left.overlay | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/boards/shields/sofle/sofle_left.overlay b/app/boards/shields/sofle/sofle_left.overlay index f6719dd..9dfe52d 100644 --- a/app/boards/shields/sofle/sofle_left.overlay +++ b/app/boards/shields/sofle/sofle_left.overlay @@ -22,5 +22,5 @@ }; &bt_unpair_combo { - key-positions = <0 52>; + key-positions = <0 54>; }; -- cgit v1.2.3 From 6da6d7397f37f9e81fc3e99e153e88babc8fd3ab Mon Sep 17 00:00:00 2001 From: Jared Giles Date: Thu, 20 Aug 2020 00:41:31 +0100 Subject: Fixed arrows on default keymap --- app/boards/shields/corne/corne.keymap | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/boards/shields/corne/corne.keymap b/app/boards/shields/corne/corne.keymap index a88d036..c0bbb4a 100644 --- a/app/boards/shields/corne/corne.keymap +++ b/app/boards/shields/corne/corne.keymap @@ -21,12 +21,12 @@ lower_layer { // ----------------------------------------------------------------------------------------- // | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | BKSP | -// | CTRL | | | | | | | RGT | UP | DWN | LFT | | | +// | CTRL | | | | | | | LFT | DWN | UP | RGT | | | // | SHFT | | | | | | | | | | | | | // | GUI | | SPC | | ENT | | ALT | bindings = < &kp ESC &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 &kp BKSP - &kp LCTL &trans &trans &trans &trans &trans &kp RARW &kp UARW &kp DARW &kp LARW &trans &trans + &kp LCTL &trans &trans &trans &trans &trans &kp LARW &kp DARW &kp UARW &kp RARW &trans &trans &kp LSFT &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &kp LGUI &trans &kp SPC &kp RET &trans &kp RALT >; @@ -40,8 +40,8 @@ // | GUI | | SPC | | ENT | | ALT | bindings = < &kp ESC &kp BANG &kp ATSN &kp HASH &kp CURU &kp PRCT &kp CRRT &kp AMPS &kp KMLT &kp LPRN &kp RPRN &kp BKSP - &kp LCTL &trans &trans &trans &trans &trans &kp MINUS &kp EQL &kp LBKT &kp RBKT &kp PIPE &trans - &kp LSFT &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + &kp LCTL &trans &trans &trans &trans &trans &kp MINUS &kp EQL &kp LBKT &kp RBKT &kp PIPE &kp GRAV + &kp LSFT &trans &trans &trans &trans &trans &trans &trans &trans &trans &kp BSLH &kp TILD &kp LGUI &trans &kp SPC &kp RET &trans &kp RALT >; }; -- cgit v1.2.3 From a65b746a863bbd8e07cf404b4249526f75b069a3 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Wed, 19 Aug 2020 23:34:34 -0400 Subject: fix(bluetooth): Add unpair combo if DT node exists --- app/CMakeLists.txt | 2 +- app/Kconfig | 6 ------ app/boards/shields/corne/corne_left.conf | 1 - app/boards/shields/corne/corne_right.conf | 1 - app/boards/shields/kyria/kyria_left.conf | 3 +-- app/boards/shields/kyria/kyria_right.conf | 1 - app/boards/shields/lily58/lily58_left.conf | 1 - app/boards/shields/lily58/lily58_right.conf | 1 - app/src/ble_unpair_combo.c | 7 +++++-- 9 files changed, 7 insertions(+), 16 deletions(-) diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 054f84a..de67dfe 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -44,7 +44,7 @@ target_sources(app PRIVATE src/behaviors/behavior_none.c) target_sources(app PRIVATE src/behaviors/behavior_sensor_rotate_key_press.c) target_sources_ifdef(CONFIG_ZMK_RGB_UNDERGLOW app PRIVATE src/behaviors/behavior_rgb_underglow.c) target_sources_ifdef(CONFIG_ZMK_BLE app PRIVATE src/ble.c) -target_sources_ifdef(CONFIG_ZMK_BLE_UNPAIR_COMBO app PRIVATE src/ble_unpair_combo.c) +target_sources_ifdef(CONFIG_ZMK_BLE app PRIVATE src/ble_unpair_combo.c) target_sources_ifdef(CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL app PRIVATE src/split_listener.c) target_sources_ifdef(CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL app PRIVATE src/split/bluetooth/service.c) target_sources_ifdef(CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL app PRIVATE src/split/bluetooth/central.c) diff --git a/app/Kconfig b/app/Kconfig index 416c985..5f618b1 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -45,12 +45,6 @@ menuconfig ZMK_BLE if ZMK_BLE -config ZMK_BLE_UNPAIR_COMBO - bool "Enable BT unpair combo" - help - Adds a magic key combo that can be held on startup to remove all paired devices - default n - config ZMK_BLE_INIT_PRIORITY int "Init Priority" default 50 diff --git a/app/boards/shields/corne/corne_left.conf b/app/boards/shields/corne/corne_left.conf index 338fa59..1e028a7 100644 --- a/app/boards/shields/corne/corne_left.conf +++ b/app/boards/shields/corne/corne_left.conf @@ -1,3 +1,2 @@ CONFIG_ZMK_SPLIT=y CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL=y -CONFIG_ZMK_BLE_UNPAIR_COMBO=y \ No newline at end of file diff --git a/app/boards/shields/corne/corne_right.conf b/app/boards/shields/corne/corne_right.conf index be344c4..990cf7c 100644 --- a/app/boards/shields/corne/corne_right.conf +++ b/app/boards/shields/corne/corne_right.conf @@ -1,3 +1,2 @@ CONFIG_ZMK_SPLIT=y CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL=y -CONFIG_ZMK_BLE_UNPAIR_COMBO=y \ No newline at end of file diff --git a/app/boards/shields/kyria/kyria_left.conf b/app/boards/shields/kyria/kyria_left.conf index 338fa59..e51dee4 100644 --- a/app/boards/shields/kyria/kyria_left.conf +++ b/app/boards/shields/kyria/kyria_left.conf @@ -1,3 +1,2 @@ CONFIG_ZMK_SPLIT=y -CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL=y -CONFIG_ZMK_BLE_UNPAIR_COMBO=y \ No newline at end of file +CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL=y \ No newline at end of file diff --git a/app/boards/shields/kyria/kyria_right.conf b/app/boards/shields/kyria/kyria_right.conf index be344c4..990cf7c 100644 --- a/app/boards/shields/kyria/kyria_right.conf +++ b/app/boards/shields/kyria/kyria_right.conf @@ -1,3 +1,2 @@ CONFIG_ZMK_SPLIT=y CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL=y -CONFIG_ZMK_BLE_UNPAIR_COMBO=y \ No newline at end of file diff --git a/app/boards/shields/lily58/lily58_left.conf b/app/boards/shields/lily58/lily58_left.conf index 338fa59..1e028a7 100644 --- a/app/boards/shields/lily58/lily58_left.conf +++ b/app/boards/shields/lily58/lily58_left.conf @@ -1,3 +1,2 @@ CONFIG_ZMK_SPLIT=y CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL=y -CONFIG_ZMK_BLE_UNPAIR_COMBO=y \ No newline at end of file diff --git a/app/boards/shields/lily58/lily58_right.conf b/app/boards/shields/lily58/lily58_right.conf index cf16779..990cf7c 100644 --- a/app/boards/shields/lily58/lily58_right.conf +++ b/app/boards/shields/lily58/lily58_right.conf @@ -1,3 +1,2 @@ CONFIG_ZMK_SPLIT=y CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL=y -CONFIG_ZMK_BLE_UNPAIR_COMBO=y diff --git a/app/src/ble_unpair_combo.c b/app/src/ble_unpair_combo.c index a33a8e2..f9d0551 100644 --- a/app/src/ble_unpair_combo.c +++ b/app/src/ble_unpair_combo.c @@ -7,10 +7,11 @@ #include #include -#include - #define DT_DRV_COMPAT zmk_bt_unpair_combo +#if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) + +#include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include @@ -78,3 +79,5 @@ ZMK_SUBSCRIPTION(zmk_ble_unpair_combo, position_state_changed); SYS_INIT(zmk_ble_unpair_combo_init, APPLICATION, CONFIG_APPLICATION_INIT_PRIORITY); + +#endif DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) -- cgit v1.2.3 From 6ca8e673ac494b836ef692f11e90e8b8b6f28528 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Thu, 20 Aug 2020 00:01:59 -0400 Subject: fix(bluetooth): Typo for closed conditional. --- app/src/ble_unpair_combo.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/ble_unpair_combo.c b/app/src/ble_unpair_combo.c index f9d0551..82fa834 100644 --- a/app/src/ble_unpair_combo.c +++ b/app/src/ble_unpair_combo.c @@ -80,4 +80,4 @@ SYS_INIT(zmk_ble_unpair_combo_init, APPLICATION, CONFIG_APPLICATION_INIT_PRIORITY); -#endif DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) +#endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ -- cgit v1.2.3 From 11e3566277eac787f00ad479dc8a9eeffcfd1504 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Thu, 20 Aug 2020 00:11:07 -0400 Subject: fix(docs): Link to 2.3.0 docs, macOS toolchain fix * Link explicitly to the 2.3.0 docs from upstream Zephyr. * Update the macOS toolchain section to properly refer to the 3rd party toolchain setup. --- docs/docs/dev-setup.md | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/docs/docs/dev-setup.md b/docs/docs/dev-setup.md index 5cceb73..6e893b3 100644 --- a/docs/docs/dev-setup.md +++ b/docs/docs/dev-setup.md @@ -180,7 +180,7 @@ brew install cmake ninja python3 ccache dtc git wget ### West Build Command -`west` is the [Zephyr™ meta-tool](https://docs.zephyrproject.org/latest/guides/west/index.html) used to configure and build Zephyr™ applications. +`west` is the [Zephyr™ meta-tool](https://docs.zephyrproject.org/2.3.0/guides/west/index.html) used to configure and build Zephyr™ applications. West can be installed by using the `pip` python package manager. @@ -223,7 +223,7 @@ The installation will prompt with several questions about installation location, Because Raspberry OS (Raspbian) runs on the same architecture (but different ABI) as the keyboard MCUs, -the operating system's installed [cross compilers](https://docs.zephyrproject.org/latest/getting_started/toolchain_other_x_compilers.html) can be used to target the different ABI. +the operating system's installed [cross compilers](https://docs.zephyrproject.org/2.3.0/getting_started/toolchain_other_x_compilers.html) can be used to target the different ABI. First, the cross compiler should be installed: @@ -259,23 +259,20 @@ The installation will prompt with several questions about installation location, #### GNU ARM Embedded -Since the Zephyr™ SDK is not available for Windows, we recommending following the steps to install the [GNU ARM Embedded](https://docs.zephyrproject.org/latest/getting_started/toolchain_3rd_party_x_compilers.html#gnu-arm-embedded). +Since the Zephyr™ SDK is not available for Windows, we recommending following the steps to install the [GNU ARM Embedded](https://docs.zephyrproject.org/2.3.0/getting_started/toolchain_3rd_party_x_compilers.html#gnu-arm-embedded). -#### Zephyr™ ARM SDK +#### GNU ARM Embedded -To build firmwares for the ARM architecture (all supported MCUs/keyboards at this point), you'll need to install the Zephyr™ ARM SDK to your system: +Since the Zephyr™ SDK is not available for macOS, we recommending following the steps to install the [GNU ARM Embedded](https://docs.zephyrproject.org/2.3.0/getting_started/toolchain_3rd_party_x_compilers.html#gnu-arm-embedded). -``` -export ZSDK_VERSION=0.11.2 -wget -q "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v${ZSDK_VERSION}/zephyr-toolchain-arm-${ZSDK_VERSION}-setup.run" && \ - sh "zephyr-toolchain-arm-${ZSDK_VERSION}-setup.run" --quiet -- -d ~/.local/zephyr-sdk-${ZSDK_VERSION} && \ - rm "zephyr-toolchain-arm-\${ZSDK_VERSION}-setup.run" -``` +:::warning Security Controls Workaround -The installation will prompt with several questions about installation location, and creating a default `~/.zephyrrc` for you with various variables. The defaults should normally work as expected. +Please be sure to read the [additional setup instructions](https://docs.zephyrproject.org/2.3.0/getting_started/installation_mac.html#mac-gatekeeper) needed to address security controls found in macOS 10.15 Catalina and newer + +::: @@ -342,7 +339,7 @@ pip3 install --user -r zephyr/scripts/requirements-base.txt ### Environment Variables By default, the Zephyr™ SDK will create a file named `~/.zephyrrc` with the correct environment variables to build ZMK. -We suggest two main [options](https://docs.zephyrproject.org/latest/guides/env_vars.html?highlight=zephyrrc) for how to load those settings. +We suggest two main [options](https://docs.zephyrproject.org/2.3.0/guides/env_vars.html?highlight=zephyrrc) for how to load those settings. #### Per Shell @@ -442,7 +439,7 @@ an onboard MCU, or one that uses a MCU board addon. ### Keyboard (Shield) + MCU Board -ZMK treats keyboards that take a MCU addon board as [shields](https://docs.zephyrproject.org/latest/guides/porting/shields.html), and treats the smaller MCU board as the true [board](https://docs.zephyrproject.org/latest/guides/porting/board_porting.html) +ZMK treats keyboards that take a MCU addon board as [shields](https://docs.zephyrproject.org/2.3.0/guides/porting/shields.html), and treats the smaller MCU board as the true [board](https://docs.zephyrproject.org/2.3.0/guides/porting/board_porting.html) Given the following: @@ -458,7 +455,7 @@ west build -b proton_c -- -DSHIELD=kyria_left -DKEYMAP=default ### Keyboard With Onboard MCU -Keyboards with onboard MCU chips are simply treated as the [board](https://docs.zephyrproject.org/latest/guides/porting/board_porting.html) as far as Zephyr™ is concerned. +Keyboards with onboard MCU chips are simply treated as the [board](https://docs.zephyrproject.org/2.3.0/guides/porting/board_porting.html) as far as Zephyr™ is concerned. Given the following: -- cgit v1.2.3 From 4efce4223ae38306a254b11db628d782f1d7f382 Mon Sep 17 00:00:00 2001 From: Mega Mind <68985133+megamind4089@users.noreply.github.com> Date: Thu, 20 Aug 2020 18:59:41 +0800 Subject: Use correct macro for board --- app/CMakeLists.txt | 2 +- app/boards/arm/nrfmicro/pinmux.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index de67dfe..9fce3b6 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -1,4 +1,3 @@ -# Find Zephyr. This also loads Zephyr's build system. cmake_minimum_required(VERSION 3.13.1) set(CONFIG_APPLICATION_DEFINED_SYSCALL true) @@ -15,6 +14,7 @@ list(APPEND SYSCALL_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/drivers/zephyr) include(cmake/zmk_config.cmake) +# Find Zephyr. This also loads Zephyr's build system. find_package(Zephyr REQUIRED HINTS ../zephyr) project(zmk) diff --git a/app/boards/arm/nrfmicro/pinmux.c b/app/boards/arm/nrfmicro/pinmux.c index 803d20d..c02ca92 100644 --- a/app/boards/arm/nrfmicro/pinmux.c +++ b/app/boards/arm/nrfmicro/pinmux.c @@ -17,7 +17,7 @@ static int pinmux_nrfmicro_init(struct device *port) struct device *p1 = device_get_binding("GPIO_1"); -#if defined(BOARD_NRFMICRO_13) +#if CONFIG_BOARD_NRFMICRO_13 struct device *p0 = device_get_binding("GPIO_0"); // enable EXT_VCC (use 0 for nRFMicro 1.3, use 1 for nRFMicro 1.1) gpio_pin_configure(p1, 9, GPIO_OUTPUT); @@ -34,4 +34,4 @@ static int pinmux_nrfmicro_init(struct device *port) return 0; } -SYS_INIT(pinmux_nrfmicro_init, APPLICATION, CONFIG_APPLICATION_INIT_PRIORITY); \ No newline at end of file +SYS_INIT(pinmux_nrfmicro_init, APPLICATION, CONFIG_APPLICATION_INIT_PRIORITY); -- cgit v1.2.3 From fb3dadba8721b4e63d1284b90c3380b7897b2f50 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Thu, 20 Aug 2020 07:39:14 -0400 Subject: fix(bluetooth): disable BT_SETTINGS for now. --- app/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Kconfig b/app/Kconfig index 5f618b1..00d4ae3 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -41,7 +41,7 @@ menuconfig ZMK_BLE select BT_GATT_DIS select BT_GATT_BAS select SETTINGS - select BT_SETTINGS + # select BT_SETTINGS if ZMK_BLE -- cgit v1.2.3 From 973087639329893e916d3d341ee4326d1c14a711 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Thu, 20 Aug 2020 10:51:35 -0400 Subject: fix(shields): Load Kconfig for out-of-tree shields --- app/Kconfig | 4 ++++ app/cmake/zmk_config.cmake | 1 + 2 files changed, 5 insertions(+) diff --git a/app/Kconfig b/app/Kconfig index 00d4ae3..877fce4 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -193,6 +193,10 @@ source "subsys/logging/Kconfig.template.log_config" rsource "boards/Kconfig" rsource "boards/shields/*/Kconfig.defconfig" +rsource "boards/shields/*/Kconfig.shield" + +osource "$(ZMK_CONFIG)/boards/shields/*/Kconfig.defconfig" +osource "$(ZMK_CONFIG)/boards/shields/*/Kconfig.shield" source "Kconfig.zephyr" diff --git a/app/cmake/zmk_config.cmake b/app/cmake/zmk_config.cmake index 518c3c3..017dd11 100644 --- a/app/cmake/zmk_config.cmake +++ b/app/cmake/zmk_config.cmake @@ -44,6 +44,7 @@ endif() set(CACHED_ZMK_CONFIG ${ZMK_CONFIG} CACHE STRING "Selected user ZMK config") if (ZMK_CONFIG) + set(ENV{ZMK_CONFIG} "${ZMK_CONFIG}") if(EXISTS ${ZMK_CONFIG}/boards) message(STATUS "Adding ZMK config directory as board root: ${ZMK_CONFIG}") list(APPEND BOARD_ROOT ${ZMK_CONFIG}) -- cgit v1.2.3 From 8aae2231e242a1c8b9daf8fba96cc9bc5ba336a2 Mon Sep 17 00:00:00 2001 From: Nick Date: Thu, 20 Aug 2020 13:43:03 -0500 Subject: fix(actions): timeout stuck cache west modules --- .github/workflows/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0f0e74a..85397a4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -25,6 +25,7 @@ jobs: - name: Checkout uses: actions/checkout@v2 - name: Cache west modules + timeout-minutes: 2 uses: actions/cache@v2 env: cache-name: cache-zephyr-modules -- cgit v1.2.3 From dc1bb3663962acb08fadb6920d4983dafc0c91e6 Mon Sep 17 00:00:00 2001 From: Nick Date: Thu, 20 Aug 2020 13:54:58 -0500 Subject: fix(actions): continue build on failed west cache --- .github/workflows/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 85397a4..5086bf8 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -26,6 +26,7 @@ jobs: uses: actions/checkout@v2 - name: Cache west modules timeout-minutes: 2 + continue-on-error: true uses: actions/cache@v2 env: cache-name: cache-zephyr-modules -- cgit v1.2.3 From 7aea57328c1f48e95de2013843e8947c1eb0e752 Mon Sep 17 00:00:00 2001 From: Mega Mind <68985133+megamind4089@users.noreply.github.com> Date: Fri, 21 Aug 2020 03:12:06 +0800 Subject: Add KConfig for board battery charger --- app/boards/arm/nrfmicro/Kconfig | 5 +++++ app/boards/arm/nrfmicro/Kconfig.defconfig | 9 ++++++++- app/boards/arm/nrfmicro/pinmux.c | 6 +++++- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/app/boards/arm/nrfmicro/Kconfig b/app/boards/arm/nrfmicro/Kconfig index 17a3347..80039e9 100644 --- a/app/boards/arm/nrfmicro/Kconfig +++ b/app/boards/arm/nrfmicro/Kconfig @@ -3,3 +3,8 @@ config BOARD_ENABLE_DCDC select SOC_DCDC_NRF52X default y depends on (BOARD_NRFMICRO_11 || BOARD_NRFMICRO_11_FLIPPED || BOARD_NRFMICRO_13) + +config BOARD_ENABLE_CHARGER + bool "Enable battery charger" + default y + depends on (BOARD_NRFMICRO_13) diff --git a/app/boards/arm/nrfmicro/Kconfig.defconfig b/app/boards/arm/nrfmicro/Kconfig.defconfig index 2212277..69b59ee 100644 --- a/app/boards/arm/nrfmicro/Kconfig.defconfig +++ b/app/boards/arm/nrfmicro/Kconfig.defconfig @@ -29,5 +29,12 @@ config ZMK_USB config PINMUX default y - + +if BOARD_NRFMICRO_13 + +config BOARD_ENABLE_CHARGER + default y + +endif # BOARD_NRFMICRO_13 + endif # BOARD_NRFMICRO_11 || BOARD_NRFMICRO_11_FLIPPED || BOARD_NRFMICRO_13 diff --git a/app/boards/arm/nrfmicro/pinmux.c b/app/boards/arm/nrfmicro/pinmux.c index c02ca92..be1a4de 100644 --- a/app/boards/arm/nrfmicro/pinmux.c +++ b/app/boards/arm/nrfmicro/pinmux.c @@ -23,9 +23,13 @@ static int pinmux_nrfmicro_init(struct device *port) gpio_pin_configure(p1, 9, GPIO_OUTPUT); gpio_pin_set(p1, 9, 0); - // enable charger (nRFMicro 1.3 only) +#if CONFIG_BOARD_ENABLE_CHARGER gpio_pin_configure(p0, 5, GPIO_OUTPUT); gpio_pin_set(p0, 5, 0); +#else + gpio_pin_configure(p0, 5, GPIO_INPUT); +#endif + #else // enable EXT_VCC (use 0 for nRFMicro 1.3, use 1 for nRFMicro 1.1) gpio_pin_configure(p1, 9, GPIO_OUTPUT); -- cgit v1.2.3 From 94c7d27f04263b42669ae6d1777765ba811ed6bf Mon Sep 17 00:00:00 2001 From: Derek Date: Thu, 20 Aug 2020 15:13:51 -0400 Subject: Updated files as per request Updated --- app/boards/shields/splitreus62/Kconfig.defconfig | 7 ++++++- app/boards/shields/splitreus62/Kconfig.shield | 2 +- app/boards/shields/splitreus62/splitreus62.dtsi | 2 +- app/boards/shields/splitreus62/splitreus62.keymap | 6 ++++++ app/boards/shields/splitreus62/splitreus62_left.overlay | 2 +- app/boards/shields/splitreus62/splitreus62_right.overlay | 4 ++-- docs/static/setup.sh | 1 + 7 files changed, 18 insertions(+), 6 deletions(-) diff --git a/app/boards/shields/splitreus62/Kconfig.defconfig b/app/boards/shields/splitreus62/Kconfig.defconfig index 1f5b324..6e35b06 100644 --- a/app/boards/shields/splitreus62/Kconfig.defconfig +++ b/app/boards/shields/splitreus62/Kconfig.defconfig @@ -1,4 +1,9 @@ - +/* + * Copyright (c) 2020 Derek Schmell + * + * SPDX-License-Identifier: MIT + */ + if SHIELD_SPLITREUS62_LEFT config ZMK_KEYBOARD_NAME diff --git a/app/boards/shields/splitreus62/Kconfig.shield b/app/boards/shields/splitreus62/Kconfig.shield index f20f236..762d991 100644 --- a/app/boards/shields/splitreus62/Kconfig.shield +++ b/app/boards/shields/splitreus62/Kconfig.shield @@ -1,4 +1,4 @@ -# Copyright (c) 2020 Pete Johanson +# Copyright (c) 2020 Derek Schmell # SPDX-License-Identifier: MIT config SHIELD_SPLITREUS62_LEFT diff --git a/app/boards/shields/splitreus62/splitreus62.dtsi b/app/boards/shields/splitreus62/splitreus62.dtsi index e1fb40b..c2bfbc4 100644 --- a/app/boards/shields/splitreus62/splitreus62.dtsi +++ b/app/boards/shields/splitreus62/splitreus62.dtsi @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 Pete Johanson, Derek Schmell + * Copyright (c) 2020 Derek Schmell * * SPDX-License-Identifier: MIT */ diff --git a/app/boards/shields/splitreus62/splitreus62.keymap b/app/boards/shields/splitreus62/splitreus62.keymap index cd683a2..920e61a 100644 --- a/app/boards/shields/splitreus62/splitreus62.keymap +++ b/app/boards/shields/splitreus62/splitreus62.keymap @@ -1,3 +1,9 @@ +/* + * Copyright (c) 2020 Derek Schmell + * + * SPDX-License-Identifier: MIT + */ + #include #include diff --git a/app/boards/shields/splitreus62/splitreus62_left.overlay b/app/boards/shields/splitreus62/splitreus62_left.overlay index 7210ca4..b156d60 100644 --- a/app/boards/shields/splitreus62/splitreus62_left.overlay +++ b/app/boards/shields/splitreus62/splitreus62_left.overlay @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 Pete Johanson + * Copyright (c) 2020 Derek Schmell * * SPDX-License-Identifier: MIT */ diff --git a/app/boards/shields/splitreus62/splitreus62_right.overlay b/app/boards/shields/splitreus62/splitreus62_right.overlay index 35375cc..5db87cc 100644 --- a/app/boards/shields/splitreus62/splitreus62_right.overlay +++ b/app/boards/shields/splitreus62/splitreus62_right.overlay @@ -1,9 +1,9 @@ /* - * Copyright (c) 2020 Pete Johanson + * Copyright (c) 2020 Derek Schmell * * SPDX-License-Identifier: MIT */ - + #include "splitreus62.dtsi" &default_transform { diff --git a/docs/static/setup.sh b/docs/static/setup.sh index 45eccd6..e75b529 100644 --- a/docs/static/setup.sh +++ b/docs/static/setup.sh @@ -49,6 +49,7 @@ select opt in "${options[@]}" "Quit"; do 1 ) shield_title="Kyria" shield="kyria"; split="y"; break;; 2 ) shield_title="Lily58" shield="lily58"; split="y"; break;; 3 ) shield_title="Corne" shield="corne"; split="y"; break;; + 4 ) shield_title="Splitreus62" shield="splitreus62"; split="y"; break;; # Add link to docs on adding your own custom shield in your ZMK config! # $(( ${#options[@]}+1 )) ) echo "Other!"; break;; -- cgit v1.2.3 From 3b71c4311bae62c2e14b028324f831837742d1f5 Mon Sep 17 00:00:00 2001 From: Derek Date: Thu, 20 Aug 2020 17:27:41 -0400 Subject: Update Kconfig.defconfig --- app/boards/shields/splitreus62/Kconfig.defconfig | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/app/boards/shields/splitreus62/Kconfig.defconfig b/app/boards/shields/splitreus62/Kconfig.defconfig index 6e35b06..a2464a7 100644 --- a/app/boards/shields/splitreus62/Kconfig.defconfig +++ b/app/boards/shields/splitreus62/Kconfig.defconfig @@ -1,8 +1,7 @@ -/* - * Copyright (c) 2020 Derek Schmell - * - * SPDX-License-Identifier: MIT - */ + +#Copyright (c) 2020 Derek Schmell +#SPDX-License-Identifier: MIT + if SHIELD_SPLITREUS62_LEFT -- cgit v1.2.3 From f3361e79ceb03167d9e239582162ba2c5d66fb5a Mon Sep 17 00:00:00 2001 From: tjcampie Date: Thu, 20 Aug 2020 20:22:55 -0500 Subject: Add QAZ to zmk --- app/boards/shields/qaz/Kconfig.defconfig | 6 +++++ app/boards/shields/qaz/Kconfig.shield | 2 ++ app/boards/shields/qaz/qaz.keymap | 19 +++++++++++++ app/boards/shields/qaz/qaz.overlay | 46 ++++++++++++++++++++++++++++++++ 4 files changed, 73 insertions(+) create mode 100644 app/boards/shields/qaz/Kconfig.defconfig create mode 100644 app/boards/shields/qaz/Kconfig.shield create mode 100644 app/boards/shields/qaz/qaz.keymap create mode 100644 app/boards/shields/qaz/qaz.overlay diff --git a/app/boards/shields/qaz/Kconfig.defconfig b/app/boards/shields/qaz/Kconfig.defconfig new file mode 100644 index 0000000..148a630 --- /dev/null +++ b/app/boards/shields/qaz/Kconfig.defconfig @@ -0,0 +1,6 @@ +if SHIELD_QAZ + +config ZMK_KEYBOARD_NAME + default "QAZ_zmk" + +endif \ No newline at end of file diff --git a/app/boards/shields/qaz/Kconfig.shield b/app/boards/shields/qaz/Kconfig.shield new file mode 100644 index 0000000..c365539 --- /dev/null +++ b/app/boards/shields/qaz/Kconfig.shield @@ -0,0 +1,2 @@ +config SHIELD_MY_BOARD + def_bool $(shields_list_contains,qaz) \ No newline at end of file diff --git a/app/boards/shields/qaz/qaz.keymap b/app/boards/shields/qaz/qaz.keymap new file mode 100644 index 0000000..b83bb47 --- /dev/null +++ b/app/boards/shields/qaz/qaz.keymap @@ -0,0 +1,19 @@ +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { + + bindings = < + &kp Q &kp W &kp F &kp P &kp G &kp J &kp L &kp U &kp Y &kp QUOT + &mt MOD_LGUI A &mt MOD_LALT R &mt MOD_LCTL S &mt MOD_LSFT T &kp D &kp H &mt MOD_RSFT N &mt MOD_RCTL E &mt MOD_RALT I &mt MOD_RGUI O + &kp Z &kp X &kp C &kp V &kp B &kp K &kp M &kp CMMA &kp DOT + &kp LGUI &kp LALT &kp LCTL &kp BKSP &kp SPC &kp RET &kp TAB &kp FSLH + >; + + }; + }; +}; diff --git a/app/boards/shields/qaz/qaz.overlay b/app/boards/shields/qaz/qaz.overlay new file mode 100644 index 0000000..75c4d1d --- /dev/null +++ b/app/boards/shields/qaz/qaz.overlay @@ -0,0 +1,46 @@ +#include + +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <7>; + rows = <6>; + map = < + RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(4,0) RC(4,1) RC(4,2) + RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(5,0) RC(5,1) RC(5,2) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(4,3) RC(5,3) + RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(4,4) + >; + }; + + + kscan0: kscan_0 { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + diode-direction = "col2row"; + + col-gpios + = <&pro_micro_d 8 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 1 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 0 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 2 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 9 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 1 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 6 GPIO_ACTIVE_HIGH> + ; + + row-gpios + = <&pro_micro_a 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + }; +}; \ No newline at end of file -- cgit v1.2.3 From 1ff13676f7fbab5c0d69317be0d186709a7872c8 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Fri, 21 Aug 2020 00:31:28 -0400 Subject: fix(docs): Better behavior sidebar label/titles. --- docs/docs/behavior/key-press.md | 3 ++- docs/docs/behavior/layers.md | 8 +++++--- docs/docs/behavior/lighting.md | 11 ++++++----- docs/docs/behavior/misc.md | 3 ++- docs/docs/behavior/mod-tap.md | 3 ++- 5 files changed, 17 insertions(+), 11 deletions(-) diff --git a/docs/docs/behavior/key-press.md b/docs/docs/behavior/key-press.md index 1ae7e31..2edce1d 100644 --- a/docs/docs/behavior/key-press.md +++ b/docs/docs/behavior/key-press.md @@ -1,5 +1,6 @@ --- -title: Key Presses +title: Key Press Behaviors +sidebar_label: Key Press --- ## Summary diff --git a/docs/docs/behavior/layers.md b/docs/docs/behavior/layers.md index 3e520ca..da7f07f 100644 --- a/docs/docs/behavior/layers.md +++ b/docs/docs/behavior/layers.md @@ -1,5 +1,6 @@ --- -title: Layers +title: Layer Behaviors +sidebar_label: Layers --- ## Summary @@ -56,12 +57,13 @@ Example: ``` "Toggle layer" for a : + ``` #define DEFAULT 0 #define NAVI 1 #define NONE 0 - + / { keymap { compatible = "zmk,keymap"; @@ -89,4 +91,4 @@ Example: }; ``` -It is possible to use "toggle layer" to have keys that raise and lower the layers as well. \ No newline at end of file +It is possible to use "toggle layer" to have keys that raise and lower the layers as well. diff --git a/docs/docs/behavior/lighting.md b/docs/docs/behavior/lighting.md index 432960e..2d4f532 100644 --- a/docs/docs/behavior/lighting.md +++ b/docs/docs/behavior/lighting.md @@ -1,15 +1,16 @@ --- -title: Lighting +title: Lighting Behavior +sidebar_label: Lighting --- ## Summary -Lighting is often used for either aesthetics or for the practical purposes of lighting up keys in the dark. +Lighting is often used for either aesthetics or for the practical purposes of lighting up keys in the dark. Currently ZMK supports RGB underglow, which can be changed and configured using its behavior. ## RGB Action Defines -RGB actions defines are provided through the [`dt-bindings/zmk/rgb.h`](https://github.com/zmkfirmware/zmk/blob/main/app/include/dt-bindings/zmk/rgb.h) header, +RGB actions defines are provided through the [`dt-bindings/zmk/rgb.h`](https://github.com/zmkfirmware/zmk/blob/main/app/include/dt-bindings/zmk/rgb.h) header, which is added at the top of the keymap file: ``` @@ -21,7 +22,7 @@ This will allow you to reference the actions defined in this header such as `RGB Here is a table describing the action for each define: | Define | Action | -|-----------|-----------------------------------------------------------| +| --------- | --------------------------------------------------------- | | `RGB_TOG` | Toggles the RGB feature on and off | | `RGB_HUI` | Increases the hue of the RGB feature | | `RGB_HUD` | Decreases the hue of the RGB feature | @@ -47,4 +48,4 @@ Example: ``` &rgb_ug RGB_TOG -``` \ No newline at end of file +``` diff --git a/docs/docs/behavior/misc.md b/docs/docs/behavior/misc.md index 799c91c..446ba33 100644 --- a/docs/docs/behavior/misc.md +++ b/docs/docs/behavior/misc.md @@ -1,5 +1,6 @@ --- -title: Miscellaneous +title: Miscellaneous Behaviors +sidebar_label: Miscellaneous --- ## Summary diff --git a/docs/docs/behavior/mod-tap.md b/docs/docs/behavior/mod-tap.md index cae667e..08e9b65 100644 --- a/docs/docs/behavior/mod-tap.md +++ b/docs/docs/behavior/mod-tap.md @@ -1,5 +1,6 @@ --- -title: Mod-Tap +title: Mod-Tap Behavior +sidebar_label: Mod-Tap --- ## Summary -- cgit v1.2.3 From 5b76179bf6db93717cde0c4da39b5421a0c5bad3 Mon Sep 17 00:00:00 2001 From: tjcampie Date: Fri, 21 Aug 2020 06:31:08 -0500 Subject: Accidentally added these to main branch. --- app/boards/shields/qaz/Kconfig.defconfig | 6 ----- app/boards/shields/qaz/Kconfig.shield | 2 -- app/boards/shields/qaz/qaz.keymap | 19 ------------- app/boards/shields/qaz/qaz.overlay | 46 -------------------------------- 4 files changed, 73 deletions(-) delete mode 100644 app/boards/shields/qaz/Kconfig.defconfig delete mode 100644 app/boards/shields/qaz/Kconfig.shield delete mode 100644 app/boards/shields/qaz/qaz.keymap delete mode 100644 app/boards/shields/qaz/qaz.overlay diff --git a/app/boards/shields/qaz/Kconfig.defconfig b/app/boards/shields/qaz/Kconfig.defconfig deleted file mode 100644 index 148a630..0000000 --- a/app/boards/shields/qaz/Kconfig.defconfig +++ /dev/null @@ -1,6 +0,0 @@ -if SHIELD_QAZ - -config ZMK_KEYBOARD_NAME - default "QAZ_zmk" - -endif \ No newline at end of file diff --git a/app/boards/shields/qaz/Kconfig.shield b/app/boards/shields/qaz/Kconfig.shield deleted file mode 100644 index c365539..0000000 --- a/app/boards/shields/qaz/Kconfig.shield +++ /dev/null @@ -1,2 +0,0 @@ -config SHIELD_MY_BOARD - def_bool $(shields_list_contains,qaz) \ No newline at end of file diff --git a/app/boards/shields/qaz/qaz.keymap b/app/boards/shields/qaz/qaz.keymap deleted file mode 100644 index b83bb47..0000000 --- a/app/boards/shields/qaz/qaz.keymap +++ /dev/null @@ -1,19 +0,0 @@ -#include -#include - -/ { - keymap { - compatible = "zmk,keymap"; - - default_layer { - - bindings = < - &kp Q &kp W &kp F &kp P &kp G &kp J &kp L &kp U &kp Y &kp QUOT - &mt MOD_LGUI A &mt MOD_LALT R &mt MOD_LCTL S &mt MOD_LSFT T &kp D &kp H &mt MOD_RSFT N &mt MOD_RCTL E &mt MOD_RALT I &mt MOD_RGUI O - &kp Z &kp X &kp C &kp V &kp B &kp K &kp M &kp CMMA &kp DOT - &kp LGUI &kp LALT &kp LCTL &kp BKSP &kp SPC &kp RET &kp TAB &kp FSLH - >; - - }; - }; -}; diff --git a/app/boards/shields/qaz/qaz.overlay b/app/boards/shields/qaz/qaz.overlay deleted file mode 100644 index 75c4d1d..0000000 --- a/app/boards/shields/qaz/qaz.overlay +++ /dev/null @@ -1,46 +0,0 @@ -#include - -/ { - chosen { - zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; - }; - - default_transform: keymap_transform_0 { - compatible = "zmk,matrix-transform"; - columns = <7>; - rows = <6>; - map = < - RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(4,0) RC(4,1) RC(4,2) - RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(5,0) RC(5,1) RC(5,2) - RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(4,3) RC(5,3) - RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(4,4) - >; - }; - - - kscan0: kscan_0 { - compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; - diode-direction = "col2row"; - - col-gpios - = <&pro_micro_d 8 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 1 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 0 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 2 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 9 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 1 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 6 GPIO_ACTIVE_HIGH> - ; - - row-gpios - = <&pro_micro_a 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - ; - }; -}; \ No newline at end of file -- cgit v1.2.3 From 805ea770053269278fe0ed443b68f600021d82d1 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Fri, 21 Aug 2020 00:33:48 -0400 Subject: feat(behaviors): Add `&bootloader` behavior. * Allow reset behavior to have a type property. * Add `bootloader` node that triggers DFU UF2 bootloader mode using the AdaFruit nrf52 bootloader. --- app/dts/behaviors/reset.dtsi | 9 +++++ app/dts/bindings/behaviors/zmk,behavior-reset.yaml | 5 +++ app/include/dt-bindings/zmk/reset.h | 12 ++++++ app/src/behaviors/behavior_reset.c | 29 +++++++++------ docs/docs/behavior/reset.md | 43 ++++++++++++++++++++++ docs/sidebars.js | 1 + 6 files changed, 87 insertions(+), 12 deletions(-) create mode 100644 app/include/dt-bindings/zmk/reset.h create mode 100644 docs/docs/behavior/reset.md diff --git a/app/dts/behaviors/reset.dtsi b/app/dts/behaviors/reset.dtsi index 4e3b444..fc4fa14 100644 --- a/app/dts/behaviors/reset.dtsi +++ b/app/dts/behaviors/reset.dtsi @@ -1,3 +1,5 @@ +#include + / { behaviors { reset: behavior_reset { @@ -5,5 +7,12 @@ label = "RESET"; #binding-cells = <0>; }; + + bootloader: behavior_reset_dfu { + compatible = "zmk,behavior-reset"; + label = "BOOTLOADER_RESET"; + type = ; + #binding-cells = <0>; + }; }; }; diff --git a/app/dts/bindings/behaviors/zmk,behavior-reset.yaml b/app/dts/bindings/behaviors/zmk,behavior-reset.yaml index c8e5e6f..061b15e 100644 --- a/app/dts/bindings/behaviors/zmk,behavior-reset.yaml +++ b/app/dts/bindings/behaviors/zmk,behavior-reset.yaml @@ -6,3 +6,8 @@ description: Keyboard Reset Behavior compatible: "zmk,behavior-reset" include: zero_param.yaml + +properties: + type: + type: int + default: 0 diff --git a/app/include/dt-bindings/zmk/reset.h b/app/include/dt-bindings/zmk/reset.h new file mode 100644 index 0000000..b513649 --- /dev/null +++ b/app/include/dt-bindings/zmk/reset.h @@ -0,0 +1,12 @@ +/* + * Copyright (c) 2020 Peter Johanson + * + * SPDX-License-Identifier: MIT + */ + +#define RST_WARM 0x00 +#define RST_COLD 0x01 + +// AdaFruit nrf52 Bootloader Specific. See https://github.com/adafruit/Adafruit_nRF52_Bootloader/blob/d6b28e66053eea467166f44875e3c7ec741cb471/src/main.c#L107 + +#define RST_UF2 0x57 \ No newline at end of file diff --git a/app/src/behaviors/behavior_reset.c b/app/src/behaviors/behavior_reset.c index 44cbc21..30a96ea 100644 --- a/app/src/behaviors/behavior_reset.c +++ b/app/src/behaviors/behavior_reset.c @@ -13,8 +13,9 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); -struct behavior_reset_config { }; -struct behavior_reset_data { }; +struct behavior_reset_config { + int type; +}; static int behavior_reset_init(struct device *dev) { @@ -23,9 +24,11 @@ static int behavior_reset_init(struct device *dev) static int on_keymap_binding_pressed(struct device *dev, u32_t position, u32_t _param1, u32_t _param2) { + const struct behavior_reset_config *cfg = dev->config_info; + // TODO: Correct magic code for going into DFU? // See https://github.com/adafruit/Adafruit_nRF52_Bootloader/blob/d6b28e66053eea467166f44875e3c7ec741cb471/src/main.c#L107 - sys_reboot(0); + sys_reboot(cfg->type); return 0; } @@ -34,12 +37,14 @@ static const struct behavior_driver_api behavior_reset_driver_api = { }; -static const struct behavior_reset_config behavior_reset_config = {}; - -static struct behavior_reset_data behavior_reset_data; - -DEVICE_AND_API_INIT(behavior_reset, DT_INST_LABEL(0), behavior_reset_init, - &behavior_reset_data, - &behavior_reset_config, - APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, - &behavior_reset_driver_api); \ No newline at end of file +#define RST_INST(n) \ + static const struct behavior_reset_config behavior_reset_config_##n = { \ + .type = DT_INST_PROP(n, type) \ + }; \ + DEVICE_AND_API_INIT(behavior_reset_##n, DT_INST_LABEL(n), behavior_reset_init, \ + NULL, \ + &behavior_reset_config_##n, \ + APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ + &behavior_reset_driver_api); + +DT_INST_FOREACH_STATUS_OKAY(RST_INST) \ No newline at end of file diff --git a/docs/docs/behavior/reset.md b/docs/docs/behavior/reset.md new file mode 100644 index 0000000..8cf122b --- /dev/null +++ b/docs/docs/behavior/reset.md @@ -0,0 +1,43 @@ +--- +title: Reset Behaviors +sidebar_label: Reset +--- + +## Summary + +There are two available behaviors that can be used to trigger a reset of the keyboard. +The first is a soft reset, that will simply reset and re-run the currently flashed +firmware; the second when triggered will reset into the bootloader, allowing you to +flash a new firmware to the keyboard. + +## Reset + +The basic reset behavior will reset the keyboard and re-run the firmware flashed +to the device + +### Behavior Binding + +- Reference: `&reset` +- Parameters: None + +Example: + +``` +&reset +``` + +## Bootloader Reset + +The bootloader reset behavior will reset the keyboard and put it into bootloader mode, allowing +you to flash a new firmware. + +### Behavior Binding + +- Reference: `&bootloader` +- Parameters: None + +Example: + +``` +&bootloader +``` diff --git a/docs/sidebars.js b/docs/sidebars.js index 8c7c97f..51313fc 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -12,6 +12,7 @@ module.exports = { "behavior/layers", "behavior/misc", "behavior/mod-tap", + "behavior/reset", "behavior/lighting", ], Development: [ -- cgit v1.2.3 From d4e8312db6766b8fb4c8b76e14a4be9225d918a7 Mon Sep 17 00:00:00 2001 From: CrossR Date: Fri, 21 Aug 2020 17:08:43 +0100 Subject: Mute is a consumer keypress. --- app/boards/shields/sofle/sofle.keymap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/boards/shields/sofle/sofle.keymap b/app/boards/shields/sofle/sofle.keymap index 02f4560..1d7dab0 100644 --- a/app/boards/shields/sofle/sofle.keymap +++ b/app/boards/shields/sofle/sofle.keymap @@ -16,7 +16,7 @@ &kp GRAV &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 &none &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BKSP &kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SCLN &kp QUOT -&kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp M_MUTE &none &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RSFT +&kp LSFT &kp Z &kp X &kp C &kp V &kp B &cp M_MUTE &none &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RSFT &kp LGUI &kp LALT &kp LCTL &mo 1 &kp RET &kp SPC &mo 2 &kp RCTL &kp RALT &kp RGUI >; -- cgit v1.2.3 From 5c29259fedc4a0265064afc0bc141e6bf33425f2 Mon Sep 17 00:00:00 2001 From: CrossR Date: Fri, 21 Aug 2020 17:10:29 +0100 Subject: Remove unpair combo config option. --- app/boards/shields/sofle/sofle_left.conf | 1 - app/boards/shields/sofle/sofle_right.conf | 1 - 2 files changed, 2 deletions(-) diff --git a/app/boards/shields/sofle/sofle_left.conf b/app/boards/shields/sofle/sofle_left.conf index d2d1e3c..1e028a7 100644 --- a/app/boards/shields/sofle/sofle_left.conf +++ b/app/boards/shields/sofle/sofle_left.conf @@ -1,3 +1,2 @@ CONFIG_ZMK_SPLIT=y CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL=y -CONFIG_ZMK_BLE_UNPAIR_COMBO=y diff --git a/app/boards/shields/sofle/sofle_right.conf b/app/boards/shields/sofle/sofle_right.conf index cf16779..990cf7c 100644 --- a/app/boards/shields/sofle/sofle_right.conf +++ b/app/boards/shields/sofle/sofle_right.conf @@ -1,3 +1,2 @@ CONFIG_ZMK_SPLIT=y CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL=y -CONFIG_ZMK_BLE_UNPAIR_COMBO=y -- cgit v1.2.3 From d848034c81ff3dea95a6ca98c0b05c76971647eb Mon Sep 17 00:00:00 2001 From: CrossR Date: Fri, 21 Aug 2020 22:15:27 +0100 Subject: Add keycodes properly. --- app/boards/shields/sofle/sofle.keymap | 2 +- app/include/dt-bindings/zmk/keys.h | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/app/boards/shields/sofle/sofle.keymap b/app/boards/shields/sofle/sofle.keymap index 1d7dab0..f3b276b 100644 --- a/app/boards/shields/sofle/sofle.keymap +++ b/app/boards/shields/sofle/sofle.keymap @@ -52,7 +52,7 @@ &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &kp INS &kp PRSC &kp GUI &trans &trans &kp PGUP &trans &kp UARW &trans &kp NUM_0 &trans &trans &kp LALT &kp LCTL &kp LSFT &trans &kp CLCK &kp PGDN &kp LARW &kp DARW &kp RARW &kp DEL &kp BKSP -&trans &kp 0x7A &kp 0x7B &kp 0x7C &kp 0x7D &trans &trans &trans &trans &trans &trans &trans &trans &trans +&trans &kp UNDO &kp CUT &kp COPY &kp PSTE &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans >; }; diff --git a/app/include/dt-bindings/zmk/keys.h b/app/include/dt-bindings/zmk/keys.h index 0a52857..cd9261d 100644 --- a/app/include/dt-bindings/zmk/keys.h +++ b/app/include/dt-bindings/zmk/keys.h @@ -92,6 +92,11 @@ #define GUI 0x65 +#define UNDO 0x7A +#define CUT 0x7B +#define COPY 0x7C +#define PSTE 0x7D + #define CURU 0xB4 #define LPRN 0xB6 -- cgit v1.2.3 From 39fd98236763bd325059ec0d775bad08babcd332 Mon Sep 17 00:00:00 2001 From: Derek Date: Fri, 21 Aug 2020 17:29:18 -0400 Subject: Swap central back to left hand --- app/boards/shields/splitreus62/splitreus62_left.conf | 2 +- app/boards/shields/splitreus62/splitreus62_right.conf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/boards/shields/splitreus62/splitreus62_left.conf b/app/boards/shields/splitreus62/splitreus62_left.conf index a835adc..e51dee4 100644 --- a/app/boards/shields/splitreus62/splitreus62_left.conf +++ b/app/boards/shields/splitreus62/splitreus62_left.conf @@ -1,2 +1,2 @@ CONFIG_ZMK_SPLIT=y -CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL=y \ No newline at end of file +CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL=y \ No newline at end of file diff --git a/app/boards/shields/splitreus62/splitreus62_right.conf b/app/boards/shields/splitreus62/splitreus62_right.conf index e51dee4..a835adc 100644 --- a/app/boards/shields/splitreus62/splitreus62_right.conf +++ b/app/boards/shields/splitreus62/splitreus62_right.conf @@ -1,2 +1,2 @@ CONFIG_ZMK_SPLIT=y -CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL=y \ No newline at end of file +CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL=y \ No newline at end of file -- cgit v1.2.3 From 796b2dddd98cceae8b6243e61b7c1869929ede8a Mon Sep 17 00:00:00 2001 From: CrossR Date: Fri, 21 Aug 2020 22:41:57 +0100 Subject: Remove erroneous key. --- app/boards/shields/sofle/sofle.keymap | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/boards/shields/sofle/sofle.keymap b/app/boards/shields/sofle/sofle.keymap index f3b276b..b3bf74e 100644 --- a/app/boards/shields/sofle/sofle.keymap +++ b/app/boards/shields/sofle/sofle.keymap @@ -35,7 +35,7 @@ &kp GRAV &kp 1 &kp 2 &kp 3 &kp 4 &kp 5 &kp 6 &kp 7 &kp 8 &kp 9 &kp 0 &kp F12 &trans &kp BANG &kp ATSN &kp HASH &kp CURU &kp PRCT &kp CRRT &kp AMPS &kp KMLT &kp LPRN &kp RPRN &kp PIPE &trans &kp EQL &kp MINUS &kp KPLS &kp LCUR &kp RCUR &trans &trans &kp LBKT &kp RKBT &kp SCLN &kp COLN &kp BSLH &trans - &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans >; sensor-bindings = <&inc_dec_cp M_VOLU M_VOLD &inc_dec_kp PGUP PGDN>; @@ -55,8 +55,8 @@ &trans &kp UNDO &kp CUT &kp COPY &kp PSTE &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans >; - }; sensor-bindings = <&inc_dec_cp M_VOLU M_VOLD &inc_dec_kp PGUP PGDN>; + }; }; }; -- cgit v1.2.3 From c84516bfcfa7e578bd7d30ab6426550b6834ab2d Mon Sep 17 00:00:00 2001 From: CrossR Date: Sat, 22 Aug 2020 09:51:01 +0100 Subject: Fix PR issues. --- app/boards/shields/sofle/Kconfig.shield | 2 +- app/boards/shields/sofle/sofle.dtsi | 2 +- app/boards/shields/sofle/sofle.keymap | 11 ++++++----- app/boards/shields/sofle/sofle_left.overlay | 2 +- app/boards/shields/sofle/sofle_right.overlay | 2 +- 5 files changed, 10 insertions(+), 9 deletions(-) diff --git a/app/boards/shields/sofle/Kconfig.shield b/app/boards/shields/sofle/Kconfig.shield index d8d5d75..e23a97a 100644 --- a/app/boards/shields/sofle/Kconfig.shield +++ b/app/boards/shields/sofle/Kconfig.shield @@ -1,4 +1,4 @@ -# Copyright (c) 2020 Pete Johanson +# Copyright (c) 2020 Ryan Cross # SPDX-License-Identifier: MIT config SHIELD_SOFLE_LEFT diff --git a/app/boards/shields/sofle/sofle.dtsi b/app/boards/shields/sofle/sofle.dtsi index 1a5ea84..9b3d3c0 100644 --- a/app/boards/shields/sofle/sofle.dtsi +++ b/app/boards/shields/sofle/sofle.dtsi @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 Pete Johanson + * Copyright (c) 2020 Pete Johanson, Ryan Cross * * SPDX-License-Identifier: MIT */ diff --git a/app/boards/shields/sofle/sofle.keymap b/app/boards/shields/sofle/sofle.keymap index b3bf74e..aadffa1 100644 --- a/app/boards/shields/sofle/sofle.keymap +++ b/app/boards/shields/sofle/sofle.keymap @@ -24,6 +24,7 @@ }; lower_layer { +// TODO: Some binds are waiting for shifted keycode support. // ------------------------------------------------------------------------------------------------------------ // | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 | // | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | F12 | @@ -31,11 +32,11 @@ // | | = | - | + | { | } | | | | [ | ] | ; | : | \ | | // | | | | | | | | | | | | bindings = < -&trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 -&kp GRAV &kp 1 &kp 2 &kp 3 &kp 4 &kp 5 &kp 6 &kp 7 &kp 8 &kp 9 &kp 0 &kp F12 -&trans &kp BANG &kp ATSN &kp HASH &kp CURU &kp PRCT &kp CRRT &kp AMPS &kp KMLT &kp LPRN &kp RPRN &kp PIPE -&trans &kp EQL &kp MINUS &kp KPLS &kp LCUR &kp RCUR &trans &trans &kp LBKT &kp RKBT &kp SCLN &kp COLN &kp BSLH &trans - &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans +&trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 +&kp GRAV &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 &kp F12 +&trans &kp BANG &kp ATSN &kp HASH &kp CURU &kp PRCT &kp CRRT &kp AMPS &kp KMLT &kp LPRN &kp RPRN &kp PIPE +&trans &kp EQL &kp MINUS &kp KPLS &kp LCUR &kp RCUR &trans &trans &kp LBKT &kp RBKT &kp SCLN &kp COLN &kp BSLH &trans + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans >; sensor-bindings = <&inc_dec_cp M_VOLU M_VOLD &inc_dec_kp PGUP PGDN>; diff --git a/app/boards/shields/sofle/sofle_left.overlay b/app/boards/shields/sofle/sofle_left.overlay index 9dfe52d..0dfb753 100644 --- a/app/boards/shields/sofle/sofle_left.overlay +++ b/app/boards/shields/sofle/sofle_left.overlay @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 Pete Johanson + * Copyright (c) 2020 Ryan Cross * * SPDX-License-Identifier: MIT */ diff --git a/app/boards/shields/sofle/sofle_right.overlay b/app/boards/shields/sofle/sofle_right.overlay index ee1a606..8eaf076 100644 --- a/app/boards/shields/sofle/sofle_right.overlay +++ b/app/boards/shields/sofle/sofle_right.overlay @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 Pete Johanson + * Copyright (c) 2020 Ryan Cross * * SPDX-License-Identifier: MIT */ -- cgit v1.2.3 From 0c255aee84155405741ba8fa0c81c6d711106033 Mon Sep 17 00:00:00 2001 From: crd Date: Sat, 22 Aug 2020 09:29:23 -0700 Subject: [docs] Add bzip to deps --- docs/docs/dev-setup.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/docs/dev-setup.md b/docs/docs/dev-setup.md index 6e893b3..fae0aa0 100644 --- a/docs/docs/dev-setup.md +++ b/docs/docs/dev-setup.md @@ -52,6 +52,7 @@ sudo apt install -y \ autoconf \ automake \ build-essential \ + bzip2 \ ccache \ device-tree-compiler \ dfu-util \ @@ -91,6 +92,7 @@ sudo apt install -y \ autoconf \ automake \ build-essential \ + bzip2 \ ccache \ device-tree-compiler \ dfu-util \ @@ -130,6 +132,7 @@ sudo dnf install -y \ wget \ autoconf \ automake \ + bzip2 \ ccache \ dtc \ dfu-util \ -- cgit v1.2.3 From a0a4b8a2f5abf9e393c1d35e794b2c2e8c0e7abc Mon Sep 17 00:00:00 2001 From: Richard Jones Date: Sat, 22 Aug 2020 21:47:29 +0100 Subject: Romac (#1) * New shield: romac 2.1 --- app/boards/shields/romac/Kconfig.defconfig | 8 ++++ app/boards/shields/romac/Kconfig.shield | 5 +++ app/boards/shields/romac/boards/nice_nano.overlay | 10 +++++ app/boards/shields/romac/romac.conf | 2 + app/boards/shields/romac/romac.dtsi | 50 +++++++++++++++++++++++ app/boards/shields/romac/romac.keymap | 40 ++++++++++++++++++ app/boards/shields/romac/romac.overlay | 19 +++++++++ 7 files changed, 134 insertions(+) create mode 100644 app/boards/shields/romac/Kconfig.defconfig create mode 100644 app/boards/shields/romac/Kconfig.shield create mode 100644 app/boards/shields/romac/boards/nice_nano.overlay create mode 100644 app/boards/shields/romac/romac.conf create mode 100644 app/boards/shields/romac/romac.dtsi create mode 100644 app/boards/shields/romac/romac.keymap create mode 100644 app/boards/shields/romac/romac.overlay diff --git a/app/boards/shields/romac/Kconfig.defconfig b/app/boards/shields/romac/Kconfig.defconfig new file mode 100644 index 0000000..da50e5c --- /dev/null +++ b/app/boards/shields/romac/Kconfig.defconfig @@ -0,0 +1,8 @@ + +if SHIELD_ROMAC + +config ZMK_KEYBOARD_NAME + default "romac" + +endif + diff --git a/app/boards/shields/romac/Kconfig.shield b/app/boards/shields/romac/Kconfig.shield new file mode 100644 index 0000000..a081728 --- /dev/null +++ b/app/boards/shields/romac/Kconfig.shield @@ -0,0 +1,5 @@ +# Copyright (c) 2020 Pete Johansen, Richard Jones +# SPDX-License-Identifier: MIT + +config SHIELD_ROMAC + def_bool $(shields_list_contains,romac) diff --git a/app/boards/shields/romac/boards/nice_nano.overlay b/app/boards/shields/romac/boards/nice_nano.overlay new file mode 100644 index 0000000..1f246d3 --- /dev/null +++ b/app/boards/shields/romac/boards/nice_nano.overlay @@ -0,0 +1,10 @@ +&spi1 { + compatible = "nordic,nrf-spi"; + /* Cannot be used together with i2c0. */ + status = "okay"; + sck-pin = <5>; + mosi-pin = <6>; + miso-pin = <7>; + +}; + diff --git a/app/boards/shields/romac/romac.conf b/app/boards/shields/romac/romac.conf new file mode 100644 index 0000000..5b40fdf --- /dev/null +++ b/app/boards/shields/romac/romac.conf @@ -0,0 +1,2 @@ +CONFIG_ZMK_RGB_UNDERGLOW=n +CONFIG_WS2812_STRIP=n diff --git a/app/boards/shields/romac/romac.dtsi b/app/boards/shields/romac/romac.dtsi new file mode 100644 index 0000000..db9685f --- /dev/null +++ b/app/boards/shields/romac/romac.dtsi @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2020 Pete Johansen, Richard Jones + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <3>; + rows = <4>; +// | SW1 | SW2 | SW3 | +// | SW4 | SW5 | SW6 | +// | SW7 | SW8 | SW9 | +// | SW10 | SW11 | SW12 | + map = < +RC(0,0) RC(0,1) RC(0,2) +RC(1,0) RC(1,1) RC(1,2) +RC(2,0) RC(2,1) RC(2,2) +RC(3,0) RC(3,1) RC(3,2) + >; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + + diode-direction = "col2row"; + row-gpios + = <&pro_micro_d 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + + }; + + bt_unpair_combo: bt_unpair_combo { + compatible = "zmk,bt-unpair-combo"; + }; + +}; + diff --git a/app/boards/shields/romac/romac.keymap b/app/boards/shields/romac/romac.keymap new file mode 100644 index 0000000..101bfaa --- /dev/null +++ b/app/boards/shields/romac/romac.keymap @@ -0,0 +1,40 @@ +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { +// ------------------- +// | 7 | 8 | 9 | +// | 4 | 5 | 6 | +// | 1 | 2 | 3 | +// | MO(1) | 0 | . | +// ---------------------- + bindings = < + &kp NUM_7 &kp NUM_8 &kp NUM_9 + &kp NUM_4 &kp NUM_5 &kp NUM_6 + &kp NUM_1 &kp NUM_2 &kp NUM_3 + &mo 1 &kp NUM_0 &kp DOT + >; + }; + + nav_layer { +// ----------------------- +// | _ | HOME | PGUP | +// | _ | END | PGDN | +// | _ | _ | _ | +// | _ | _ | RET | +// ----------------------- + bindings = < + &trans &kp HOME &kp PGUP + &trans &kp END &kp PGDN + &trans &trans &trans + &trans &trans &kp RET + >; + }; + }; +}; + + diff --git a/app/boards/shields/romac/romac.overlay b/app/boards/shields/romac/romac.overlay new file mode 100644 index 0000000..f16c900 --- /dev/null +++ b/app/boards/shields/romac/romac.overlay @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2020 Pete Johansen, Richard Jones + * + * SPDX-License-Identifier: MIT + */ + +#include "romac.dtsi" + +&kscan0 { + col-gpios + = <&pro_micro_a 0 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> + ; +}; + +&bt_unpair_combo { + key-positions = <0 11>; +}; -- cgit v1.2.3 From bc023baa7d0a319c5468f0ce4839d1722f17b905 Mon Sep 17 00:00:00 2001 From: Mega Mind <68985133+megamind4089@users.noreply.github.com> Date: Sun, 23 Aug 2020 12:59:39 +0800 Subject: Incorporate comments - Change config name to nrfmicro specific --- app/boards/arm/nrfmicro/Kconfig | 2 +- app/boards/arm/nrfmicro/Kconfig.defconfig | 2 +- app/boards/arm/nrfmicro/pinmux.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/boards/arm/nrfmicro/Kconfig b/app/boards/arm/nrfmicro/Kconfig index 80039e9..3501972 100644 --- a/app/boards/arm/nrfmicro/Kconfig +++ b/app/boards/arm/nrfmicro/Kconfig @@ -4,7 +4,7 @@ config BOARD_ENABLE_DCDC default y depends on (BOARD_NRFMICRO_11 || BOARD_NRFMICRO_11_FLIPPED || BOARD_NRFMICRO_13) -config BOARD_ENABLE_CHARGER +config BOARD_NRFMICRO_CHARGER bool "Enable battery charger" default y depends on (BOARD_NRFMICRO_13) diff --git a/app/boards/arm/nrfmicro/Kconfig.defconfig b/app/boards/arm/nrfmicro/Kconfig.defconfig index 69b59ee..9cce5a9 100644 --- a/app/boards/arm/nrfmicro/Kconfig.defconfig +++ b/app/boards/arm/nrfmicro/Kconfig.defconfig @@ -32,7 +32,7 @@ config PINMUX if BOARD_NRFMICRO_13 -config BOARD_ENABLE_CHARGER +config BOARD_NRFMICRO_CHARGER default y endif # BOARD_NRFMICRO_13 diff --git a/app/boards/arm/nrfmicro/pinmux.c b/app/boards/arm/nrfmicro/pinmux.c index be1a4de..3792b59 100644 --- a/app/boards/arm/nrfmicro/pinmux.c +++ b/app/boards/arm/nrfmicro/pinmux.c @@ -23,7 +23,7 @@ static int pinmux_nrfmicro_init(struct device *port) gpio_pin_configure(p1, 9, GPIO_OUTPUT); gpio_pin_set(p1, 9, 0); -#if CONFIG_BOARD_ENABLE_CHARGER +#if CONFIG_BOARD_NRFMICRO_CHARGER gpio_pin_configure(p0, 5, GPIO_OUTPUT); gpio_pin_set(p0, 5, 0); #else -- cgit v1.2.3 From ebc3542aa6a4b45be197aa990e2abd514f92ce00 Mon Sep 17 00:00:00 2001 From: Okke Formsma Date: Sun, 23 Aug 2020 14:46:52 +0200 Subject: fix bug in modtap bahavior which cleared the wrong keycode events --- app/src/behaviors/behavior_mod_tap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/behaviors/behavior_mod_tap.c b/app/src/behaviors/behavior_mod_tap.c index 6151f7e..5a2f60e 100644 --- a/app/src/behaviors/behavior_mod_tap.c +++ b/app/src/behaviors/behavior_mod_tap.c @@ -193,8 +193,8 @@ static int on_keymap_binding_released(struct device *dev, u32_t position, u32_t } struct keycode_state_changed *ev = data->captured_keycode_events[j].event; - data->captured_keycode_events[i].event = NULL; - data->captured_keycode_events[i].active_mods = 0; + data->captured_keycode_events[j].event = NULL; + data->captured_keycode_events[j].active_mods = 0; LOG_DBG("Re-sending latched key press for usage page 0x%02X keycode 0x%02X state %s", ev->usage_page, ev->keycode, (ev->state ? "pressed" : "released")); ZMK_EVENT_RELEASE(ev); k_msleep(10); -- cgit v1.2.3 From 7abcae6949834a4dd9d4fdb41ebc68acb36d3db7 Mon Sep 17 00:00:00 2001 From: CrossR Date: Sun, 23 Aug 2020 18:48:28 +0100 Subject: Update License info. --- app/boards/shields/sofle/Kconfig.defconfig | 2 ++ app/boards/shields/sofle/sofle.conf | 3 +++ app/boards/shields/sofle/sofle_left.conf | 3 +++ app/boards/shields/sofle/sofle_right.conf | 3 +++ 4 files changed, 11 insertions(+) diff --git a/app/boards/shields/sofle/Kconfig.defconfig b/app/boards/shields/sofle/Kconfig.defconfig index 2ccf147..58d8217 100644 --- a/app/boards/shields/sofle/Kconfig.defconfig +++ b/app/boards/shields/sofle/Kconfig.defconfig @@ -1,3 +1,5 @@ +# Copyright (c) 2020 Ryan Cross +# SPDX-License-Identifier: MIT if SHIELD_SOFLE_LEFT diff --git a/app/boards/shields/sofle/sofle.conf b/app/boards/shields/sofle/sofle.conf index 2194add..fe3f0f4 100644 --- a/app/boards/shields/sofle/sofle.conf +++ b/app/boards/shields/sofle/sofle.conf @@ -1,3 +1,6 @@ +# Copyright (c) 2020 Ryan Cross +# SPDX-License-Identifier: MIT + # Uncomment the following line to enable the Sofle OLED Display # CONFIG_ZMK_DISPLAY=y diff --git a/app/boards/shields/sofle/sofle_left.conf b/app/boards/shields/sofle/sofle_left.conf index 1e028a7..bbac735 100644 --- a/app/boards/shields/sofle/sofle_left.conf +++ b/app/boards/shields/sofle/sofle_left.conf @@ -1,2 +1,5 @@ +# Copyright (c) 2020 Ryan Cross +# SPDX-License-Identifier: MIT + CONFIG_ZMK_SPLIT=y CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL=y diff --git a/app/boards/shields/sofle/sofle_right.conf b/app/boards/shields/sofle/sofle_right.conf index 990cf7c..ca5de38 100644 --- a/app/boards/shields/sofle/sofle_right.conf +++ b/app/boards/shields/sofle/sofle_right.conf @@ -1,2 +1,5 @@ +# Copyright (c) 2020 Ryan Cross +# SPDX-License-Identifier: MIT + CONFIG_ZMK_SPLIT=y CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL=y -- cgit v1.2.3 From 221535fdc1c921c132d8a8539c62eb18e9c5f681 Mon Sep 17 00:00:00 2001 From: Richard Jones Date: Sun, 23 Aug 2020 19:28:03 +0100 Subject: refactor to remove SPI; no need for shared DTSI --- app/boards/shields/romac/boards/nice_nano.overlay | 10 ---- app/boards/shields/romac/romac.conf | 2 - app/boards/shields/romac/romac.dtsi | 50 ------------------- app/boards/shields/romac/romac.overlay | 60 ++++++++++++++++++----- 4 files changed, 49 insertions(+), 73 deletions(-) delete mode 100644 app/boards/shields/romac/boards/nice_nano.overlay delete mode 100644 app/boards/shields/romac/romac.dtsi diff --git a/app/boards/shields/romac/boards/nice_nano.overlay b/app/boards/shields/romac/boards/nice_nano.overlay deleted file mode 100644 index 1f246d3..0000000 --- a/app/boards/shields/romac/boards/nice_nano.overlay +++ /dev/null @@ -1,10 +0,0 @@ -&spi1 { - compatible = "nordic,nrf-spi"; - /* Cannot be used together with i2c0. */ - status = "okay"; - sck-pin = <5>; - mosi-pin = <6>; - miso-pin = <7>; - -}; - diff --git a/app/boards/shields/romac/romac.conf b/app/boards/shields/romac/romac.conf index 5b40fdf..e69de29 100644 --- a/app/boards/shields/romac/romac.conf +++ b/app/boards/shields/romac/romac.conf @@ -1,2 +0,0 @@ -CONFIG_ZMK_RGB_UNDERGLOW=n -CONFIG_WS2812_STRIP=n diff --git a/app/boards/shields/romac/romac.dtsi b/app/boards/shields/romac/romac.dtsi deleted file mode 100644 index db9685f..0000000 --- a/app/boards/shields/romac/romac.dtsi +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (c) 2020 Pete Johansen, Richard Jones - * - * SPDX-License-Identifier: MIT - */ - -#include - -/ { - chosen { - zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; - }; - - default_transform: keymap_transform_0 { - compatible = "zmk,matrix-transform"; - columns = <3>; - rows = <4>; -// | SW1 | SW2 | SW3 | -// | SW4 | SW5 | SW6 | -// | SW7 | SW8 | SW9 | -// | SW10 | SW11 | SW12 | - map = < -RC(0,0) RC(0,1) RC(0,2) -RC(1,0) RC(1,1) RC(1,2) -RC(2,0) RC(2,1) RC(2,2) -RC(3,0) RC(3,1) RC(3,2) - >; - }; - - kscan0: kscan { - compatible = "zmk,kscan-gpio-matrix"; - label = "KSCAN"; - - diode-direction = "col2row"; - row-gpios - = <&pro_micro_d 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - , <&pro_micro_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> - ; - - }; - - bt_unpair_combo: bt_unpair_combo { - compatible = "zmk,bt-unpair-combo"; - }; - -}; - diff --git a/app/boards/shields/romac/romac.overlay b/app/boards/shields/romac/romac.overlay index f16c900..7449703 100644 --- a/app/boards/shields/romac/romac.overlay +++ b/app/boards/shields/romac/romac.overlay @@ -4,16 +4,54 @@ * SPDX-License-Identifier: MIT */ -#include "romac.dtsi" - -&kscan0 { - col-gpios - = <&pro_micro_a 0 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> - ; -}; +#include + +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <3>; + rows = <4>; +// | SW1 | SW2 | SW3 | +// | SW4 | SW5 | SW6 | +// | SW7 | SW8 | SW9 | +// | SW10 | SW11 | SW12 | + map = < +RC(0,0) RC(0,1) RC(0,2) +RC(1,0) RC(1,1) RC(1,2) +RC(2,0) RC(2,1) RC(2,2) +RC(3,0) RC(3,1) RC(3,2) + >; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + + diode-direction = "col2row"; + row-gpios + = <&pro_micro_d 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + + col-gpios + = <&pro_micro_a 0 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> + ; + + }; + + bt_unpair_combo: bt_unpair_combo { + compatible = "zmk,bt-unpair-combo"; + key-positions = <0 11>; + }; -&bt_unpair_combo { - key-positions = <0 11>; }; + -- cgit v1.2.3 From 9b5af05f164582f22f3b4021c48660153f510ef2 Mon Sep 17 00:00:00 2001 From: Richard Jones Date: Sun, 23 Aug 2020 19:59:41 +0100 Subject: Make the shield name on-brand --- app/boards/shields/romac/Kconfig.defconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/boards/shields/romac/Kconfig.defconfig b/app/boards/shields/romac/Kconfig.defconfig index da50e5c..b6490ac 100644 --- a/app/boards/shields/romac/Kconfig.defconfig +++ b/app/boards/shields/romac/Kconfig.defconfig @@ -2,7 +2,7 @@ if SHIELD_ROMAC config ZMK_KEYBOARD_NAME - default "romac" + default "RoMac" endif -- cgit v1.2.3 From 3ce94593652b89a6f5a59fce9fba284b022cc946 Mon Sep 17 00:00:00 2001 From: Richard Jones Date: Sun, 23 Aug 2020 20:02:28 +0100 Subject: Add license / copyright --- app/boards/shields/romac/Kconfig.defconfig | 5 +++++ app/boards/shields/romac/romac.keymap | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/app/boards/shields/romac/Kconfig.defconfig b/app/boards/shields/romac/Kconfig.defconfig index b6490ac..0ef6f6b 100644 --- a/app/boards/shields/romac/Kconfig.defconfig +++ b/app/boards/shields/romac/Kconfig.defconfig @@ -1,3 +1,8 @@ +/* + * Copyright (c) 2020 Pete Johansen, Richard Jones + * + * SPDX-License-Identifier: MIT + */ if SHIELD_ROMAC diff --git a/app/boards/shields/romac/romac.keymap b/app/boards/shields/romac/romac.keymap index 101bfaa..5557383 100644 --- a/app/boards/shields/romac/romac.keymap +++ b/app/boards/shields/romac/romac.keymap @@ -1,3 +1,9 @@ +/* + * Copyright (c) 2020 Pete Johansen, Richard Jones + * + * SPDX-License-Identifier: MIT + */ + #include #include -- cgit v1.2.3 From cafd5c1fe2fade4646bc901d2aa6a185ca842f4d Mon Sep 17 00:00:00 2001 From: Richard Jones Date: Sun, 23 Aug 2020 20:05:56 +0100 Subject: Oops comment format --- app/boards/shields/romac/Kconfig.defconfig | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/app/boards/shields/romac/Kconfig.defconfig b/app/boards/shields/romac/Kconfig.defconfig index 0ef6f6b..50e4fdc 100644 --- a/app/boards/shields/romac/Kconfig.defconfig +++ b/app/boards/shields/romac/Kconfig.defconfig @@ -1,8 +1,6 @@ -/* - * Copyright (c) 2020 Pete Johansen, Richard Jones - * - * SPDX-License-Identifier: MIT - */ +# Copyright (c) 2020 Pete Johansen, Richard Jones +# +# SPDX-License-Identifier: MIT if SHIELD_ROMAC -- cgit v1.2.3 From 3affd45f0d4c85e417a9da27737cef4350c43a84 Mon Sep 17 00:00:00 2001 From: Richard Jones Date: Sun, 23 Aug 2020 20:08:00 +0100 Subject: Formatting --- app/boards/shields/romac/Kconfig.defconfig | 1 - 1 file changed, 1 deletion(-) diff --git a/app/boards/shields/romac/Kconfig.defconfig b/app/boards/shields/romac/Kconfig.defconfig index 50e4fdc..22be9fe 100644 --- a/app/boards/shields/romac/Kconfig.defconfig +++ b/app/boards/shields/romac/Kconfig.defconfig @@ -1,5 +1,4 @@ # Copyright (c) 2020 Pete Johansen, Richard Jones -# # SPDX-License-Identifier: MIT if SHIELD_ROMAC -- cgit v1.2.3 From 6ac1a324e0bf91a405333e4bf89b4b35a50afc49 Mon Sep 17 00:00:00 2001 From: Richard Jones Date: Wed, 26 Aug 2020 21:25:26 +0100 Subject: Typo --- app/boards/shields/romac/Kconfig.defconfig | 2 +- app/boards/shields/romac/Kconfig.shield | 2 +- app/boards/shields/romac/romac.keymap | 2 +- app/boards/shields/romac/romac.overlay | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/boards/shields/romac/Kconfig.defconfig b/app/boards/shields/romac/Kconfig.defconfig index 22be9fe..5352797 100644 --- a/app/boards/shields/romac/Kconfig.defconfig +++ b/app/boards/shields/romac/Kconfig.defconfig @@ -1,4 +1,4 @@ -# Copyright (c) 2020 Pete Johansen, Richard Jones +# Copyright (c) 2020 Pete Johanson, Richard Jones # SPDX-License-Identifier: MIT if SHIELD_ROMAC diff --git a/app/boards/shields/romac/Kconfig.shield b/app/boards/shields/romac/Kconfig.shield index a081728..59669d3 100644 --- a/app/boards/shields/romac/Kconfig.shield +++ b/app/boards/shields/romac/Kconfig.shield @@ -1,4 +1,4 @@ -# Copyright (c) 2020 Pete Johansen, Richard Jones +# Copyright (c) 2020 Pete Johanson, Richard Jones # SPDX-License-Identifier: MIT config SHIELD_ROMAC diff --git a/app/boards/shields/romac/romac.keymap b/app/boards/shields/romac/romac.keymap index 5557383..f94a829 100644 --- a/app/boards/shields/romac/romac.keymap +++ b/app/boards/shields/romac/romac.keymap @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 Pete Johansen, Richard Jones + * Copyright (c) 2020 Pete Johanson, Richard Jones * * SPDX-License-Identifier: MIT */ diff --git a/app/boards/shields/romac/romac.overlay b/app/boards/shields/romac/romac.overlay index 7449703..cae0568 100644 --- a/app/boards/shields/romac/romac.overlay +++ b/app/boards/shields/romac/romac.overlay @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 Pete Johansen, Richard Jones + * Copyright (c) 2020 Pete Johanson, Richard Jones * * SPDX-License-Identifier: MIT */ -- cgit v1.2.3 From b8fbc3784d0e3dcb3bfba39c0936b2a110894ef8 Mon Sep 17 00:00:00 2001 From: Richard Jones Date: Wed, 26 Aug 2020 21:25:46 +0100 Subject: Not needed --- app/boards/shields/romac/romac.overlay | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/app/boards/shields/romac/romac.overlay b/app/boards/shields/romac/romac.overlay index cae0568..67d5868 100644 --- a/app/boards/shields/romac/romac.overlay +++ b/app/boards/shields/romac/romac.overlay @@ -9,23 +9,6 @@ / { chosen { zmk,kscan = &kscan0; - zmk,matrix_transform = &default_transform; - }; - - default_transform: keymap_transform_0 { - compatible = "zmk,matrix-transform"; - columns = <3>; - rows = <4>; -// | SW1 | SW2 | SW3 | -// | SW4 | SW5 | SW6 | -// | SW7 | SW8 | SW9 | -// | SW10 | SW11 | SW12 | - map = < -RC(0,0) RC(0,1) RC(0,2) -RC(1,0) RC(1,1) RC(1,2) -RC(2,0) RC(2,1) RC(2,2) -RC(3,0) RC(3,1) RC(3,2) - >; }; kscan0: kscan { -- cgit v1.2.3 From e5da5ea40d3971af272e5004deb6ed3f1d151788 Mon Sep 17 00:00:00 2001 From: Richard Jones Date: Wed, 26 Aug 2020 21:31:46 +0100 Subject: add romac to build --- .github/workflows/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5086bf8..c8a711c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -16,6 +16,7 @@ jobs: - kyria_right - lily58_left - lily58_right + - romac include: - board: proton_c shield: clueboard_california -- cgit v1.2.3 From 79f0ecf8b5a79f280c5f25209701218caa8e8b2a Mon Sep 17 00:00:00 2001 From: jrhe <4038905+jrhe@users.noreply.github.com> Date: Fri, 28 Aug 2020 01:02:50 +0100 Subject: Correct number of rows in Lily58 shield --- app/boards/shields/lily58/lily58.dtsi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/boards/shields/lily58/lily58.dtsi b/app/boards/shields/lily58/lily58.dtsi index 24f6805..23f5644 100644 --- a/app/boards/shields/lily58/lily58.dtsi +++ b/app/boards/shields/lily58/lily58.dtsi @@ -15,7 +15,7 @@ default_transform: keymap_transform_0 { compatible = "zmk,matrix-transform"; columns = <16>; - rows = <4>; + rows = <5>; // | SW6 | SW5 | SW4 | SW3 | SW2 | SW1 | | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 | // | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | // | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 | | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 | -- cgit v1.2.3 From ac3e4af1ce7fb40495c50eb2184b43ecbe1f11a9 Mon Sep 17 00:00:00 2001 From: tominabox1 Date: Thu, 27 Aug 2020 19:09:40 -0500 Subject: Add QAZ shield --- app/boards/shields/qaz/Kconfig.defconfig | 6 ++ app/boards/shields/qaz/Kconfig.shield | 2 + app/boards/shields/qaz/boards/nice_nano.overlay | 22 ++++++++ app/boards/shields/qaz/qaz.conf | 26 +++++++++ app/boards/shields/qaz/qaz.keymap | 75 +++++++++++++++++++++++++ app/boards/shields/qaz/qaz.overlay | 48 ++++++++++++++++ 6 files changed, 179 insertions(+) create mode 100644 app/boards/shields/qaz/Kconfig.defconfig create mode 100644 app/boards/shields/qaz/Kconfig.shield create mode 100644 app/boards/shields/qaz/boards/nice_nano.overlay create mode 100644 app/boards/shields/qaz/qaz.conf create mode 100644 app/boards/shields/qaz/qaz.keymap create mode 100644 app/boards/shields/qaz/qaz.overlay diff --git a/app/boards/shields/qaz/Kconfig.defconfig b/app/boards/shields/qaz/Kconfig.defconfig new file mode 100644 index 0000000..18cceaa --- /dev/null +++ b/app/boards/shields/qaz/Kconfig.defconfig @@ -0,0 +1,6 @@ +if SHIELD_QAZ + +config ZMK_KEYBOARD_NAME + default "QAZ" + +endif \ No newline at end of file diff --git a/app/boards/shields/qaz/Kconfig.shield b/app/boards/shields/qaz/Kconfig.shield new file mode 100644 index 0000000..1e1112a --- /dev/null +++ b/app/boards/shields/qaz/Kconfig.shield @@ -0,0 +1,2 @@ +config SHIELD_MY_BOARD + def_bool $(shields_list_contains,qaz) diff --git a/app/boards/shields/qaz/boards/nice_nano.overlay b/app/boards/shields/qaz/boards/nice_nano.overlay new file mode 100644 index 0000000..2927d0d --- /dev/null +++ b/app/boards/shields/qaz/boards/nice_nano.overlay @@ -0,0 +1,22 @@ +&spi1 { + compatible = "nordic,nrf-spi"; + status = "okay"; + mosi-pin = <47>; + // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. + sck-pin = <5>; + miso-pin = <7>; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <21>; /* number of LEDs */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + }; +}; \ No newline at end of file diff --git a/app/boards/shields/qaz/qaz.conf b/app/boards/shields/qaz/qaz.conf new file mode 100644 index 0000000..7d6da43 --- /dev/null +++ b/app/boards/shields/qaz/qaz.conf @@ -0,0 +1,26 @@ +CONFIG_ZMK_RGB_UNDERGLOW=n +# Use the STRIP config specific to the LEDs you're using +CONFIG_WS2812_STRIP=n +# Turn on logging, and set ZMK logging to debug output +CONFIG_LOG=y +CONFIG_ZMK_LOG_LEVEL_DBG=y + +# Turn on USB CDC ACM device +CONFIG_USB=y +CONFIG_USB_DEVICE_STACK=y +CONFIG_USB_CDC_ACM=y +CONFIG_USB_CDC_ACM_RINGBUF_SIZE=1024 +CONFIG_USB_CDC_ACM_DEVICE_NAME="CDC_ACM" +CONFIG_USB_CDC_ACM_DEVICE_COUNT=1 + +# Enable serial console +CONFIG_SERIAL=y +CONFIG_CONSOLE=y +CONFIG_UART_INTERRUPT_DRIVEN=y +CONFIG_UART_LINE_CTRL=y + +# Enable USB UART, and set the console device +CONFIG_UART_CONSOLE=y +CONFIG_USB_UART_CONSOLE=y +CONFIG_UART_CONSOLE_ON_DEV_NAME="CDC_ACM_0" +CONFIG_USB_UART_DTR_WAIT=n \ No newline at end of file diff --git a/app/boards/shields/qaz/qaz.keymap b/app/boards/shields/qaz/qaz.keymap new file mode 100644 index 0000000..fa4ede1 --- /dev/null +++ b/app/boards/shields/qaz/qaz.keymap @@ -0,0 +1,75 @@ +#include +#include +#include + +#define DEFAULT 0 +#define NUM_SYM 1 +#define NAV 2 + +/ { + behaviors { + rst: behavior_tap_hold1 { + compatible = "zmk,behavior-tap-hold"; + label = "Bootloader Tap - Reset Hold"; + #binding-cells = <0>; + hold_ms = <200>; + bindings = <&bootloader>, <&reset>, <&kp BKSP>; + }; + + num_spc: behavior_tap_hold2 { + compatible = "zmk,behavior-tap-hold"; + label = "Space Tap - Num/Sym Hold"; + #binding-cells = <0>; + hold_ms = <300>; + bindings = <&kp SPC>, <&mo NUM_SYM>; + }; + + ent_nav: behavior_tap_hold{ + compatible = "zmk,behavior-tap-hold"; + label = "Return Tap - Nav Hold"; + #binding-cells = <0>; + hold_ms = <100>; + bindings = <&kp RET>, <&mo NAV>; + }; + + com_col: behavior_tap_hold10 { + compatible = "zmk,behavior-tap-hold"; + label = ", tap, hold"; + #binding-cells = <0>; + hold_ms = <200>; + bindings = <&kp CMMA>, <&kp SCLN>, <&kp BKSP>; + }; + }; + }; + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { + bindings = < + &kp Q &kp W &kp F &kp P &kp G &kp J &kp L &kp U &kp Y &kp QUOT + &kp A &kp R &kp S &kp T &kp D &kp H &kp N &kp E &kp I &kp O + &kp Z &kp X &kp C &kp V &kp B &kp K &kp M &com_col &kp DOT + &kp LSFT &kp LGUI &kp TAB &ent_nav &num_spc &kp LCTL &kp LALT &kp FSLH + >; + }; + num_sym { + bindings = < + &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 + &trans &trans &trans &trans &trans &trans &trans &trans &kp EQL &kp MINUS + &kp DEL &none &none &none &none &none &none &none &kp DOT + &rst &none &none &trans &trans &kp RET &trans &kp FSLH + >; + }; + + nav { + bindings = < + &none &none &none &none &none &none &none &kp UARW &none &kp BKSP + &trans &trans &trans &trans &none &none &kp LARW &kp DARW &kp RARW &none + &none &none &none &none &none &none &none &none &none + &rgb_ug RGB_TOG &rgb_ug RGB_EFF &none &trans &trans &kp RET &trans &kp FSLH + >; + }; + }; +}; \ No newline at end of file diff --git a/app/boards/shields/qaz/qaz.overlay b/app/boards/shields/qaz/qaz.overlay new file mode 100644 index 0000000..3dae7dd --- /dev/null +++ b/app/boards/shields/qaz/qaz.overlay @@ -0,0 +1,48 @@ +#include + +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + zmk,underglow = &led_strip; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <7>; + rows = <6>; + map = < + RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(4,0) RC(4,1) RC(4,2) + RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(5,0) RC(5,1) RC(5,2) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(4,3) RC(5,3) + RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(4,4) + >; + }; + + + kscan0: kscan_0 { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + diode-direction = "col2row"; + + col-gpios + = <&pro_micro_d 8 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 1 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 0 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 2 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 9 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 1 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 6 GPIO_ACTIVE_HIGH> + ; + + row-gpios + = <&pro_micro_a 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + }; + +}; \ No newline at end of file -- cgit v1.2.3 From cbea2d5bed4562a9fea8480c9c23b2365c2378a4 Mon Sep 17 00:00:00 2001 From: Cody McGinnis Date: Thu, 27 Aug 2020 23:12:56 -0400 Subject: fix(behavior): none should not be transparent --- app/src/behaviors/behavior_none.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/behaviors/behavior_none.c b/app/src/behaviors/behavior_none.c index 7e77e54..e822d5e 100644 --- a/app/src/behaviors/behavior_none.c +++ b/app/src/behaviors/behavior_none.c @@ -23,12 +23,12 @@ static int behavior_none_init(struct device *dev) static int on_keymap_binding_pressed(struct device *dev, u32_t position, u32_t _param1, u32_t _param2) { - return 1; + return 0; } static int on_keymap_binding_released(struct device *dev, u32_t position, u32_t _param1, u32_t _param2) { - return 1; + return 0; } static const struct behavior_driver_api behavior_none_driver_api = { -- cgit v1.2.3 From cf003262e63a29dd6384645a8c96951a963f30d3 Mon Sep 17 00:00:00 2001 From: tominabox1 Date: Thu, 27 Aug 2020 22:23:27 -0500 Subject: Remove RGB, Remove debug, Add Copyright and Licenses --- app/boards/shields/qaz/Kconfig.defconfig | 3 ++ app/boards/shields/qaz/Kconfig.shield | 5 ++- app/boards/shields/qaz/boards/nice_nano.overlay | 22 ----------- app/boards/shields/qaz/qaz.conf | 26 ------------- app/boards/shields/qaz/qaz.keymap | 49 +++---------------------- app/boards/shields/qaz/qaz.overlay | 7 +++- 6 files changed, 19 insertions(+), 93 deletions(-) delete mode 100644 app/boards/shields/qaz/boards/nice_nano.overlay delete mode 100644 app/boards/shields/qaz/qaz.conf diff --git a/app/boards/shields/qaz/Kconfig.defconfig b/app/boards/shields/qaz/Kconfig.defconfig index 18cceaa..f82f458 100644 --- a/app/boards/shields/qaz/Kconfig.defconfig +++ b/app/boards/shields/qaz/Kconfig.defconfig @@ -1,3 +1,6 @@ + # Copyright (c) 2020 TJ Campie + # SPDX-License-Identifier: MIT + if SHIELD_QAZ config ZMK_KEYBOARD_NAME diff --git a/app/boards/shields/qaz/Kconfig.shield b/app/boards/shields/qaz/Kconfig.shield index 1e1112a..9da6077 100644 --- a/app/boards/shields/qaz/Kconfig.shield +++ b/app/boards/shields/qaz/Kconfig.shield @@ -1,2 +1,5 @@ -config SHIELD_MY_BOARD +# Copyright (c) 2020 TJ Campie +# SPDX-License-Identifier: MIT + + config SHIELD_MY_BOARD def_bool $(shields_list_contains,qaz) diff --git a/app/boards/shields/qaz/boards/nice_nano.overlay b/app/boards/shields/qaz/boards/nice_nano.overlay deleted file mode 100644 index 2927d0d..0000000 --- a/app/boards/shields/qaz/boards/nice_nano.overlay +++ /dev/null @@ -1,22 +0,0 @@ -&spi1 { - compatible = "nordic,nrf-spi"; - status = "okay"; - mosi-pin = <47>; - // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. - sck-pin = <5>; - miso-pin = <7>; - - led_strip: ws2812@0 { - compatible = "worldsemi,ws2812-spi"; - label = "WS2812"; - - /* SPI */ - reg = <0>; /* ignored, but necessary for SPI bindings */ - spi-max-frequency = <4000000>; - - /* WS2812 */ - chain-length = <21>; /* number of LEDs */ - spi-one-frame = <0x70>; - spi-zero-frame = <0x40>; - }; -}; \ No newline at end of file diff --git a/app/boards/shields/qaz/qaz.conf b/app/boards/shields/qaz/qaz.conf deleted file mode 100644 index 7d6da43..0000000 --- a/app/boards/shields/qaz/qaz.conf +++ /dev/null @@ -1,26 +0,0 @@ -CONFIG_ZMK_RGB_UNDERGLOW=n -# Use the STRIP config specific to the LEDs you're using -CONFIG_WS2812_STRIP=n -# Turn on logging, and set ZMK logging to debug output -CONFIG_LOG=y -CONFIG_ZMK_LOG_LEVEL_DBG=y - -# Turn on USB CDC ACM device -CONFIG_USB=y -CONFIG_USB_DEVICE_STACK=y -CONFIG_USB_CDC_ACM=y -CONFIG_USB_CDC_ACM_RINGBUF_SIZE=1024 -CONFIG_USB_CDC_ACM_DEVICE_NAME="CDC_ACM" -CONFIG_USB_CDC_ACM_DEVICE_COUNT=1 - -# Enable serial console -CONFIG_SERIAL=y -CONFIG_CONSOLE=y -CONFIG_UART_INTERRUPT_DRIVEN=y -CONFIG_UART_LINE_CTRL=y - -# Enable USB UART, and set the console device -CONFIG_UART_CONSOLE=y -CONFIG_USB_UART_CONSOLE=y -CONFIG_UART_CONSOLE_ON_DEV_NAME="CDC_ACM_0" -CONFIG_USB_UART_DTR_WAIT=n \ No newline at end of file diff --git a/app/boards/shields/qaz/qaz.keymap b/app/boards/shields/qaz/qaz.keymap index fa4ede1..cebcd4b 100644 --- a/app/boards/shields/qaz/qaz.keymap +++ b/app/boards/shields/qaz/qaz.keymap @@ -1,46 +1,9 @@ #include #include -#include #define DEFAULT 0 #define NUM_SYM 1 #define NAV 2 - -/ { - behaviors { - rst: behavior_tap_hold1 { - compatible = "zmk,behavior-tap-hold"; - label = "Bootloader Tap - Reset Hold"; - #binding-cells = <0>; - hold_ms = <200>; - bindings = <&bootloader>, <&reset>, <&kp BKSP>; - }; - - num_spc: behavior_tap_hold2 { - compatible = "zmk,behavior-tap-hold"; - label = "Space Tap - Num/Sym Hold"; - #binding-cells = <0>; - hold_ms = <300>; - bindings = <&kp SPC>, <&mo NUM_SYM>; - }; - - ent_nav: behavior_tap_hold{ - compatible = "zmk,behavior-tap-hold"; - label = "Return Tap - Nav Hold"; - #binding-cells = <0>; - hold_ms = <100>; - bindings = <&kp RET>, <&mo NAV>; - }; - - com_col: behavior_tap_hold10 { - compatible = "zmk,behavior-tap-hold"; - label = ", tap, hold"; - #binding-cells = <0>; - hold_ms = <200>; - bindings = <&kp CMMA>, <&kp SCLN>, <&kp BKSP>; - }; - }; - }; / { keymap { @@ -48,10 +11,10 @@ default_layer { bindings = < - &kp Q &kp W &kp F &kp P &kp G &kp J &kp L &kp U &kp Y &kp QUOT - &kp A &kp R &kp S &kp T &kp D &kp H &kp N &kp E &kp I &kp O - &kp Z &kp X &kp C &kp V &kp B &kp K &kp M &com_col &kp DOT - &kp LSFT &kp LGUI &kp TAB &ent_nav &num_spc &kp LCTL &kp LALT &kp FSLH + &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P + &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp RET + &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp CMMA &kp DOT + &kp LSFT &kp LGUI &kp LALT &mo NAV &kp SPC &mo NUM_SYM &kp QUOT &kp FSLH >; }; num_sym { @@ -59,7 +22,7 @@ &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 &trans &trans &trans &trans &trans &trans &trans &trans &kp EQL &kp MINUS &kp DEL &none &none &none &none &none &none &none &kp DOT - &rst &none &none &trans &trans &kp RET &trans &kp FSLH + &bootloader &reset &none &trans &trans &kp RET &trans &kp FSLH >; }; @@ -68,7 +31,7 @@ &none &none &none &none &none &none &none &kp UARW &none &kp BKSP &trans &trans &trans &trans &none &none &kp LARW &kp DARW &kp RARW &none &none &none &none &none &none &none &none &none &none - &rgb_ug RGB_TOG &rgb_ug RGB_EFF &none &trans &trans &kp RET &trans &kp FSLH + &none &none &none &none &none &trans &trans &kp RET &trans &kp FSLH >; }; }; diff --git a/app/boards/shields/qaz/qaz.overlay b/app/boards/shields/qaz/qaz.overlay index 3dae7dd..472005b 100644 --- a/app/boards/shields/qaz/qaz.overlay +++ b/app/boards/shields/qaz/qaz.overlay @@ -1,10 +1,15 @@ +/* + * Copyright (c) 2020 TJ Campie + * + * SPDX-License-Identifier: MIT + */ + #include / { chosen { zmk,kscan = &kscan0; zmk,matrix_transform = &default_transform; - zmk,underglow = &led_strip; }; default_transform: keymap_transform_0 { -- cgit v1.2.3 From f02fa01e9a9af1a1637a387f3e8044a791b47ced Mon Sep 17 00:00:00 2001 From: Cody McGinnis Date: Fri, 28 Aug 2020 16:21:31 -0400 Subject: fix(test): change the layout --- app/boards/native_posix.conf | 3 +- app/boards/native_posix.overlay | 73 ++-------------------- app/dts/bindings/zmk,kscan-mock.yaml | 2 + app/include/dt-bindings/zmk/kscan-mock.h | 8 +++ app/include/zmk/kscan-mock.h | 8 --- app/prj.conf | 0 app/run-test.sh | 17 +++++ app/src/kscan_mock.c | 12 +++- app/tests/keypress/behavior_keymap.dtsi | 28 +++++++++ .../keypress/cp-press-release/events.patterns | 1 + .../cp-press-release/keycode_events.snapshot | 2 + .../keypress/cp-press-release/native_posix.keymap | 5 ++ .../keypress/kp-press-release/events.patterns | 1 + .../kp-press-release/keycode_events.snapshot | 2 + .../keypress/kp-press-release/native_posix.keymap | 8 +++ 15 files changed, 90 insertions(+), 80 deletions(-) create mode 100644 app/include/dt-bindings/zmk/kscan-mock.h delete mode 100644 app/include/zmk/kscan-mock.h create mode 100644 app/prj.conf create mode 100755 app/run-test.sh create mode 100644 app/tests/keypress/behavior_keymap.dtsi create mode 100644 app/tests/keypress/cp-press-release/events.patterns create mode 100644 app/tests/keypress/cp-press-release/keycode_events.snapshot create mode 100644 app/tests/keypress/cp-press-release/native_posix.keymap create mode 100644 app/tests/keypress/kp-press-release/events.patterns create mode 100644 app/tests/keypress/kp-press-release/keycode_events.snapshot create mode 100644 app/tests/keypress/kp-press-release/native_posix.keymap diff --git a/app/boards/native_posix.conf b/app/boards/native_posix.conf index 5bfb366..357b1b8 100644 --- a/app/boards/native_posix.conf +++ b/app/boards/native_posix.conf @@ -1,9 +1,8 @@ CONFIG_KSCAN=n CONFIG_ZMK_KSCAN_MOCK_DRIVER=y -CONFIG_ZMK_KSCAN_COMPOSITE_DRIVER=y CONFIG_ZMK_KSCAN_GPIO_DRIVER=n CONFIG_GPIO=n CONFIG_ZMK_BLE=n CONFIG_LOG=y -CONFIG_KSCAN_LOG_LEVEL_DBG=y +CONFIG_LOG_BACKEND_SHOW_COLOR=n CONFIG_ZMK_LOG_LEVEL_DBG=y diff --git a/app/boards/native_posix.overlay b/app/boards/native_posix.overlay index e9c4c95..bbb23b6 100644 --- a/app/boards/native_posix.overlay +++ b/app/boards/native_posix.overlay @@ -1,79 +1,18 @@ -#include #include -#include +#include +#include / { chosen { - zmk,kscan = &kscan0; - zmk,keymap = &keymap0; - }; - - kscan0: kscan_0 { - compatible = "zmk,kscan-composite"; - label = "KSCAN_COMP"; - rows = <2>; - columns = <4>; - - left: left { - kscan = <&left_hand>; - }; - - right: right { - kscan = <&right_hand>; - column-offset = <2>; - }; + zmk,kscan = &kscan; }; - left_hand: kscan_1 { + kscan: kscan { compatible = "zmk,kscan-mock"; - label = "KSCAN_LEFT"; + label = "KSCAN_MOCK"; rows = <2>; columns = <2>; - events = ; - // events = ; - }; - - right_hand: kscan_2 { - compatible = "zmk,kscan-mock"; - label = "KSCAN_RIGHT"; - - rows = <2>; - columns = <2>; - events = ; - }; - - keymap0: keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; - layers = <&default &lower &raise>; - }; - - layers { - compatible = "zmk,layers"; - - default: layer_0 { - label = "DEFAULT"; - - bindings = < - &kp B &mo 1 &kp C &kp E - &kp D &kp G &kp F &kp Q>; - }; - - lower: layer_1 { - label = "LOWER"; - - bindings = < - &cp M_NEXT &trans &kp O &kp Q - &kp L &kp J &kp P &kp K>; - }; - - raise: layer_2 { - label = "RAISE"; - - bindings = < - &kp W &kp U &kp I &kp N - &kp X &kp M &kp C &kp B>; - }; + exit-after; }; }; diff --git a/app/dts/bindings/zmk,kscan-mock.yaml b/app/dts/bindings/zmk,kscan-mock.yaml index 41dd5b8..f9d83fa 100644 --- a/app/dts/bindings/zmk,kscan-mock.yaml +++ b/app/dts/bindings/zmk,kscan-mock.yaml @@ -15,3 +15,5 @@ properties: type: int columns: type: int + exit-after: + type: boolean diff --git a/app/include/dt-bindings/zmk/kscan-mock.h b/app/include/dt-bindings/zmk/kscan-mock.h new file mode 100644 index 0000000..d481899 --- /dev/null +++ b/app/include/dt-bindings/zmk/kscan-mock.h @@ -0,0 +1,8 @@ +#pragma once + +#define ZMK_MOCK_IS_PRESS(v) ((v & (0x01 << 31)) != 0) +#define ZMK_MOCK_PRESS(row, col, msec) (row + (col << 8) + (msec << 16) + (0x01 << 31)) +#define ZMK_MOCK_RELEASE(row, col, msec) (row + (col << 8) + (msec << 16)) +#define ZMK_MOCK_ROW(v) (v & 0xFF) +#define ZMK_MOCK_COL(v) ((v >> 8) & 0xFF) +#define ZMK_MOCK_MSEC(v) ((v & ~(0x01 << 31)) >> 16) diff --git a/app/include/zmk/kscan-mock.h b/app/include/zmk/kscan-mock.h deleted file mode 100644 index d481899..0000000 --- a/app/include/zmk/kscan-mock.h +++ /dev/null @@ -1,8 +0,0 @@ -#pragma once - -#define ZMK_MOCK_IS_PRESS(v) ((v & (0x01 << 31)) != 0) -#define ZMK_MOCK_PRESS(row, col, msec) (row + (col << 8) + (msec << 16) + (0x01 << 31)) -#define ZMK_MOCK_RELEASE(row, col, msec) (row + (col << 8) + (msec << 16)) -#define ZMK_MOCK_ROW(v) (v & 0xFF) -#define ZMK_MOCK_COL(v) ((v >> 8) & 0xFF) -#define ZMK_MOCK_MSEC(v) ((v & ~(0x01 << 31)) >> 16) diff --git a/app/prj.conf b/app/prj.conf new file mode 100644 index 0000000..e69de29 diff --git a/app/run-test.sh b/app/run-test.sh new file mode 100755 index 0000000..4ed12a2 --- /dev/null +++ b/app/run-test.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +if [ -z "$1" ]; then + echo "Usage: ./run-test.sh " + exit 1 +elif [ "$1" = "all" ]; then + find tests -name native_posix.keymap -exec dirname \{\} \; | xargs -l -P 2 ./run-test.sh + exit $? +fi + +testcase="$1" +echo "Running $testcase:" + +west build --pristine -d build/$testcase -b native_posix -- -DZMK_CONFIG=$testcase > /dev/null +./build/$testcase/zephyr/zmk.exe | sed -e "s/.*> //" | sed -n -f $testcase/events.patterns > build/$testcase/keycode_events.log + +diff -au $testcase/keycode_events.snapshot build/$testcase/keycode_events.log diff --git a/app/src/kscan_mock.c b/app/src/kscan_mock.c index b0ba90b..1bd8a74 100644 --- a/app/src/kscan_mock.c +++ b/app/src/kscan_mock.c @@ -6,13 +6,14 @@ #define DT_DRV_COMPAT zmk_kscan_mock +#include #include #include #include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); -#include +#include struct kscan_mock_data { @@ -50,6 +51,7 @@ static int kscan_mock_configure(struct device *dev, kscan_callback_t callback) struct kscan_mock_config_##n \ { \ u32_t events[DT_INST_PROP_LEN(n, events)]; \ + bool exit_after; \ }; \ static void kscan_mock_schedule_next_event_##n(struct device *dev) \ { \ @@ -60,6 +62,9 @@ static int kscan_mock_configure(struct device *dev, kscan_callback_t callback) u32_t ev = cfg->events[data->event_index]; \ LOG_DBG("delaying next keypress: %d", ZMK_MOCK_MSEC(ev)); \ k_delayed_work_submit(&data->work, K_MSEC(ZMK_MOCK_MSEC(ev))); \ + } else if (cfg->exit_after) { \ + LOG_DBG("Exiting"); \ + exit(0); \ } \ } \ static void kscan_mock_work_handler_##n(struct k_work *work) \ @@ -93,11 +98,12 @@ static int kscan_mock_configure(struct device *dev, kscan_callback_t callback) }; \ static struct kscan_mock_data kscan_mock_data_##n; \ static const struct kscan_mock_config_##n kscan_mock_config_##n = { \ - .events = DT_INST_PROP(n, events)}; \ + .events = DT_INST_PROP(n, events), \ + .exit_after = DT_INST_PROP(n, exit_after) }; \ DEVICE_AND_API_INIT(kscan_mock_##n, DT_INST_LABEL(n), kscan_mock_init_##n, \ &kscan_mock_data_##n, \ &kscan_mock_config_##n, \ APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ &mock_driver_api_##n); -DT_INST_FOREACH_STATUS_OKAY(MOCK_INST_INIT) \ No newline at end of file +DT_INST_FOREACH_STATUS_OKAY(MOCK_INST_INIT) diff --git a/app/tests/keypress/behavior_keymap.dtsi b/app/tests/keypress/behavior_keymap.dtsi new file mode 100644 index 0000000..34c445c --- /dev/null +++ b/app/tests/keypress/behavior_keymap.dtsi @@ -0,0 +1,28 @@ +#include +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &kp B &mo 1 + &kp D &kp G>; + }; + + lower_layer { + bindings = < + &cp M_NEXT &trans + &kp L &kp J>; + }; + + raise_layer { + bindings = < + &kp W &kp U + &kp X &kp M>; + }; + }; +}; diff --git a/app/tests/keypress/cp-press-release/events.patterns b/app/tests/keypress/cp-press-release/events.patterns new file mode 100644 index 0000000..833100f --- /dev/null +++ b/app/tests/keypress/cp-press-release/events.patterns @@ -0,0 +1 @@ +s/.*hid_listener_keycode_//p \ No newline at end of file diff --git a/app/tests/keypress/cp-press-release/keycode_events.snapshot b/app/tests/keypress/cp-press-release/keycode_events.snapshot new file mode 100644 index 0000000..f1ef0ed --- /dev/null +++ b/app/tests/keypress/cp-press-release/keycode_events.snapshot @@ -0,0 +1,2 @@ +pressed: usage_page 0x0c keycode 0xb5 +released: usage_page 0x0c keycode 0xb5 diff --git a/app/tests/keypress/cp-press-release/native_posix.keymap b/app/tests/keypress/cp-press-release/native_posix.keymap new file mode 100644 index 0000000..7f9ae8a --- /dev/null +++ b/app/tests/keypress/cp-press-release/native_posix.keymap @@ -0,0 +1,5 @@ +#include "../behavior_keymap.dtsi" + +&kscan { + events = ; +}; \ No newline at end of file diff --git a/app/tests/keypress/kp-press-release/events.patterns b/app/tests/keypress/kp-press-release/events.patterns new file mode 100644 index 0000000..833100f --- /dev/null +++ b/app/tests/keypress/kp-press-release/events.patterns @@ -0,0 +1 @@ +s/.*hid_listener_keycode_//p \ No newline at end of file diff --git a/app/tests/keypress/kp-press-release/keycode_events.snapshot b/app/tests/keypress/kp-press-release/keycode_events.snapshot new file mode 100644 index 0000000..f1ef0ed --- /dev/null +++ b/app/tests/keypress/kp-press-release/keycode_events.snapshot @@ -0,0 +1,2 @@ +pressed: usage_page 0x0c keycode 0xb5 +released: usage_page 0x0c keycode 0xb5 diff --git a/app/tests/keypress/kp-press-release/native_posix.keymap b/app/tests/keypress/kp-press-release/native_posix.keymap new file mode 100644 index 0000000..235348e --- /dev/null +++ b/app/tests/keypress/kp-press-release/native_posix.keymap @@ -0,0 +1,8 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = ; +}; \ No newline at end of file -- cgit v1.2.3 From 5b21f15a0a3e2d27d57b7a657d031a66d1124701 Mon Sep 17 00:00:00 2001 From: Cody McGinnis Date: Fri, 28 Aug 2020 16:21:31 -0400 Subject: fix(test): off by one error with kscan processing --- app/src/kscan_mock.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/kscan_mock.c b/app/src/kscan_mock.c index 1bd8a74..d626c71 100644 --- a/app/src/kscan_mock.c +++ b/app/src/kscan_mock.c @@ -72,12 +72,13 @@ static int kscan_mock_configure(struct device *dev, kscan_callback_t callback) struct kscan_mock_data *data = \ CONTAINER_OF(work, struct kscan_mock_data, work); \ const struct kscan_mock_config_##n *cfg = data->dev->config_info; \ - u32_t ev = cfg->events[data->event_index++]; \ + u32_t ev = cfg->events[data->event_index]; \ LOG_DBG("ev %u row %d column %d state %d\n", ev, \ ZMK_MOCK_ROW(ev), ZMK_MOCK_COL(ev), ZMK_MOCK_IS_PRESS(ev)); \ data->callback(data->dev, \ ZMK_MOCK_ROW(ev), ZMK_MOCK_COL(ev), ZMK_MOCK_IS_PRESS(ev)); \ kscan_mock_schedule_next_event_##n(data->dev); \ + data->event_index++; \ } \ static int kscan_mock_init_##n(struct device *dev) \ { \ -- cgit v1.2.3 From 5f56266a6953dd1ebeb95ded4213e74f9572ae4d Mon Sep 17 00:00:00 2001 From: Cody McGinnis Date: Fri, 28 Aug 2020 16:21:31 -0400 Subject: feat(test): add tests for momentary layers --- app/tests/momentary-layer/behavior_keymap.dtsi | 28 ++++++++++++++++++++++ .../early-key-release/events.patterns | 2 ++ .../early-key-release/keycode_events.snapshot | 4 ++++ .../early-key-release/native_posix.keymap | 8 +++++++ app/tests/momentary-layer/normal/events.patterns | 2 ++ .../momentary-layer/normal/keycode_events.snapshot | 4 ++++ .../momentary-layer/normal/native_posix.keymap | 8 +++++++ 7 files changed, 56 insertions(+) create mode 100644 app/tests/momentary-layer/behavior_keymap.dtsi create mode 100644 app/tests/momentary-layer/early-key-release/events.patterns create mode 100644 app/tests/momentary-layer/early-key-release/keycode_events.snapshot create mode 100644 app/tests/momentary-layer/early-key-release/native_posix.keymap create mode 100644 app/tests/momentary-layer/normal/events.patterns create mode 100644 app/tests/momentary-layer/normal/keycode_events.snapshot create mode 100644 app/tests/momentary-layer/normal/native_posix.keymap diff --git a/app/tests/momentary-layer/behavior_keymap.dtsi b/app/tests/momentary-layer/behavior_keymap.dtsi new file mode 100644 index 0000000..34c445c --- /dev/null +++ b/app/tests/momentary-layer/behavior_keymap.dtsi @@ -0,0 +1,28 @@ +#include +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &kp B &mo 1 + &kp D &kp G>; + }; + + lower_layer { + bindings = < + &cp M_NEXT &trans + &kp L &kp J>; + }; + + raise_layer { + bindings = < + &kp W &kp U + &kp X &kp M>; + }; + }; +}; diff --git a/app/tests/momentary-layer/early-key-release/events.patterns b/app/tests/momentary-layer/early-key-release/events.patterns new file mode 100644 index 0000000..bd7b488 --- /dev/null +++ b/app/tests/momentary-layer/early-key-release/events.patterns @@ -0,0 +1,2 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p \ No newline at end of file diff --git a/app/tests/momentary-layer/early-key-release/keycode_events.snapshot b/app/tests/momentary-layer/early-key-release/keycode_events.snapshot new file mode 100644 index 0000000..474eef7 --- /dev/null +++ b/app/tests/momentary-layer/early-key-release/keycode_events.snapshot @@ -0,0 +1,4 @@ +kp_pressed: usage_page 0x07 keycode 0x05 +mo_pressed: position 1 layer 1 +kp_released: usage_page 0x07 keycode 0x05 +mo_released: position 1 layer 1 diff --git a/app/tests/momentary-layer/early-key-release/native_posix.keymap b/app/tests/momentary-layer/early-key-release/native_posix.keymap new file mode 100644 index 0000000..a58ad26 --- /dev/null +++ b/app/tests/momentary-layer/early-key-release/native_posix.keymap @@ -0,0 +1,8 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = ; +}; \ No newline at end of file diff --git a/app/tests/momentary-layer/normal/events.patterns b/app/tests/momentary-layer/normal/events.patterns new file mode 100644 index 0000000..bd7b488 --- /dev/null +++ b/app/tests/momentary-layer/normal/events.patterns @@ -0,0 +1,2 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p \ No newline at end of file diff --git a/app/tests/momentary-layer/normal/keycode_events.snapshot b/app/tests/momentary-layer/normal/keycode_events.snapshot new file mode 100644 index 0000000..f3fca66 --- /dev/null +++ b/app/tests/momentary-layer/normal/keycode_events.snapshot @@ -0,0 +1,4 @@ +mo_pressed: position 1 layer 1 +kp_pressed: usage_page 0x0c keycode 0xb5 +kp_released: usage_page 0x0c keycode 0xb5 +mo_released: position 1 layer 1 \ No newline at end of file diff --git a/app/tests/momentary-layer/normal/native_posix.keymap b/app/tests/momentary-layer/normal/native_posix.keymap new file mode 100644 index 0000000..1b67858 --- /dev/null +++ b/app/tests/momentary-layer/normal/native_posix.keymap @@ -0,0 +1,8 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = ; +}; \ No newline at end of file -- cgit v1.2.3 From f1224422c502cb86c9138c42e28eb645fe62272f Mon Sep 17 00:00:00 2001 From: Cody McGinnis Date: Fri, 28 Aug 2020 16:21:31 -0400 Subject: fix(test): stop using pristine and use 4 threads --- app/run-test.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/run-test.sh b/app/run-test.sh index 4ed12a2..722cb93 100755 --- a/app/run-test.sh +++ b/app/run-test.sh @@ -4,14 +4,14 @@ if [ -z "$1" ]; then echo "Usage: ./run-test.sh " exit 1 elif [ "$1" = "all" ]; then - find tests -name native_posix.keymap -exec dirname \{\} \; | xargs -l -P 2 ./run-test.sh + find tests -name native_posix.keymap -exec dirname \{\} \; | xargs -l -P 4 ./run-test.sh exit $? fi testcase="$1" echo "Running $testcase:" -west build --pristine -d build/$testcase -b native_posix -- -DZMK_CONFIG=$testcase > /dev/null +west build -d build/$testcase -b native_posix -- -DZMK_CONFIG=$testcase > /dev/null ./build/$testcase/zephyr/zmk.exe | sed -e "s/.*> //" | sed -n -f $testcase/events.patterns > build/$testcase/keycode_events.log diff -au $testcase/keycode_events.snapshot build/$testcase/keycode_events.log -- cgit v1.2.3 From de92bf2b2de4a895dd36cffb549772f48428a0db Mon Sep 17 00:00:00 2001 From: Cody McGinnis Date: Fri, 28 Aug 2020 16:21:31 -0400 Subject: fix(test): use a smaller value for mock key intervals --- app/tests/keypress/cp-press-release/native_posix.keymap | 2 +- app/tests/keypress/kp-press-release/native_posix.keymap | 2 +- app/tests/momentary-layer/early-key-release/native_posix.keymap | 2 +- app/tests/momentary-layer/normal/native_posix.keymap | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/tests/keypress/cp-press-release/native_posix.keymap b/app/tests/keypress/cp-press-release/native_posix.keymap index 7f9ae8a..0e86f93 100644 --- a/app/tests/keypress/cp-press-release/native_posix.keymap +++ b/app/tests/keypress/cp-press-release/native_posix.keymap @@ -1,5 +1,5 @@ #include "../behavior_keymap.dtsi" &kscan { - events = ; + events = ; }; \ No newline at end of file diff --git a/app/tests/keypress/kp-press-release/native_posix.keymap b/app/tests/keypress/kp-press-release/native_posix.keymap index 235348e..7f73690 100644 --- a/app/tests/keypress/kp-press-release/native_posix.keymap +++ b/app/tests/keypress/kp-press-release/native_posix.keymap @@ -4,5 +4,5 @@ #include "../behavior_keymap.dtsi" &kscan { - events = ; + events = ; }; \ No newline at end of file diff --git a/app/tests/momentary-layer/early-key-release/native_posix.keymap b/app/tests/momentary-layer/early-key-release/native_posix.keymap index a58ad26..e7628c0 100644 --- a/app/tests/momentary-layer/early-key-release/native_posix.keymap +++ b/app/tests/momentary-layer/early-key-release/native_posix.keymap @@ -4,5 +4,5 @@ #include "../behavior_keymap.dtsi" &kscan { - events = ; + events = ; }; \ No newline at end of file diff --git a/app/tests/momentary-layer/normal/native_posix.keymap b/app/tests/momentary-layer/normal/native_posix.keymap index 1b67858..7f73690 100644 --- a/app/tests/momentary-layer/normal/native_posix.keymap +++ b/app/tests/momentary-layer/normal/native_posix.keymap @@ -4,5 +4,5 @@ #include "../behavior_keymap.dtsi" &kscan { - events = ; + events = ; }; \ No newline at end of file -- cgit v1.2.3 From abf8b5abfae2c240e71db11f13183369a14333d7 Mon Sep 17 00:00:00 2001 From: Cody McGinnis Date: Fri, 28 Aug 2020 16:21:31 -0400 Subject: fix(test): fix normal momentary-layer test snapshot --- app/tests/momentary-layer/normal/keycode_events.snapshot | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/tests/momentary-layer/normal/keycode_events.snapshot b/app/tests/momentary-layer/normal/keycode_events.snapshot index f3fca66..9dc6101 100644 --- a/app/tests/momentary-layer/normal/keycode_events.snapshot +++ b/app/tests/momentary-layer/normal/keycode_events.snapshot @@ -1,4 +1,4 @@ mo_pressed: position 1 layer 1 kp_pressed: usage_page 0x0c keycode 0xb5 kp_released: usage_page 0x0c keycode 0xb5 -mo_released: position 1 layer 1 \ No newline at end of file +mo_released: position 1 layer 1 -- cgit v1.2.3 From 3d325ccb84ecd3b25dd86d829c448dfd9b41a08f Mon Sep 17 00:00:00 2001 From: Cody McGinnis Date: Fri, 28 Aug 2020 16:21:31 -0400 Subject: feat(test): add tests for none behavior --- app/tests/none/behavior_keymap.dtsi | 22 ++++++++++++++++++++++ app/tests/none/layered/events.patterns | 1 + app/tests/none/layered/keycode_events.snapshot | 0 app/tests/none/layered/native_posix.keymap | 8 ++++++++ app/tests/none/normal/events.patterns | 1 + app/tests/none/normal/keycode_events.snapshot | 0 app/tests/none/normal/native_posix.keymap | 8 ++++++++ 7 files changed, 40 insertions(+) create mode 100644 app/tests/none/behavior_keymap.dtsi create mode 100644 app/tests/none/layered/events.patterns create mode 100644 app/tests/none/layered/keycode_events.snapshot create mode 100644 app/tests/none/layered/native_posix.keymap create mode 100644 app/tests/none/normal/events.patterns create mode 100644 app/tests/none/normal/keycode_events.snapshot create mode 100644 app/tests/none/normal/native_posix.keymap diff --git a/app/tests/none/behavior_keymap.dtsi b/app/tests/none/behavior_keymap.dtsi new file mode 100644 index 0000000..0a4f7cb --- /dev/null +++ b/app/tests/none/behavior_keymap.dtsi @@ -0,0 +1,22 @@ +#include +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &none &mo 1 + &kp A &none>; + }; + + lower_layer { + bindings = < + &none &trans + &none &kp A>; + }; + }; +}; diff --git a/app/tests/none/layered/events.patterns b/app/tests/none/layered/events.patterns new file mode 100644 index 0000000..3c9d3f8 --- /dev/null +++ b/app/tests/none/layered/events.patterns @@ -0,0 +1 @@ +s/.*hid_listener_keycode/kp/p \ No newline at end of file diff --git a/app/tests/none/layered/keycode_events.snapshot b/app/tests/none/layered/keycode_events.snapshot new file mode 100644 index 0000000..e69de29 diff --git a/app/tests/none/layered/native_posix.keymap b/app/tests/none/layered/native_posix.keymap new file mode 100644 index 0000000..59ea481 --- /dev/null +++ b/app/tests/none/layered/native_posix.keymap @@ -0,0 +1,8 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = ; +}; \ No newline at end of file diff --git a/app/tests/none/normal/events.patterns b/app/tests/none/normal/events.patterns new file mode 100644 index 0000000..3c9d3f8 --- /dev/null +++ b/app/tests/none/normal/events.patterns @@ -0,0 +1 @@ +s/.*hid_listener_keycode/kp/p \ No newline at end of file diff --git a/app/tests/none/normal/keycode_events.snapshot b/app/tests/none/normal/keycode_events.snapshot new file mode 100644 index 0000000..e69de29 diff --git a/app/tests/none/normal/native_posix.keymap b/app/tests/none/normal/native_posix.keymap new file mode 100644 index 0000000..94d7539 --- /dev/null +++ b/app/tests/none/normal/native_posix.keymap @@ -0,0 +1,8 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = ; +}; \ No newline at end of file -- cgit v1.2.3 From 033bb7bfc4e1772ea19784bd71a57f49b4368e2d Mon Sep 17 00:00:00 2001 From: Cody McGinnis Date: Fri, 28 Aug 2020 16:21:31 -0400 Subject: fix(behavior): add logging to toggle layer for tests --- app/src/behaviors/behavior_toggle_layer.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/app/src/behaviors/behavior_toggle_layer.c b/app/src/behaviors/behavior_toggle_layer.c index 13f4a29..02a76d2 100644 --- a/app/src/behaviors/behavior_toggle_layer.c +++ b/app/src/behaviors/behavior_toggle_layer.c @@ -14,28 +14,35 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); -struct behavior_tog_config { }; -struct behavior_tog_data { }; +struct behavior_tog_config +{ +}; +struct behavior_tog_data +{ +}; static int behavior_tog_init(struct device *dev) { - return 0; + return 0; }; - static int tog_keymap_binding_pressed(struct device *dev, u32_t position, u32_t layer, u32_t _) { + LOG_DBG("position %d layer %d", position, layer); + return zmk_keymap_layer_toggle(layer); } static int tog_keymap_binding_released(struct device *dev, u32_t position, u32_t layer, u32_t _) { + LOG_DBG("position %d layer %d", position, layer); + return 0; } static const struct behavior_driver_api behavior_tog_driver_api = { - .binding_pressed = tog_keymap_binding_pressed, - .binding_released = tog_keymap_binding_released, + .binding_pressed = tog_keymap_binding_pressed, + .binding_released = tog_keymap_binding_released, }; static const struct behavior_tog_config behavior_tog_config = {}; -- cgit v1.2.3 From a722cbcea37e276a1778c6b0d0e3154fbe70334f Mon Sep 17 00:00:00 2001 From: Cody McGinnis Date: Fri, 28 Aug 2020 16:21:31 -0400 Subject: feat(test): add tests for toggle layer --- app/tests/toggle-layer/behavior_keymap.dtsi | 28 ++++++++++++++++++++++ .../toggle-layer/early-key-release/events.patterns | 2 ++ .../early-key-release/keycode_events.snapshot | 6 +++++ .../early-key-release/native_posix.keymap | 9 +++++++ app/tests/toggle-layer/normal/events.patterns | 2 ++ .../toggle-layer/normal/keycode_events.snapshot | 4 ++++ app/tests/toggle-layer/normal/native_posix.keymap | 8 +++++++ 7 files changed, 59 insertions(+) create mode 100644 app/tests/toggle-layer/behavior_keymap.dtsi create mode 100644 app/tests/toggle-layer/early-key-release/events.patterns create mode 100644 app/tests/toggle-layer/early-key-release/keycode_events.snapshot create mode 100644 app/tests/toggle-layer/early-key-release/native_posix.keymap create mode 100644 app/tests/toggle-layer/normal/events.patterns create mode 100644 app/tests/toggle-layer/normal/keycode_events.snapshot create mode 100644 app/tests/toggle-layer/normal/native_posix.keymap diff --git a/app/tests/toggle-layer/behavior_keymap.dtsi b/app/tests/toggle-layer/behavior_keymap.dtsi new file mode 100644 index 0000000..d2b41a9 --- /dev/null +++ b/app/tests/toggle-layer/behavior_keymap.dtsi @@ -0,0 +1,28 @@ +#include +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &kp B &tog 1 + &kp D &kp G>; + }; + + lower_layer { + bindings = < + &cp M_NEXT &trans + &kp L &kp J>; + }; + + raise_layer { + bindings = < + &kp W &kp U + &kp X &kp M>; + }; + }; +}; diff --git a/app/tests/toggle-layer/early-key-release/events.patterns b/app/tests/toggle-layer/early-key-release/events.patterns new file mode 100644 index 0000000..397fef4 --- /dev/null +++ b/app/tests/toggle-layer/early-key-release/events.patterns @@ -0,0 +1,2 @@ +s/.*hid_listener_keycode/kp/p +s/.*tog_keymap_binding/tog/p \ No newline at end of file diff --git a/app/tests/toggle-layer/early-key-release/keycode_events.snapshot b/app/tests/toggle-layer/early-key-release/keycode_events.snapshot new file mode 100644 index 0000000..3ac017c --- /dev/null +++ b/app/tests/toggle-layer/early-key-release/keycode_events.snapshot @@ -0,0 +1,6 @@ +kp_pressed: usage_page 0x07 keycode 0x05 +tog_pressed: position 1 layer 1 +kp_released: usage_page 0x07 keycode 0x05 +tog_released: position 1 layer 1 +kp_pressed: usage_page 0x0c keycode 0xb5 +kp_released: usage_page 0x0c keycode 0xb5 diff --git a/app/tests/toggle-layer/early-key-release/native_posix.keymap b/app/tests/toggle-layer/early-key-release/native_posix.keymap new file mode 100644 index 0000000..6b2b8f2 --- /dev/null +++ b/app/tests/toggle-layer/early-key-release/native_posix.keymap @@ -0,0 +1,9 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = ; +}; \ No newline at end of file diff --git a/app/tests/toggle-layer/normal/events.patterns b/app/tests/toggle-layer/normal/events.patterns new file mode 100644 index 0000000..397fef4 --- /dev/null +++ b/app/tests/toggle-layer/normal/events.patterns @@ -0,0 +1,2 @@ +s/.*hid_listener_keycode/kp/p +s/.*tog_keymap_binding/tog/p \ No newline at end of file diff --git a/app/tests/toggle-layer/normal/keycode_events.snapshot b/app/tests/toggle-layer/normal/keycode_events.snapshot new file mode 100644 index 0000000..42174cc --- /dev/null +++ b/app/tests/toggle-layer/normal/keycode_events.snapshot @@ -0,0 +1,4 @@ +tog_pressed: position 1 layer 1 +tog_released: position 1 layer 1 +kp_pressed: usage_page 0x0c keycode 0xb5 +kp_released: usage_page 0x0c keycode 0xb5 diff --git a/app/tests/toggle-layer/normal/native_posix.keymap b/app/tests/toggle-layer/normal/native_posix.keymap new file mode 100644 index 0000000..202c105 --- /dev/null +++ b/app/tests/toggle-layer/normal/native_posix.keymap @@ -0,0 +1,8 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = ; +}; \ No newline at end of file -- cgit v1.2.3 From e2f77f25c8212856a5b3b3995b8e9199b59c2650 Mon Sep 17 00:00:00 2001 From: Cody McGinnis Date: Fri, 28 Aug 2020 16:21:31 -0400 Subject: feat(test): add testing for transparent --- app/tests/transparent/behavior_keymap.dtsi | 22 ++++++++++++++++++++++ app/tests/transparent/layered/events.patterns | 1 + .../transparent/layered/keycode_events.snapshot | 2 ++ app/tests/transparent/layered/native_posix.keymap | 8 ++++++++ app/tests/transparent/normal/events.patterns | 1 + .../transparent/normal/keycode_events.snapshot | 0 app/tests/transparent/normal/native_posix.keymap | 8 ++++++++ 7 files changed, 42 insertions(+) create mode 100644 app/tests/transparent/behavior_keymap.dtsi create mode 100644 app/tests/transparent/layered/events.patterns create mode 100644 app/tests/transparent/layered/keycode_events.snapshot create mode 100644 app/tests/transparent/layered/native_posix.keymap create mode 100644 app/tests/transparent/normal/events.patterns create mode 100644 app/tests/transparent/normal/keycode_events.snapshot create mode 100644 app/tests/transparent/normal/native_posix.keymap diff --git a/app/tests/transparent/behavior_keymap.dtsi b/app/tests/transparent/behavior_keymap.dtsi new file mode 100644 index 0000000..d6c5e27 --- /dev/null +++ b/app/tests/transparent/behavior_keymap.dtsi @@ -0,0 +1,22 @@ +#include +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &trans &mo 1 + &kp A &none>; + }; + + lower_layer { + bindings = < + &trans &trans + &trans &kp A>; + }; + }; +}; diff --git a/app/tests/transparent/layered/events.patterns b/app/tests/transparent/layered/events.patterns new file mode 100644 index 0000000..3c9d3f8 --- /dev/null +++ b/app/tests/transparent/layered/events.patterns @@ -0,0 +1 @@ +s/.*hid_listener_keycode/kp/p \ No newline at end of file diff --git a/app/tests/transparent/layered/keycode_events.snapshot b/app/tests/transparent/layered/keycode_events.snapshot new file mode 100644 index 0000000..d0bd245 --- /dev/null +++ b/app/tests/transparent/layered/keycode_events.snapshot @@ -0,0 +1,2 @@ +kp_pressed: usage_page 0x07 keycode 0x04 +kp_released: usage_page 0x07 keycode 0x04 diff --git a/app/tests/transparent/layered/native_posix.keymap b/app/tests/transparent/layered/native_posix.keymap new file mode 100644 index 0000000..59ea481 --- /dev/null +++ b/app/tests/transparent/layered/native_posix.keymap @@ -0,0 +1,8 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = ; +}; \ No newline at end of file diff --git a/app/tests/transparent/normal/events.patterns b/app/tests/transparent/normal/events.patterns new file mode 100644 index 0000000..3c9d3f8 --- /dev/null +++ b/app/tests/transparent/normal/events.patterns @@ -0,0 +1 @@ +s/.*hid_listener_keycode/kp/p \ No newline at end of file diff --git a/app/tests/transparent/normal/keycode_events.snapshot b/app/tests/transparent/normal/keycode_events.snapshot new file mode 100644 index 0000000..e69de29 diff --git a/app/tests/transparent/normal/native_posix.keymap b/app/tests/transparent/normal/native_posix.keymap new file mode 100644 index 0000000..94d7539 --- /dev/null +++ b/app/tests/transparent/normal/native_posix.keymap @@ -0,0 +1,8 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = ; +}; \ No newline at end of file -- cgit v1.2.3 From 79bff11ddd55204cf0ed4f43985e096a30cbf137 Mon Sep 17 00:00:00 2001 From: Cody McGinnis Date: Fri, 28 Aug 2020 16:21:31 -0400 Subject: fancier run test stuff --- app/run-test.sh | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/app/run-test.sh b/app/run-test.sh index 722cb93..d923e85 100755 --- a/app/run-test.sh +++ b/app/run-test.sh @@ -4,14 +4,25 @@ if [ -z "$1" ]; then echo "Usage: ./run-test.sh " exit 1 elif [ "$1" = "all" ]; then + echo "" > ./build/tests/pass-fail.log find tests -name native_posix.keymap -exec dirname \{\} \; | xargs -l -P 4 ./run-test.sh - exit $? + err=$? + sort -k2 ./build/tests/pass-fail.log + exit $err fi testcase="$1" echo "Running $testcase:" -west build -d build/$testcase -b native_posix -- -DZMK_CONFIG=$testcase > /dev/null -./build/$testcase/zephyr/zmk.exe | sed -e "s/.*> //" | sed -n -f $testcase/events.patterns > build/$testcase/keycode_events.log - -diff -au $testcase/keycode_events.snapshot build/$testcase/keycode_events.log +west build -d build/$testcase -b native_posix -- -DZMK_CONFIG=$testcase > /dev/null 2>&1 +if [ $? -gt 0 ]; then + echo "FAIL: $testcase did not build" >> ./build/tests/pass-fail.log +else + ./build/$testcase/zephyr/zmk.exe | sed -e "s/.*> //" | sed -n -f $testcase/events.patterns > build/$testcase/keycode_events.log + diff -au $testcase/keycode_events.snapshot build/$testcase/keycode_events.log + if [ $? -gt 0 ]; then + echo "FAIL: $testcase" >> ./build/tests/pass-fail.log + else + echo "PASS: $testcase" >> ./build/tests/pass-fail.log + fi +fi \ No newline at end of file -- cgit v1.2.3 From 4564d374776b0ade3c69bdddbf0a654aff38985e Mon Sep 17 00:00:00 2001 From: Cody McGinnis Date: Fri, 28 Aug 2020 16:21:31 -0400 Subject: feat(test): create simple docs for creating tests --- app/tests/Creating Tests.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 app/tests/Creating Tests.md diff --git a/app/tests/Creating Tests.md b/app/tests/Creating Tests.md new file mode 100644 index 0000000..5e211c0 --- /dev/null +++ b/app/tests/Creating Tests.md @@ -0,0 +1,23 @@ +# Basics +Any folder under `/app/tests` containing `native_posix.keymap` will be selected when running +`./run-test.sh all`. + +`test_case/events.patterns` contains sed patterns that will select the interesting output from the +application + +`test_case/keycode_events.snapshot` contains the expected output after applying `events.pattern` to +the output + +`test_case/native_posix.keymap` defines the keys and the mock key presses. Most tests include a +common keymap for their test set + +## Creating a New Test Set +1. Copy the test set that most closely resembles the tests you will be creating. +2. Rename the newly created test set to the behavior you're testing e.g, toggle-layer +3. Modify `behavior_keymap.dtsi` to create a keymap using the behavior and related behaviors +4. Modify `test_case/native_posix.keymap` for a simulated use case +5. Modify `test_case/events.patterns` to collect relevant logs to the test + - See: [sed manual](https://www.gnu.org/software/sed/manual/sed.html) and + [tutorial](https://www.digitalocean.com/community/tutorials/the-basics-of-using-the-sed-stream-editor-to-manipulate-text-in-linux) +6. Modify `test_case/keycode_events.snapshot` for to include the expected output +7. Repeat steps 4 to 6 for every test case \ No newline at end of file -- cgit v1.2.3 From aff39e57d041b9b3c895d3968912ef4fd9b6c6ce Mon Sep 17 00:00:00 2001 From: Cody McGinnis Date: Fri, 28 Aug 2020 16:21:31 -0400 Subject: fix: add license header to run-test.sh --- app/run-test.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/run-test.sh b/app/run-test.sh index d923e85..6c3e878 100755 --- a/app/run-test.sh +++ b/app/run-test.sh @@ -1,4 +1,9 @@ #!/bin/sh +# +# Copyright (c) 2020 Peter Johanson; Cody McGinnis +# +# SPDX-License-Identifier: MIT +# if [ -z "$1" ]; then echo "Usage: ./run-test.sh " -- cgit v1.2.3 From b1d9a7b68450438a7ac6bce26bf89dfdf00a4393 Mon Sep 17 00:00:00 2001 From: Cody McGinnis Date: Fri, 28 Aug 2020 16:21:31 -0400 Subject: feat(test): record full key log as well --- app/run-test.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/run-test.sh b/app/run-test.sh index 6c3e878..53277ba 100755 --- a/app/run-test.sh +++ b/app/run-test.sh @@ -23,7 +23,7 @@ west build -d build/$testcase -b native_posix -- -DZMK_CONFIG=$testcase > /dev/n if [ $? -gt 0 ]; then echo "FAIL: $testcase did not build" >> ./build/tests/pass-fail.log else - ./build/$testcase/zephyr/zmk.exe | sed -e "s/.*> //" | sed -n -f $testcase/events.patterns > build/$testcase/keycode_events.log + ./build/$testcase/zephyr/zmk.exe | sed -e "s/.*> //" | tee build/$testcase/keycode_events_full.log | sed -n -f $testcase/events.patterns > build/$testcase/keycode_events.log diff -au $testcase/keycode_events.snapshot build/$testcase/keycode_events.log if [ $? -gt 0 ]; then echo "FAIL: $testcase" >> ./build/tests/pass-fail.log -- cgit v1.2.3 From 26414a69824a37a65c0fb3a6c423f4cb6c1ef068 Mon Sep 17 00:00:00 2001 From: Cody McGinnis Date: Fri, 28 Aug 2020 16:21:31 -0400 Subject: fix(docs): move testing docs to website docs --- app/tests/Creating Tests.md | 23 ----------------------- docs/docs/dev-tests.md | 23 +++++++++++++++++++++++ docs/sidebars.js | 1 + 3 files changed, 24 insertions(+), 23 deletions(-) delete mode 100644 app/tests/Creating Tests.md create mode 100644 docs/docs/dev-tests.md diff --git a/app/tests/Creating Tests.md b/app/tests/Creating Tests.md deleted file mode 100644 index 5e211c0..0000000 --- a/app/tests/Creating Tests.md +++ /dev/null @@ -1,23 +0,0 @@ -# Basics -Any folder under `/app/tests` containing `native_posix.keymap` will be selected when running -`./run-test.sh all`. - -`test_case/events.patterns` contains sed patterns that will select the interesting output from the -application - -`test_case/keycode_events.snapshot` contains the expected output after applying `events.pattern` to -the output - -`test_case/native_posix.keymap` defines the keys and the mock key presses. Most tests include a -common keymap for their test set - -## Creating a New Test Set -1. Copy the test set that most closely resembles the tests you will be creating. -2. Rename the newly created test set to the behavior you're testing e.g, toggle-layer -3. Modify `behavior_keymap.dtsi` to create a keymap using the behavior and related behaviors -4. Modify `test_case/native_posix.keymap` for a simulated use case -5. Modify `test_case/events.patterns` to collect relevant logs to the test - - See: [sed manual](https://www.gnu.org/software/sed/manual/sed.html) and - [tutorial](https://www.digitalocean.com/community/tutorials/the-basics-of-using-the-sed-stream-editor-to-manipulate-text-in-linux) -6. Modify `test_case/keycode_events.snapshot` for to include the expected output -7. Repeat steps 4 to 6 for every test case \ No newline at end of file diff --git a/docs/docs/dev-tests.md b/docs/docs/dev-tests.md new file mode 100644 index 0000000..1709ccd --- /dev/null +++ b/docs/docs/dev-tests.md @@ -0,0 +1,23 @@ +# Basics +Running tests requires native [posix support](./dev-posix-board). Any folder under `/app/tests` +containing `native_posix.keymap` will be selected when running `./run-test.sh all`. + +`test_case/events.patterns` contains sed patterns that will select the interesting output from the +application + +`test_case/keycode_events.snapshot` contains the expected output after applying `events.pattern` to +the output + +`test_case/native_posix.keymap` defines the keys and the mock key presses. Most tests include a +common keymap for their test set + +## Creating a New Test Set +1. Copy the test set that most closely resembles the tests you will be creating. +2. Rename the newly created test set to the behavior you're testing e.g, toggle-layer +3. Modify `behavior_keymap.dtsi` to create a keymap using the behavior and related behaviors +4. Modify `test_case/native_posix.keymap` for a simulated use case +5. Modify `test_case/events.patterns` to collect relevant logs to the test + - See: [sed manual](https://www.gnu.org/software/sed/manual/sed.html) and + [tutorial](https://www.digitalocean.com/community/tutorials/the-basics-of-using-the-sed-stream-editor-to-manipulate-text-in-linux) +6. Modify `test_case/keycode_events.snapshot` for to include the expected output +7. Repeat steps 4 to 6 for every test case \ No newline at end of file diff --git a/docs/sidebars.js b/docs/sidebars.js index 51313fc..d426667 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -20,6 +20,7 @@ module.exports = { "dev-setup", "dev-boards-shields-keymaps", "dev-posix-board", + "dev-tests", ], "Dev Guides": ["dev-guide-new-shield", "dev-guide-usb-logging"], }, -- cgit v1.2.3 From 205a54baeb75f631795c3de34948e5e9f1af0083 Mon Sep 17 00:00:00 2001 From: Cody McGinnis Date: Fri, 28 Aug 2020 16:21:31 -0400 Subject: fix(docs): update the testing docs --- docs/docs/dev-tests.md | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/docs/docs/dev-tests.md b/docs/docs/dev-tests.md index 1709ccd..68d4725 100644 --- a/docs/docs/dev-tests.md +++ b/docs/docs/dev-tests.md @@ -1,15 +1,11 @@ -# Basics -Running tests requires native [posix support](./dev-posix-board). Any folder under `/app/tests` -containing `native_posix.keymap` will be selected when running `./run-test.sh all`. - -`test_case/events.patterns` contains sed patterns that will select the interesting output from the -application +--- +id: dev-tests +title: Tests +sidebar_label: Tests +--- -`test_case/keycode_events.snapshot` contains the expected output after applying `events.pattern` to -the output - -`test_case/native_posix.keymap` defines the keys and the mock key presses. Most tests include a -common keymap for their test set +Running tests requires [native posix support](./dev-posix-board). Any folder under `/app/tests` +containing `native_posix.keymap` will be selected when running `./run-test.sh all`. ## Creating a New Test Set 1. Copy the test set that most closely resembles the tests you will be creating. @@ -20,4 +16,5 @@ common keymap for their test set - See: [sed manual](https://www.gnu.org/software/sed/manual/sed.html) and [tutorial](https://www.digitalocean.com/community/tutorials/the-basics-of-using-the-sed-stream-editor-to-manipulate-text-in-linux) 6. Modify `test_case/keycode_events.snapshot` for to include the expected output -7. Repeat steps 4 to 6 for every test case \ No newline at end of file +7. Rename the `test_case` folder to describe the test. +8. Repeat steps 4 to 7 for every test case \ No newline at end of file -- cgit v1.2.3 From 80bef160fcb3c2c63f11c71832c9afd959a1828c Mon Sep 17 00:00:00 2001 From: Cody McGinnis Date: Fri, 28 Aug 2020 16:28:49 -0400 Subject: feat(tests): allow tests to be marked as pending pending tests will not fail the build --- app/run-test.sh | 9 ++++++++- app/tests/momentary-layer/early-key-release/pending | 0 app/tests/toggle-layer/early-key-release/pending | 0 3 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 app/tests/momentary-layer/early-key-release/pending create mode 100644 app/tests/toggle-layer/early-key-release/pending diff --git a/app/run-test.sh b/app/run-test.sh index 53277ba..be335c6 100755 --- a/app/run-test.sh +++ b/app/run-test.sh @@ -26,8 +26,15 @@ else ./build/$testcase/zephyr/zmk.exe | sed -e "s/.*> //" | tee build/$testcase/keycode_events_full.log | sed -n -f $testcase/events.patterns > build/$testcase/keycode_events.log diff -au $testcase/keycode_events.snapshot build/$testcase/keycode_events.log if [ $? -gt 0 ]; then - echo "FAIL: $testcase" >> ./build/tests/pass-fail.log + if [ -f $testcase/pending ]; then + echo "PEND: $testcase" >> ./build/tests/pass-fail.log + exit 0 + else + echo "FAIL: $testcase" >> ./build/tests/pass-fail.log + exit 1 + fi else echo "PASS: $testcase" >> ./build/tests/pass-fail.log + exit 0 fi fi \ No newline at end of file diff --git a/app/tests/momentary-layer/early-key-release/pending b/app/tests/momentary-layer/early-key-release/pending new file mode 100644 index 0000000..e69de29 diff --git a/app/tests/toggle-layer/early-key-release/pending b/app/tests/toggle-layer/early-key-release/pending new file mode 100644 index 0000000..e69de29 -- cgit v1.2.3 From 887ba47cbe173ff65204b6f454e4070768994abf Mon Sep 17 00:00:00 2001 From: tominabox1 Date: Fri, 28 Aug 2020 16:38:40 -0500 Subject: Add copyright header --- app/boards/shields/qaz/qaz.keymap | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/boards/shields/qaz/qaz.keymap b/app/boards/shields/qaz/qaz.keymap index cebcd4b..ffa2f6c 100644 --- a/app/boards/shields/qaz/qaz.keymap +++ b/app/boards/shields/qaz/qaz.keymap @@ -1,3 +1,9 @@ +/* + * Copyright (c) 2020 TJ Campie + * + * SPDX-License-Identifier: MIT + */ + #include #include -- cgit v1.2.3 From 6475009da9baad358302fbff3db7d88d63f9ce50 Mon Sep 17 00:00:00 2001 From: Kevin Date: Fri, 28 Aug 2020 20:36:28 -0700 Subject: Added encoder and changed BT unpair keys in overlays --- app/boards/shields/lily58/lily58_left.overlay | 6 +++++- app/boards/shields/lily58/lily58_right.overlay | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/app/boards/shields/lily58/lily58_left.overlay b/app/boards/shields/lily58/lily58_left.overlay index c6f630f..1752b6e 100644 --- a/app/boards/shields/lily58/lily58_left.overlay +++ b/app/boards/shields/lily58/lily58_left.overlay @@ -17,6 +17,10 @@ ; }; +&left_encoder { + status = "okay"; +}; + &bt_unpair_combo { - key-positions = <0 42>; + key-positions = <0 53>; }; diff --git a/app/boards/shields/lily58/lily58_right.overlay b/app/boards/shields/lily58/lily58_right.overlay index 84f0b06..6c8e493 100644 --- a/app/boards/shields/lily58/lily58_right.overlay +++ b/app/boards/shields/lily58/lily58_right.overlay @@ -22,5 +22,5 @@ }; &bt_unpair_combo { - key-positions = <11 43>; + key-positions = <11 54>; }; -- cgit v1.2.3 From e616fc2c8124a98e2abe2279d952783ea98b5cd5 Mon Sep 17 00:00:00 2001 From: Kevin Date: Fri, 28 Aug 2020 20:36:43 -0700 Subject: Added left encoder support --- app/.gitignore | 3 +++ app/boards/shields/lily58/lily58.conf | 4 ++++ app/boards/shields/lily58/lily58.dtsi | 14 +++++++++++ app/boards/shields/lily58/lily58.keymap | 42 +++++++++++++++++++-------------- 4 files changed, 45 insertions(+), 18 deletions(-) diff --git a/app/.gitignore b/app/.gitignore index 567609b..73a4457 100644 --- a/app/.gitignore +++ b/app/.gitignore @@ -1 +1,4 @@ build/ +build_left.bat +flash.bat +prj.conf \ No newline at end of file diff --git a/app/boards/shields/lily58/lily58.conf b/app/boards/shields/lily58/lily58.conf index 73f0d9d..14c1841 100644 --- a/app/boards/shields/lily58/lily58.conf +++ b/app/boards/shields/lily58/lily58.conf @@ -1,2 +1,6 @@ +# Enable encoder +CONFIG_EC11=y +CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y + # Uncomment the following line to enable the Lily58 OLED Display # CONFIG_ZMK_DISPLAY=y diff --git a/app/boards/shields/lily58/lily58.dtsi b/app/boards/shields/lily58/lily58.dtsi index 23f5644..aea36c8 100644 --- a/app/boards/shields/lily58/lily58.dtsi +++ b/app/boards/shields/lily58/lily58.dtsi @@ -45,6 +45,20 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) }; + left_encoder: encoder_left { + compatible = "alps,ec11"; + label = "LEFT_ENCODER"; + a-gpios = <&pro_micro_a 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro_a 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + resolution = <4>; + status = "disabled"; + }; + + sensors { + compatible = "zmk,keymap-sensors"; + sensors = <&left_encoder>; + }; + bt_unpair_combo: bt_unpair_combo { compatible = "zmk,bt-unpair-combo"; }; diff --git a/app/boards/shields/lily58/lily58.keymap b/app/boards/shields/lily58/lily58.keymap index 71bf4ad..590d7b6 100644 --- a/app/boards/shields/lily58/lily58.keymap +++ b/app/boards/shields/lily58/lily58.keymap @@ -16,41 +16,47 @@ &kp ESC &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 &kp GRAV &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp MINUS &kp LCTL &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SCLN &kp QUOT -&kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp LBKT &kp RBKT &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RSFT - &kp LALT &kp LGUI &mo 1 &kp SPC &kp RET &mo 2 &kp BKSP &kp RGUI +&kp LSFT &kp Z &kp X &kp C &kp V &kp B &cp M_PLAY &kp DEL &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RSFT + &kp LGUI &kp LALT &kp BKSP &mo 1 &mo 2 &kp SPC &kp RET &kp RGUI >; + + sensor-bindings = <&inc_dec_cp LBKT RBKT>; }; lower_layer { // ------------------------------------------------------------------------------------------------------------ // | | | | | | | | | | | | | | -// | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | -// | ` | ! | @ | # | $ | % | | ^ | & | * | ( | ) | ~ | -// | | | | | | | | | | | _ | + | { | } | "|" | +// | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | | +// | F1 | F2 | F3 | F4 | F5 | F6 | | | <- | ^ | v | -> | | +// | F7 | F8 | F9 | F10 | F11 | F12 | | | | + | - | = | [ | ] | \ | // | | | | | | | | | | bindings = < -&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans -&kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 -&kp GRAV &kp BANG &kp ATSN &kp HASH &kp CURU &kp PRCT &kp CRRT &kp AMPS &kp KMLT &kp LPRN &kp RPRN &kp TILD -&trans &trans &trans &trans &trans &trans &trans &trans &trans &kp MINUS &kp KPLS &kp LCUR &kp RCUR &kp PIPE - &trans &trans &trans &trans &trans &trans &trans &trans +&trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 +&trans &kp LCUR &kp AMPS &kp KMLT &kp LPRN &kp RCUR &trans &trans &trans &trans &trans &kp F12 +&trans &kp COLN &kp CURU &kp PRCT &kp CRRT &kp KPLS &kp CLCK &kp LARW &kp DARW &kp UARW &kp RARW &trans +&trans &kp GRAV &kp BANG &kp ATSN &kp HASH &kp PIPE &trans &trans &kp INS &kp HOME &kp PGDN &kp PGUP &kp END &trans + &kp LPRN &kp RPRN &trans &trans &trans &trans &trans &trans >; + + sensor-bindings = <&inc_dec_cp M_VOLU M_VOLD>; }; raise_layer { // ------------------------------------------------------------------------------------------------------------ // | | | | | | | | | | | | | | -// | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | | -// | F1 | F2 | F3 | F4 | F5 | F6 | | | <- | ^ | v | -> | | -// | F7 | F8 | F9 | F10 | F11 | F12 | | | | + | - | = | [ | ] | \ | +// | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | +// | ` | ! | @ | # | $ | % | | ^ | & | * | ( | ) | ~ | +// | | | | | | | | | | | _ | + | { | } | "|" | // | | | | | | | | | | bindings = < -&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans -&kp GRAV &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 &trans -&kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &trans &kp LARW &kp DARW &kp UARW &kp RARW &trans -&kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &trans &trans &kp KPLS &kp MINUS &kp EQL &kp LBKT &kp RBKT &kp BSLH - &trans &trans &trans &trans &trans &trans &trans &trans +&trans &tog 2 &kp KPLS &kp KDIV &kp KMLT &kp KMIN &trans &trans &trans &trans &trans &trans +&trans &kp LBKT &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp RBKT &trans &trans &trans &trans &trans &trans +&trans &kp SCLN &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp EQL &trans &cp M_PREV &cp M_VOLD &cp M_VOLU &cp M_NEXT &trans +&trans &kp TILD &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp BSLH &trans &trans &cp M_STOP &cp M_PLAY &cp M_MUTE &trans &trans &trans + &kp NUM_0 &kp DOT &kp RET &trans &trans &trans &trans &trans >; + + sensor-bindings = <&inc_dec_cp M_VOLU M_VOLD>; }; }; }; -- cgit v1.2.3 From 8b38193ec206505e6e493a7d7bb88010b57af7b3 Mon Sep 17 00:00:00 2001 From: Kevin Date: Fri, 28 Aug 2020 23:33:29 -0700 Subject: Removed status line --- app/boards/shields/lily58/lily58.dtsi | 1 - 1 file changed, 1 deletion(-) diff --git a/app/boards/shields/lily58/lily58.dtsi b/app/boards/shields/lily58/lily58.dtsi index aea36c8..556909f 100644 --- a/app/boards/shields/lily58/lily58.dtsi +++ b/app/boards/shields/lily58/lily58.dtsi @@ -51,7 +51,6 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) a-gpios = <&pro_micro_a 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&pro_micro_a 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; resolution = <4>; - status = "disabled"; }; sensors { -- cgit v1.2.3 From d69c94a183f3f91bddde2f1cc9dcf28db418ebac Mon Sep 17 00:00:00 2001 From: Kevin Date: Fri, 28 Aug 2020 23:43:41 -0700 Subject: Added helper scrpits and config file --- app/.gitignore | 5 +---- app/build_left.bat | 1 + app/flash.bat | 2 ++ app/prj.conf | 23 +++++++++++++++++++++++ 4 files changed, 27 insertions(+), 4 deletions(-) create mode 100644 app/build_left.bat create mode 100644 app/flash.bat create mode 100644 app/prj.conf diff --git a/app/.gitignore b/app/.gitignore index 73a4457..d163863 100644 --- a/app/.gitignore +++ b/app/.gitignore @@ -1,4 +1 @@ -build/ -build_left.bat -flash.bat -prj.conf \ No newline at end of file +build/ \ No newline at end of file diff --git a/app/build_left.bat b/app/build_left.bat new file mode 100644 index 0000000..f9d9150 --- /dev/null +++ b/app/build_left.bat @@ -0,0 +1 @@ +west build -p -- -DSHIELD=lily58_left \ No newline at end of file diff --git a/app/flash.bat b/app/flash.bat new file mode 100644 index 0000000..241b5b6 --- /dev/null +++ b/app/flash.bat @@ -0,0 +1,2 @@ +timeout 10 +copy "C:\Users\Kevin\zmk\app\build\zephyr\zmk.uf2" D: \ No newline at end of file diff --git a/app/prj.conf b/app/prj.conf new file mode 100644 index 0000000..c82fc5d --- /dev/null +++ b/app/prj.conf @@ -0,0 +1,23 @@ +# Turn on logging, and set ZMK logging to debug output +CONFIG_LOG=y +CONFIG_ZMK_LOG_LEVEL_DBG=y + +# Turn on USB CDC ACM device +CONFIG_USB=y +CONFIG_USB_DEVICE_STACK=y +CONFIG_USB_CDC_ACM=y +CONFIG_USB_CDC_ACM_RINGBUF_SIZE=1024 +CONFIG_USB_CDC_ACM_DEVICE_NAME="CDC_ACM" +CONFIG_USB_CDC_ACM_DEVICE_COUNT=1 + +# Enable serial console +CONFIG_SERIAL=y +CONFIG_CONSOLE=y +CONFIG_UART_INTERRUPT_DRIVEN=y +CONFIG_UART_LINE_CTRL=y + +# Enable USB UART, and set the console device +CONFIG_UART_CONSOLE=y +CONFIG_USB_UART_CONSOLE=y +CONFIG_UART_CONSOLE_ON_DEV_NAME="CDC_ACM_0" +CONFIG_USB_UART_DTR_WAIT=n \ No newline at end of file -- cgit v1.2.3 From 72232b4ec7ead37bf765acd16e1ea4490651260a Mon Sep 17 00:00:00 2001 From: Kevin Date: Sat, 29 Aug 2020 11:36:48 -0700 Subject: Fixed encoder config and added build_right script --- app/boards/shields/lily58/lily58.keymap | 2 +- app/boards/shields/lily58/lily58_left.conf | 4 ++++ app/build_right.bat | 1 + 3 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 app/build_right.bat diff --git a/app/boards/shields/lily58/lily58.keymap b/app/boards/shields/lily58/lily58.keymap index 590d7b6..b8d4a21 100644 --- a/app/boards/shields/lily58/lily58.keymap +++ b/app/boards/shields/lily58/lily58.keymap @@ -20,7 +20,7 @@ &kp LGUI &kp LALT &kp BKSP &mo 1 &mo 2 &kp SPC &kp RET &kp RGUI >; - sensor-bindings = <&inc_dec_cp LBKT RBKT>; + sensor-bindings = <&inc_dec_cp M_VOLU M_VOLD>; }; lower_layer { diff --git a/app/boards/shields/lily58/lily58_left.conf b/app/boards/shields/lily58/lily58_left.conf index 1e028a7..2bd5872 100644 --- a/app/boards/shields/lily58/lily58_left.conf +++ b/app/boards/shields/lily58/lily58_left.conf @@ -1,2 +1,6 @@ +# Enable encoder +CONFIG_EC11=y +CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y + CONFIG_ZMK_SPLIT=y CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL=y diff --git a/app/build_right.bat b/app/build_right.bat new file mode 100644 index 0000000..4fa87e0 --- /dev/null +++ b/app/build_right.bat @@ -0,0 +1 @@ +west build -p -- -DSHIELD=lily58_right \ No newline at end of file -- cgit v1.2.3 From 8b6e912d36b1e9d1a0efb09cd429714572a23e27 Mon Sep 17 00:00:00 2001 From: Kevin Date: Sat, 29 Aug 2020 11:48:33 -0700 Subject: Reverted back to default keymap --- app/boards/shields/lily58/lily58.keymap | 36 +++++++++++++++--------------- app/boards/shields/lily58/lily58_left.conf | 8 +++---- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/app/boards/shields/lily58/lily58.keymap b/app/boards/shields/lily58/lily58.keymap index b8d4a21..afd2694 100644 --- a/app/boards/shields/lily58/lily58.keymap +++ b/app/boards/shields/lily58/lily58.keymap @@ -16,8 +16,8 @@ &kp ESC &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 &kp GRAV &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp MINUS &kp LCTL &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SCLN &kp QUOT -&kp LSFT &kp Z &kp X &kp C &kp V &kp B &cp M_PLAY &kp DEL &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RSFT - &kp LGUI &kp LALT &kp BKSP &mo 1 &mo 2 &kp SPC &kp RET &kp RGUI +&kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp LBKT &kp RBKT &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RSFT + &kp LALT &kp LGUI &mo 1 &kp SPC &kp RET &mo 2 &kp BKSP &kp RGUI >; sensor-bindings = <&inc_dec_cp M_VOLU M_VOLD>; @@ -26,16 +26,16 @@ lower_layer { // ------------------------------------------------------------------------------------------------------------ // | | | | | | | | | | | | | | -// | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | | -// | F1 | F2 | F3 | F4 | F5 | F6 | | | <- | ^ | v | -> | | -// | F7 | F8 | F9 | F10 | F11 | F12 | | | | + | - | = | [ | ] | \ | +// | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | +// | ` | ! | @ | # | $ | % | | ^ | & | * | ( | ) | ~ | +// | | | | | | | | | | | _ | + | { | } | "|" | // | | | | | | | | | | bindings = < -&trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 -&trans &kp LCUR &kp AMPS &kp KMLT &kp LPRN &kp RCUR &trans &trans &trans &trans &trans &kp F12 -&trans &kp COLN &kp CURU &kp PRCT &kp CRRT &kp KPLS &kp CLCK &kp LARW &kp DARW &kp UARW &kp RARW &trans -&trans &kp GRAV &kp BANG &kp ATSN &kp HASH &kp PIPE &trans &trans &kp INS &kp HOME &kp PGDN &kp PGUP &kp END &trans - &kp LPRN &kp RPRN &trans &trans &trans &trans &trans &trans +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans +&kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 +&kp GRAV &kp BANG &kp ATSN &kp HASH &kp CURU &kp PRCT &kp CRRT &kp AMPS &kp KMLT &kp LPRN &kp RPRN &kp TILD +&trans &trans &trans &trans &trans &trans &trans &trans &trans &kp MINUS &kp KPLS &kp LCUR &kp RCUR &kp PIPE + &trans &trans &trans &trans &trans &trans &trans &trans >; sensor-bindings = <&inc_dec_cp M_VOLU M_VOLD>; @@ -44,16 +44,16 @@ raise_layer { // ------------------------------------------------------------------------------------------------------------ // | | | | | | | | | | | | | | -// | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | -// | ` | ! | @ | # | $ | % | | ^ | & | * | ( | ) | ~ | -// | | | | | | | | | | | _ | + | { | } | "|" | +// | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | | +// | F1 | F2 | F3 | F4 | F5 | F6 | | | <- | ^ | v | -> | | +// | F7 | F8 | F9 | F10 | F11 | F12 | | | | + | - | = | [ | ] | \ | // | | | | | | | | | | bindings = < -&trans &tog 2 &kp KPLS &kp KDIV &kp KMLT &kp KMIN &trans &trans &trans &trans &trans &trans -&trans &kp LBKT &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp RBKT &trans &trans &trans &trans &trans &trans -&trans &kp SCLN &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp EQL &trans &cp M_PREV &cp M_VOLD &cp M_VOLU &cp M_NEXT &trans -&trans &kp TILD &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp BSLH &trans &trans &cp M_STOP &cp M_PLAY &cp M_MUTE &trans &trans &trans - &kp NUM_0 &kp DOT &kp RET &trans &trans &trans &trans &trans +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans +&kp GRAV &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 &trans +&kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &trans &kp LARW &kp DARW &kp UARW &kp RARW &trans +&kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &trans &trans &kp KPLS &kp MINUS &kp EQL &kp LBKT &kp RBKT &kp BSLH + &trans &trans &trans &trans &trans &trans &trans &trans >; sensor-bindings = <&inc_dec_cp M_VOLU M_VOLD>; diff --git a/app/boards/shields/lily58/lily58_left.conf b/app/boards/shields/lily58/lily58_left.conf index 2bd5872..6ff95d5 100644 --- a/app/boards/shields/lily58/lily58_left.conf +++ b/app/boards/shields/lily58/lily58_left.conf @@ -1,6 +1,6 @@ -# Enable encoder -CONFIG_EC11=y -CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y +# Uncomment to enable encoder +# CONFIG_EC11=y +# CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y CONFIG_ZMK_SPLIT=y -CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL=y +CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL=y \ No newline at end of file -- cgit v1.2.3 From 14c05c92e973d92398d0970ad4a5dd2b9d32becd Mon Sep 17 00:00:00 2001 From: Kevin Date: Sat, 29 Aug 2020 11:53:53 -0700 Subject: Removed development files --- app/.gitignore | 2 +- app/build_left.bat | 1 - app/build_right.bat | 1 - app/flash.bat | 2 -- app/prj.conf | 23 ----------------------- 5 files changed, 1 insertion(+), 28 deletions(-) delete mode 100644 app/build_left.bat delete mode 100644 app/build_right.bat delete mode 100644 app/flash.bat delete mode 100644 app/prj.conf diff --git a/app/.gitignore b/app/.gitignore index d163863..567609b 100644 --- a/app/.gitignore +++ b/app/.gitignore @@ -1 +1 @@ -build/ \ No newline at end of file +build/ diff --git a/app/build_left.bat b/app/build_left.bat deleted file mode 100644 index f9d9150..0000000 --- a/app/build_left.bat +++ /dev/null @@ -1 +0,0 @@ -west build -p -- -DSHIELD=lily58_left \ No newline at end of file diff --git a/app/build_right.bat b/app/build_right.bat deleted file mode 100644 index 4fa87e0..0000000 --- a/app/build_right.bat +++ /dev/null @@ -1 +0,0 @@ -west build -p -- -DSHIELD=lily58_right \ No newline at end of file diff --git a/app/flash.bat b/app/flash.bat deleted file mode 100644 index 241b5b6..0000000 --- a/app/flash.bat +++ /dev/null @@ -1,2 +0,0 @@ -timeout 10 -copy "C:\Users\Kevin\zmk\app\build\zephyr\zmk.uf2" D: \ No newline at end of file diff --git a/app/prj.conf b/app/prj.conf deleted file mode 100644 index c82fc5d..0000000 --- a/app/prj.conf +++ /dev/null @@ -1,23 +0,0 @@ -# Turn on logging, and set ZMK logging to debug output -CONFIG_LOG=y -CONFIG_ZMK_LOG_LEVEL_DBG=y - -# Turn on USB CDC ACM device -CONFIG_USB=y -CONFIG_USB_DEVICE_STACK=y -CONFIG_USB_CDC_ACM=y -CONFIG_USB_CDC_ACM_RINGBUF_SIZE=1024 -CONFIG_USB_CDC_ACM_DEVICE_NAME="CDC_ACM" -CONFIG_USB_CDC_ACM_DEVICE_COUNT=1 - -# Enable serial console -CONFIG_SERIAL=y -CONFIG_CONSOLE=y -CONFIG_UART_INTERRUPT_DRIVEN=y -CONFIG_UART_LINE_CTRL=y - -# Enable USB UART, and set the console device -CONFIG_UART_CONSOLE=y -CONFIG_USB_UART_CONSOLE=y -CONFIG_UART_CONSOLE_ON_DEV_NAME="CDC_ACM_0" -CONFIG_USB_UART_DTR_WAIT=n \ No newline at end of file -- cgit v1.2.3 From 03319438553e68a29a8c66abc47686e0934afc71 Mon Sep 17 00:00:00 2001 From: Kevin Date: Sat, 29 Aug 2020 13:48:40 -0700 Subject: Removed extra encoder config lines --- app/boards/shields/lily58/lily58.conf | 4 ---- 1 file changed, 4 deletions(-) diff --git a/app/boards/shields/lily58/lily58.conf b/app/boards/shields/lily58/lily58.conf index 14c1841..73f0d9d 100644 --- a/app/boards/shields/lily58/lily58.conf +++ b/app/boards/shields/lily58/lily58.conf @@ -1,6 +1,2 @@ -# Enable encoder -CONFIG_EC11=y -CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y - # Uncomment the following line to enable the Lily58 OLED Display # CONFIG_ZMK_DISPLAY=y -- cgit v1.2.3 From ec6215f38e4f178740e0838bba3bf8ca6d9f1f0c Mon Sep 17 00:00:00 2001 From: Kevin Date: Sat, 29 Aug 2020 15:05:43 -0700 Subject: Added Arduino IDE to USB Logging --- docs/docs/dev-guide-usb-logging.md | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/docs/docs/dev-guide-usb-logging.md b/docs/docs/dev-guide-usb-logging.md index 3bc8a0c..bb09364 100644 --- a/docs/docs/dev-guide-usb-logging.md +++ b/docs/docs/dev-guide-usb-logging.md @@ -3,6 +3,9 @@ id: dev-guide-usb-logging title: USB Logging --- +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + ## Overview If you are developing ZMK on a device that does not have a built in UART for debugging and log/console output, @@ -11,7 +14,7 @@ messages to that device instead. ## Kconfig -The following KConfig values need to be set, either by copy and paste into the `app/prj.conf` file, or by running +The following KConfig values need to be set, either by copy and pasting into the `app/prj.conf` file, or by running `west build -t menuconfig` and manually enabling the various settings in that UI. ``` @@ -42,12 +45,26 @@ CONFIG_USB_UART_DTR_WAIT=n ## Viewing Logs -After flashing the updated ZMK image, the board should expose a USB CDC ACM device, that you can connect to and view the logs. +After flashing the updated ZMK image, the board should expose a USB CDC ACM device that you can connect to and view the logs. -On Linux, this should be a device like `/dev/ttyACM0` and you can connect with `minicom` or `tio` as usual, e.g.: + + +On Linux, this should be a device like `/dev/ttyACM0` and you can connect with `minicom` or `tio` as usual, e.g.: ``` sudo tio /dev/ttyACM0 ``` + + + +On Windows, you can use the Arduino IDE which contains a built-in Serial Monitor. Download and install it from [their website](https://www.arduino.cc/en/main/software), then connect your board and under Tools select "Serial Monitor". + + + From there, you should see the various log messages from ZMK and Zephyr, depending on which systems you have set to what log levels. -- cgit v1.2.3 From 35dc46bfbb472c01c2c791233bbe32734cb6dfd5 Mon Sep 17 00:00:00 2001 From: Kevin Date: Sat, 29 Aug 2020 15:51:08 -0700 Subject: Made separate build and flash page with updated content --- docs/docs/dev-build.md | 88 ++++++++++++++++++++++++++++++++++++++ docs/docs/dev-guide-usb-logging.md | 4 +- docs/docs/dev-setup.md | 77 ++++++++++----------------------- docs/sidebars.js | 1 + 4 files changed, 113 insertions(+), 57 deletions(-) create mode 100644 docs/docs/dev-build.md diff --git a/docs/docs/dev-build.md b/docs/docs/dev-build.md new file mode 100644 index 0000000..2df15cd --- /dev/null +++ b/docs/docs/dev-build.md @@ -0,0 +1,88 @@ +--- +id: dev-build-flash +title: Building and Flashing +sidebar_label: Building and Flashing +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +export const OsTabs = (props) => ({props.children}); + +## Building + +From here on, building and flashing ZMK should all be done from the `app/` subdirectory of the ZMK checkout: + +```sh +cd app +``` + +To build for your particular keyboard, the behaviour varies slightly depending on if you are building for a keyboard with +an onboard MCU, or one that uses an MCU board addon. + +### Keyboard (Shield) + MCU Board + +ZMK treats keyboards that take an MCU addon board as [shields](https://docs.zephyrproject.org/2.3.0/guides/porting/shields.html), and treats the smaller MCU board as the true [board](https://docs.zephyrproject.org/2.3.0/guides/porting/board_porting.html) + +Given the following: + +- MCU Board: Proton-C +- Keyboard PCB: kyria_left +- Keymap: default + +You can build ZMK with the following: + +```sh +west build -b proton_c -- -DSHIELD=kyria_left -DKEYMAP=default +``` + +### Keyboard With Onboard MCU + +Keyboards with onboard MCU chips are simply treated as the [board](https://docs.zephyrproject.org/2.3.0/guides/porting/board_porting.html) as far as Zephyr™ is concerned. + +Given the following: + +- Keyboard: Planck (rev6) +- Keymap: default + +you can build ZMK with the following: + +```sh +west build -b planck_rev6 -- -DKEYMAP=default +``` + +### Pristine Building +When building for a new board and/or shield after having built one previously, you may need to enable the pristine build option. This option removes all existing files in the build directory and regenerates them, and can be enabled by adding either --pristine or -p to the command: + +```sh +west build -p -b proton_c -- -DSHIELD=kyria_left -DKEYMAP=default +``` + +## Flashing + +Once built, the previously supplied parameters will be remembered so you can run the following to flash your +board with it in bootloader mode: + +``` +west flash +``` + +For boards that have drag and drop .uf2 flashing capability, the .uf2 file to flash can be found in `build\zephyr` and is by default named `zmk.uf2`. + +:::note +For split keyboards, you will have to build and flash each side separately the first time you install ZMK. By default the `build` command outputs a single .uf2 file named `zmk.uf2`, so you will have to +1. Build the left side with the `build` command provided above +2. Flash `zmk.uf2` to the left side +3. Replace DSHIELD with the right side (for the above example, this would be `kyria_right`) and build again +4. Flash `zmk.uf2` the right side +::: diff --git a/docs/docs/dev-guide-usb-logging.md b/docs/docs/dev-guide-usb-logging.md index bb09364..fa4b63b 100644 --- a/docs/docs/dev-guide-usb-logging.md +++ b/docs/docs/dev-guide-usb-logging.md @@ -51,7 +51,7 @@ After flashing the updated ZMK image, the board should expose a USB CDC ACM devi defaultValue="linux" values={[ {label: 'Linux', value: 'linux'}, -{label: 'Windows', value: 'windows'}, +{label: 'Windows', value: 'win'}, ]}> @@ -60,7 +60,7 @@ On Linux, this should be a device like `/dev/ttyACM0` and you can connect with ` sudo tio /dev/ttyACM0 ``` - + On Windows, you can use the Arduino IDE which contains a built-in Serial Monitor. Download and install it from [their website](https://www.arduino.cc/en/main/software), then connect your board and under Tools select "Serial Monitor". diff --git a/docs/docs/dev-setup.md b/docs/docs/dev-setup.md index fae0aa0..1c5c9dd 100644 --- a/docs/docs/dev-setup.md +++ b/docs/docs/dev-setup.md @@ -181,7 +181,7 @@ brew install cmake ninja python3 ccache dtc git wget ## Setup -### West Build Command +### West Installation `west` is the [Zephyr™ meta-tool](https://docs.zephyrproject.org/2.3.0/guides/west/index.html) used to configure and build Zephyr™ applications. @@ -192,14 +192,32 @@ pip3 install --user -U west ``` :::danger pip user packages -If you haven't done so yet, you may need to add the Python Pip user package directory to your `PATH`, e.g.: +If you haven't done so yet, you may need to add the Python Pip user package directory to your `PATH` otherwise your computer will not be able to find the `west` command. +::: -``` + + +Run the following commands: + +```sh echo 'export PATH=~/.local/bin:"$PATH"' >> ~/.bashrc source ~/.bashrc ``` -::: + + + +1. Go to the Start Menu and type "environment variables" to find and open the "Edit the system environment variables" option. +2. Click "Environment Variables...", and select the "Path" variable under System variables. +3. Click "Edit..." and then "New" to add the directory where your west.exe is located. By default this should be something like `C:\Python38\Scripts`. + + + ### Toolchain Installation @@ -428,54 +446,3 @@ cat ~/.zephyrrc >> ~/.zshrc - -## Build - -From here on, building and flashing ZMK should all be done from the `app/` subdirectory of the ZMK checkout: - -```sh -cd app -``` - -To build for your particular keyboard, the behaviour varies slightly depending on if you are building for a keyboard with -an onboard MCU, or one that uses a MCU board addon. - -### Keyboard (Shield) + MCU Board - -ZMK treats keyboards that take a MCU addon board as [shields](https://docs.zephyrproject.org/2.3.0/guides/porting/shields.html), and treats the smaller MCU board as the true [board](https://docs.zephyrproject.org/2.3.0/guides/porting/board_porting.html) - -Given the following: - -- MCU Board: Proton-C -- Keyboard PCB: kyria_left -- Keymap: default - -You can build ZMK with the following: - -```sh -west build -b proton_c -- -DSHIELD=kyria_left -DKEYMAP=default -``` - -### Keyboard With Onboard MCU - -Keyboards with onboard MCU chips are simply treated as the [board](https://docs.zephyrproject.org/2.3.0/guides/porting/board_porting.html) as far as Zephyr™ is concerned. - -Given the following: - -- Keyboard: Planck (rev6) -- Keymap: default - -you can build ZMK with the following: - -```sh -west build -b planck_rev6 -- -DKEYMAP=default -``` - -## Flashing - -Once built, the previously supplied parameters will be remember, so you can simply run the following to flash your -board, with it in bootloader mode: - -``` -west flash -``` diff --git a/docs/sidebars.js b/docs/sidebars.js index d426667..3710137 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -18,6 +18,7 @@ module.exports = { Development: [ "dev-clean-room", "dev-setup", + "dev-build-flash", "dev-boards-shields-keymaps", "dev-posix-board", "dev-tests", -- cgit v1.2.3 From 96020a469a5524817732dec59c2b22e0e6172504 Mon Sep 17 00:00:00 2001 From: Kevin Date: Sat, 29 Aug 2020 17:21:56 -0700 Subject: Added win environment variables instructions --- docs/docs/dev-setup.md | 45 ++++++++++++++++++++++++++++++++++----------- 1 file changed, 34 insertions(+), 11 deletions(-) diff --git a/docs/docs/dev-setup.md b/docs/docs/dev-setup.md index 1c5c9dd..151a032 100644 --- a/docs/docs/dev-setup.md +++ b/docs/docs/dev-setup.md @@ -212,8 +212,7 @@ source ~/.bashrc -1. Go to the Start Menu and type "environment variables" to find and open the "Edit the system environment variables" option. -2. Click "Environment Variables...", and select the "Path" variable under System variables. +1. See the [Environment Variables](#environment-variables) section on how to get to the Environment Variables page. 3. Click "Edit..." and then "New" to add the directory where your west.exe is located. By default this should be something like `C:\Python38\Scripts`. @@ -359,10 +358,41 @@ pip3 install --user -r zephyr/scripts/requirements-base.txt ### Environment Variables +#### GNU ARM Embedded on Windows + +On Windows, you will have to set two environment variables for ZMK to build properly: `ZEPHYR_TOOLCHAIN_VARIANT` and `GNUARMEMB_TOOLCHAIN_PATH`. + +
+ Steps to Update Environment Variables + +1. Open Start Menu and type 'env' to find the 'Edit the system environment variables' option. Open it. + +![start menu](assets/env-var/start_menu.png) + +2. Click 'Environment Variables...'. + +![start menu](assets/env-var/env_var.png) + +3. Click "New..." under System variables to create a new system variable. + +![start menu](assets/env-var/new_variable.png) + +4. Set the variable name to 'ZEPHYR_TOOLCHAIN_VARIANT' and value to 'gnuarmemb'. Click OK to save. + +![start menu](assets/env-var/zephyr_toolchain.png) + +5. Create another variable with variable name 'GNUARMEMB_TOOLCHAIN_PATH' and value set to wherever you installed your toolchain. Click OK to save. + +![start menu](assets/env-var/gnuarmemb.png) + +
+ +#### For Zephyr + By default, the Zephyr™ SDK will create a file named `~/.zephyrrc` with the correct environment variables to build ZMK. We suggest two main [options](https://docs.zephyrproject.org/2.3.0/guides/env_vars.html?highlight=zephyrrc) for how to load those settings. -#### Per Shell +##### Per Shell To load the Zephyr environment properly for just one transient shell, run the following from your ZMK checkout directory: @@ -408,7 +438,7 @@ source zephyr/zephyr-env.cmd -#### All Shells +##### All Shells To load the environment variables for your shell every time, append the existing `~/.zephyrrc` file to your shell's RC file and then start a new shell. @@ -419,7 +449,6 @@ defaultValue="bash" values={[ {label: 'bash', value: 'bash'}, {label: 'zsh', value: 'zsh'}, -{label: 'cmd.exe', value: 'cmd'}, ] }> @@ -439,10 +468,4 @@ cat ~/.zephyrrc >> ~/.zshrc - - -`cmd.exe` instructions coming soon! - - - -- cgit v1.2.3 From 9b9174cc574b5d8d55cd2b4b583f44f0f7421404 Mon Sep 17 00:00:00 2001 From: Kevin Date: Sat, 29 Aug 2020 17:22:39 -0700 Subject: Added lily58 reset photo --- docs/docs/assets/bond-clearing/lily58.jpg | Bin 0 -> 2566639 bytes docs/docs/bond-reset.md | 16 ++++++++++------ 2 files changed, 10 insertions(+), 6 deletions(-) create mode 100644 docs/docs/assets/bond-clearing/lily58.jpg diff --git a/docs/docs/assets/bond-clearing/lily58.jpg b/docs/docs/assets/bond-clearing/lily58.jpg new file mode 100644 index 0000000..4087e7d Binary files /dev/null and b/docs/docs/assets/bond-clearing/lily58.jpg differ diff --git a/docs/docs/bond-reset.md b/docs/docs/bond-reset.md index 1d3732b..1ba79ee 100644 --- a/docs/docs/bond-reset.md +++ b/docs/docs/bond-reset.md @@ -4,8 +4,8 @@ title: Reset BLE Connections sidebar_label: BLE Reset --- -Known as a 'bond reset', a special key combination, that is not related to the user defined key map, which -clears all wireless connection configurations. The keys must be held for 3 to 5 seconds after the device is +Known as a 'bond reset', each keyboard has a special key combination independent of the user defined key map which will +clear all wireless connection configurations. The keys must be held for 3 to 5 seconds after the device is reset. :::warning @@ -13,15 +13,19 @@ Currently, ZMK only supports a single BLE host. If you remove the keyboard from list, you will need to clear the bonds. ::: -### Split Keyboards +## Split Keyboards Split keyboards will need to be cleared on both halves. For best results try to reset them at the same time. -## Kyria +### Kyria ![Kyria bond-reset combo](assets/bond-clearing/kyria.jpg) -## Corne +### Corne -![Corne bond-reset combo](assets/bond-clearing/corne.jpg) \ No newline at end of file +![Corne bond-reset combo](assets/bond-clearing/corne.jpg) + +### Lily58 + +![Lily58 bond-reset combo](assets/bond-clearing/lily58.jpg) \ No newline at end of file -- cgit v1.2.3 From 133166c392540f8496f2dd42671ddda1bd547d2f Mon Sep 17 00:00:00 2001 From: Kevin Date: Sat, 29 Aug 2020 17:23:17 -0700 Subject: Pictures for environment variables --- docs/docs/assets/env-var/env_var.png | Bin 0 -> 17317 bytes docs/docs/assets/env-var/gnuarmemb.png | Bin 0 -> 7914 bytes docs/docs/assets/env-var/new_variable.png | Bin 0 -> 60899 bytes docs/docs/assets/env-var/start_menu.png | Bin 0 -> 51108 bytes docs/docs/assets/env-var/zephyr_toolchain.png | Bin 0 -> 7282 bytes 5 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/docs/assets/env-var/env_var.png create mode 100644 docs/docs/assets/env-var/gnuarmemb.png create mode 100644 docs/docs/assets/env-var/new_variable.png create mode 100644 docs/docs/assets/env-var/start_menu.png create mode 100644 docs/docs/assets/env-var/zephyr_toolchain.png diff --git a/docs/docs/assets/env-var/env_var.png b/docs/docs/assets/env-var/env_var.png new file mode 100644 index 0000000..77ebbc5 Binary files /dev/null and b/docs/docs/assets/env-var/env_var.png differ diff --git a/docs/docs/assets/env-var/gnuarmemb.png b/docs/docs/assets/env-var/gnuarmemb.png new file mode 100644 index 0000000..42e38ec Binary files /dev/null and b/docs/docs/assets/env-var/gnuarmemb.png differ diff --git a/docs/docs/assets/env-var/new_variable.png b/docs/docs/assets/env-var/new_variable.png new file mode 100644 index 0000000..3cc72bd Binary files /dev/null and b/docs/docs/assets/env-var/new_variable.png differ diff --git a/docs/docs/assets/env-var/start_menu.png b/docs/docs/assets/env-var/start_menu.png new file mode 100644 index 0000000..fc7d9b5 Binary files /dev/null and b/docs/docs/assets/env-var/start_menu.png differ diff --git a/docs/docs/assets/env-var/zephyr_toolchain.png b/docs/docs/assets/env-var/zephyr_toolchain.png new file mode 100644 index 0000000..5a8ec50 Binary files /dev/null and b/docs/docs/assets/env-var/zephyr_toolchain.png differ -- cgit v1.2.3 From 76095c64c6d51c2c7aaf9856d50847998a41b263 Mon Sep 17 00:00:00 2001 From: Kevin Date: Sat, 29 Aug 2020 17:25:00 -0700 Subject: Fixed title --- docs/docs/dev-setup.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/dev-setup.md b/docs/docs/dev-setup.md index 151a032..e9c635a 100644 --- a/docs/docs/dev-setup.md +++ b/docs/docs/dev-setup.md @@ -358,7 +358,7 @@ pip3 install --user -r zephyr/scripts/requirements-base.txt ### Environment Variables -#### GNU ARM Embedded on Windows +#### For GNU ARM Embedded on Windows On Windows, you will have to set two environment variables for ZMK to build properly: `ZEPHYR_TOOLCHAIN_VARIANT` and `GNUARMEMB_TOOLCHAIN_PATH`. -- cgit v1.2.3 From d7bd09149b347c71259eb299f8e8f7ddaa4055f7 Mon Sep 17 00:00:00 2001 From: Kevin Date: Sat, 29 Aug 2020 17:25:37 -0700 Subject: Added info on connecting keyboard --- docs/docs/user-setup.md | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/docs/docs/user-setup.md b/docs/docs/user-setup.md index be230d2..b1ffefa 100644 --- a/docs/docs/user-setup.md +++ b/docs/docs/user-setup.md @@ -11,8 +11,7 @@ Unlike other keyboard firmwares, ZMK Firmware has been built from the ground up their own keyboard configurations, including keymaps, specific hardware details, etc. all outside of the core ZMK Firmware source repository. -In addition to this, most users do not need to install any complicated toolchains or tools to build ZMK, -instead using GitHub Actions to automatically build the user's configured firmware for them. +In addition to this, most users will not need to install any complicated toolchains or tools to build ZMK. GitHub Actions is used instead to automatically build the user's configured firmware for them. ## Summary @@ -170,7 +169,7 @@ a link to download the `firmware` upload: Once downloaded, extract the zip and you can verify it should contain one or more `uf2` files, which will be copied to your keyboard. -### Installing UF2 Files +### Flashing UF2 Files To flash the firmware, first put your board into bootloader mode by double clicking the reset button (either on the MCU board itself, or the one that is part of your keyboard). The controller should appear in your OS as a new USB storage device. @@ -178,6 +177,14 @@ or the one that is part of your keyboard). The controller should appear in your Once this happens, copy the correct UF2 file (e.g. left or right if working on a split), and paste it onto the root of that USB mass storage device. Once the flash is complete, the controller should automatically restart, and load your newfly flashed firmware. +## Wirelessly Connecting Your Keyboard + +Connecting your keyboard wirelessly is the same as adding other Bluetooth devides: press the reset button and scan for devices. However, pairing and bonding is still currently being worked on to increase relability and ease of use. In addition, users have in general reported that Bluetooth pairing with computers tends to be quite finnicky. Try out the connection with your tablet or phone first, as those devices seem to work much more consistently. See [BLE Reset](./bond-reset.md) for help on resetting your MCUs if you're experiencing connection issues. + +### Connecting Split Keyboard Halves + +For split keyboards, after flashing each half individually you can connect them together by resetting them at the same time. Within a few seconds of resetting, both halves should automatically connect to each other. + ## Customization ### Configuration Changes @@ -199,3 +206,5 @@ GitHub Actions job to build your firmware which you can download once it complet :::note If you need to, a review of [Learn The Basics Of Git In Under 10 Minutes](https://www.freecodecamp.org/news/learn-the-basics-of-git-in-under-10-minutes-da548267cc91/) will help you get these steps right. ::: + +For split keyboards, only the central (usually left) side will need to be reflashed after making updates to your keymap. -- cgit v1.2.3 From dad2d339b3fa038af1b87cdb60b79081d681a6c3 Mon Sep 17 00:00:00 2001 From: Kevin Date: Sat, 29 Aug 2020 17:46:00 -0700 Subject: Added customization page --- docs/docs/customization.md | 33 +++++++++++++++++++++++++++++++++ docs/docs/feature/keymaps.md | 2 +- docs/docs/hardware.md | 2 +- docs/docs/intro.md | 2 +- docs/docs/user-setup.md | 24 ------------------------ docs/sidebars.js | 2 +- 6 files changed, 37 insertions(+), 28 deletions(-) create mode 100644 docs/docs/customization.md diff --git a/docs/docs/customization.md b/docs/docs/customization.md new file mode 100644 index 0000000..0bb1794 --- /dev/null +++ b/docs/docs/customization.md @@ -0,0 +1,33 @@ +--- +id: customization +title: Customizing ZMK +sidebar_label: Customizing ZMK +--- + +After verifying you can successfully flash the default firmware, you will probably want to begin customizing your keymap and other keyboard options. + +## Configuration Changes + +The setup script creates a `config/.conf` file that allows you to add additional configuration options to +control what features and options are built into your firmware. Opening that file with your text editor will allow you to see the +various config settings that can be commented/uncommented to modify how your firmware is built. + +## Keymap + +Once you have the basic user config completed, you can find the keymap file in `config/.keymap` and customize from there. +Refer to the [Keymap](/docs/feature/keymaps) documentation to learn more. + +## Publishing + +After making any changes you want, you should commit the changes and then push them to GitHub. That will trigger a new +GitHub Actions job to build your firmware which you can download once it completes. + +:::note +If you need to, a review of [Learn The Basics Of Git In Under 10 Minutes](https://www.freecodecamp.org/news/learn-the-basics-of-git-in-under-10-minutes-da548267cc91/) will help you get these steps right. +::: + +## Flashing Your Changes + +For normal keyboards, follow the same flashing instructions as before to flash your updated firmware. + +For split keyboards, only the central (left) side will need to be reflashed if you are just updating your keymap. diff --git a/docs/docs/feature/keymaps.md b/docs/docs/feature/keymaps.md index 020df17..367b03c 100644 --- a/docs/docs/feature/keymaps.md +++ b/docs/docs/feature/keymaps.md @@ -4,7 +4,7 @@ title: Keymaps & Behaviors sidebar_label: Keymaps --- -ZMK uses an declarative approach to keymaps, instead of using C code for all keymap configuration. +ZMK uses a declarative approach to keymaps instead of using C code for all keymap configuration. Right now, ZMK uses the devicetree syntax to declare those keymaps; future work is envisioned for supporting dynamic loading of declarative keymaps, e.g. over USB Mass Storage or via a custom BLE service. diff --git a/docs/docs/hardware.md b/docs/docs/hardware.md index 9e6a956..299d1f5 100644 --- a/docs/docs/hardware.md +++ b/docs/docs/hardware.md @@ -11,7 +11,7 @@ have had their hardware details codified in boards/shields for ZMK. ::: -Being built on a solid technical foundation of the Zephyr™ RTOS, it's possible to make ZMK support a wide diversity of hardware targets. +With the solid technical foundation of Zephyr™ RTOS, ZMK can support a wide diversity of hardware targets. That being said, there are currently only a few specific [boards](/docs/faq#what-is-a-board)/[shields](/docs/faq#what-is-a-shield) that have been written and tested by the ZMK contributors. ## Boards diff --git a/docs/docs/intro.md b/docs/docs/intro.md index 514c76e..29045f7 100644 --- a/docs/docs/intro.md +++ b/docs/docs/intro.md @@ -5,7 +5,7 @@ sidebar_label: Introduction --- ZMK Firmware is an open source (MIT) keyboard -firmware built on the [Zephyr™ Project](https://zephyrproject.com/) RTOS. +firmware built on the [Zephyr™ Project](https://zephyrproject.com/) Real Time Operating System (RTOS). The goal is to provider a powerful, featureful keyboard firmware that is free of licensing issues that prevent upstream BLE support as a first-class diff --git a/docs/docs/user-setup.md b/docs/docs/user-setup.md index b1ffefa..2aade82 100644 --- a/docs/docs/user-setup.md +++ b/docs/docs/user-setup.md @@ -184,27 +184,3 @@ Connecting your keyboard wirelessly is the same as adding other Bluetooth devide ### Connecting Split Keyboard Halves For split keyboards, after flashing each half individually you can connect them together by resetting them at the same time. Within a few seconds of resetting, both halves should automatically connect to each other. - -## Customization - -### Configuration Changes - -The setup script creates a `config/.conf` file that allows you to add additional configuration options to -control what features and options are built into your firmware. Opening that file with your text editor you should see -various config settings that can be commented/uncommented to modify how your firmware is built. - -### Keymap - -Once you have the basic user config completed, you can find the file in `config/.keymap` and customize from there. -Refer to the [Keymap](/docs/feature/keymaps) documentation to learn more. - -### Publishing - -After making any changes you want, you should commit the changes and then push them to GitHub. That will trigger a new -GitHub Actions job to build your firmware which you can download once it completes. - -:::note -If you need to, a review of [Learn The Basics Of Git In Under 10 Minutes](https://www.freecodecamp.org/news/learn-the-basics-of-git-in-under-10-minutes-da548267cc91/) will help you get these steps right. -::: - -For split keyboards, only the central (usually left) side will need to be reflashed after making updates to your keymap. diff --git a/docs/sidebars.js b/docs/sidebars.js index 3710137..53c5cf3 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -1,6 +1,6 @@ module.exports = { someSidebar: { - "Getting Started": ["intro", "hardware", "faq", "user-setup", "bond-reset"], + "Getting Started": ["intro", "hardware", "faq", "user-setup","customization", "bond-reset"], Features: [ "feature/keymaps", "feature/displays", -- cgit v1.2.3 From 276a2620b9a5259dd15cd4a6038a6144e5da9432 Mon Sep 17 00:00:00 2001 From: Kevin Date: Sat, 29 Aug 2020 17:47:41 -0700 Subject: Minor capitalization fix --- docs/docs/feature/keymaps.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/feature/keymaps.md b/docs/docs/feature/keymaps.md index 367b03c..d991925 100644 --- a/docs/docs/feature/keymaps.md +++ b/docs/docs/feature/keymaps.md @@ -80,7 +80,7 @@ A keymap file is composed of several sections, that together make up a valid dev ### Includes -THe devicetree files are actually preprocessed before being finally leveraged by Zephyr. This allows using standard C defines to create meaningful placeholders +The devicetree files are actually preprocessed before being finally leveraged by Zephyr. This allows using standard C defines to create meaningful placeholders for what would otherwise be cryptic integer keycodes, etc. This also allows bringing in _other_ devicetree nodes from separate files. The top two lines of most keymaps should include: -- cgit v1.2.3 From 1ffcbefd728f2b47fcbb5e4e8b117adf893f059a Mon Sep 17 00:00:00 2001 From: Kevin Date: Sat, 29 Aug 2020 18:12:12 -0700 Subject: Added encoder to unified conf file --- app/boards/shields/lily58/lily58.conf | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/boards/shields/lily58/lily58.conf b/app/boards/shields/lily58/lily58.conf index 73f0d9d..31eb7c6 100644 --- a/app/boards/shields/lily58/lily58.conf +++ b/app/boards/shields/lily58/lily58.conf @@ -1,2 +1,6 @@ +# Uncomment to enable encoder +# CONFIG_EC11=y +# CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y + # Uncomment the following line to enable the Lily58 OLED Display # CONFIG_ZMK_DISPLAY=y -- cgit v1.2.3 From 037970fe8c0122d156de4db92e3ef335e1902e55 Mon Sep 17 00:00:00 2001 From: Kevin Date: Sat, 29 Aug 2020 18:43:13 -0700 Subject: Removed DKEYMAP and added split build directories --- docs/docs/dev-build.md | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/docs/docs/dev-build.md b/docs/docs/dev-build.md index 2df15cd..393f483 100644 --- a/docs/docs/dev-build.md +++ b/docs/docs/dev-build.md @@ -43,7 +43,7 @@ Given the following: You can build ZMK with the following: ```sh -west build -b proton_c -- -DSHIELD=kyria_left -DKEYMAP=default +west build -b proton_c -- -DSHIELD=kyria_left ``` ### Keyboard With Onboard MCU @@ -58,14 +58,29 @@ Given the following: you can build ZMK with the following: ```sh -west build -b planck_rev6 -- -DKEYMAP=default +west build -b planck_rev6 ``` ### Pristine Building When building for a new board and/or shield after having built one previously, you may need to enable the pristine build option. This option removes all existing files in the build directory and regenerates them, and can be enabled by adding either --pristine or -p to the command: ```sh -west build -p -b proton_c -- -DSHIELD=kyria_left -DKEYMAP=default +west build -p -b proton_c -- -DSHIELD=kyria_left +``` +### Split Keyboards + +:::note +For split keyboards, you will have to build and flash each side separately the first time you install ZMK. +::: + +By default, the `build` command outputs a single .uf2 file named `zmk.uf2` so building left and then right immediately after will overwrite your left firmware. In addition, you will need to pristine build each side to ensure the correct files are used. To avoid having to pristine build each time and separate the left and right build files, we recommend setting up separate build directories for each half. You can do this by first building left into `build\left`: + +``` +west build -d build/left -b nice_nano -- -DSHIELD=kyria_left +``` +and then building right into `build\right`: +``` +west build -d build/right -b nice_nano -- -DSHIELD=kyria_right ``` ## Flashing @@ -79,10 +94,3 @@ west flash For boards that have drag and drop .uf2 flashing capability, the .uf2 file to flash can be found in `build\zephyr` and is by default named `zmk.uf2`. -:::note -For split keyboards, you will have to build and flash each side separately the first time you install ZMK. By default the `build` command outputs a single .uf2 file named `zmk.uf2`, so you will have to -1. Build the left side with the `build` command provided above -2. Flash `zmk.uf2` to the left side -3. Replace DSHIELD with the right side (for the above example, this would be `kyria_right`) and build again -4. Flash `zmk.uf2` the right side -::: -- cgit v1.2.3 From d2f4f00f69955d7befb9eec41c9c02094f3318aa Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Fri, 28 Aug 2020 23:10:25 -0400 Subject: feat(test): Add GH Action for tests. --- .github/workflows/test.yml | 62 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 .github/workflows/test.yml diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..3d2c76b --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,62 @@ +on: [push, pull_request] + +name: Test + +jobs: + integration_test: + runs-on: ubuntu-latest + name: Integration Tests + steps: + # To use this repository's private action, + # you must check out the repository + - name: Checkout + uses: actions/checkout@v2 + - name: Cache west modules + timeout-minutes: 2 + continue-on-error: true + uses: actions/cache@v2 + env: + cache-name: cache-zephyr-modules + with: + path: | + modules/ + tools/ + zephyr/ + bootloader/ + key: 2-${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('app/west.yml') }} + restore-keys: | + 2-${{ runner.os }}-build-${{ env.cache-name }}- + 2-${{ runner.os }}-build- + 2-${{ runner.os }}- + - name: West Init + uses: "docker://zmkfirmware/zephyr-west-action-arm:latest" + id: west-init + with: + args: 'init "-l app"' + - name: West Update + uses: "docker://zmkfirmware/zephyr-west-action-arm:latest" + id: west-update + with: + args: "update" + - name: West Config Zephyr Base + uses: "docker://zmkfirmware/zephyr-west-action-arm:latest" + id: west-config + with: + args: 'config "--global zephyr.base-prefer configfile"' + - name: West Zephyr Export + uses: "docker://zmkfirmware/zephyr-west-action-arm:latest" + id: west-zephyr-export + with: + args: "zephyr-export" + - name: Test All + uses: "docker://zmkfirmware/zephyr-west-action-arm:latest" + id: west-build + with: + entrypoint: /bin/bash + args: '-c "cd app && ./run-test.sh all"' + - name: Archive Build + if: ${{ always() }} + uses: actions/upload-artifact@v2 + with: + name: "log-files" + path: app/build/**/*.log -- cgit v1.2.3 From bc13cd1de1b647a519d051ed44f69a09ad75bfbf Mon Sep 17 00:00:00 2001 From: Kevin Date: Sat, 29 Aug 2020 19:22:43 -0700 Subject: Added PuTTY to USB Logging --- docs/docs/assets/usb-logging/com_port.PNG | Bin 0 -> 14258 bytes docs/docs/assets/usb-logging/putty.PNG | Bin 0 -> 19822 bytes docs/docs/dev-guide-usb-logging.md | 8 +++++++- 3 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 docs/docs/assets/usb-logging/com_port.PNG create mode 100644 docs/docs/assets/usb-logging/putty.PNG diff --git a/docs/docs/assets/usb-logging/com_port.PNG b/docs/docs/assets/usb-logging/com_port.PNG new file mode 100644 index 0000000..35934b8 Binary files /dev/null and b/docs/docs/assets/usb-logging/com_port.PNG differ diff --git a/docs/docs/assets/usb-logging/putty.PNG b/docs/docs/assets/usb-logging/putty.PNG new file mode 100644 index 0000000..b53d536 Binary files /dev/null and b/docs/docs/assets/usb-logging/putty.PNG differ diff --git a/docs/docs/dev-guide-usb-logging.md b/docs/docs/dev-guide-usb-logging.md index fa4b63b..62977c7 100644 --- a/docs/docs/dev-guide-usb-logging.md +++ b/docs/docs/dev-guide-usb-logging.md @@ -62,7 +62,13 @@ sudo tio /dev/ttyACM0 -On Windows, you can use the Arduino IDE which contains a built-in Serial Monitor. Download and install it from [their website](https://www.arduino.cc/en/main/software), then connect your board and under Tools select "Serial Monitor". +On Windows, you can use [PuTTY](https://www.putty.org/). Once installed, use Device Manager to figure out which COM port your controller is communicating on (listed under 'Ports (COM & LPT)') and specify that as the 'Serial line' in PuTTY. + +![Controller COM port](assets/usb-logging/com_port.png) + +![PuTTY settings](assets/usb-logging/putty.png) + +If you already have the Ardunio IDE installed you can also use its built-in Serial Monitor. -- cgit v1.2.3 From 8594d832b663c92d5d1ccfe14c65419835f4059e Mon Sep 17 00:00:00 2001 From: Kevin Date: Sat, 29 Aug 2020 19:23:25 -0700 Subject: Added split build directories --- docs/docs/dev-build.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/docs/docs/dev-build.md b/docs/docs/dev-build.md index 393f483..b962a7d 100644 --- a/docs/docs/dev-build.md +++ b/docs/docs/dev-build.md @@ -62,26 +62,27 @@ west build -b planck_rev6 ``` ### Pristine Building -When building for a new board and/or shield after having built one previously, you may need to enable the pristine build option. This option removes all existing files in the build directory and regenerates them, and can be enabled by adding either --pristine or -p to the command: +When building for a new board and/or shield after having built one previously, you may need to enable the pristine build option. This option removes all existing files in the build directory before regenerating them, and can be enabled by adding either --pristine or -p to the command: ```sh west build -p -b proton_c -- -DSHIELD=kyria_left ``` -### Split Keyboards +### Building For Split Keyboards :::note For split keyboards, you will have to build and flash each side separately the first time you install ZMK. ::: -By default, the `build` command outputs a single .uf2 file named `zmk.uf2` so building left and then right immediately after will overwrite your left firmware. In addition, you will need to pristine build each side to ensure the correct files are used. To avoid having to pristine build each time and separate the left and right build files, we recommend setting up separate build directories for each half. You can do this by first building left into `build\left`: +By default, the `build` command outputs a single .uf2 file named `zmk.uf2` so building left and then right immediately after will overwrite your left firmware. In addition, you will need to pristine build each side to ensure the correct files are used. To avoid having to pristine build every time and separate the left and right build files, we recommend setting up separate build directories for each half. You can do this by using the `-d` parameter and first building left into `build/left`: ``` west build -d build/left -b nice_nano -- -DSHIELD=kyria_left ``` -and then building right into `build\right`: +and then building right into `build/right`: ``` west build -d build/right -b nice_nano -- -DSHIELD=kyria_right ``` +This produces `left` and `right` subfolders under the `build` directory and two separate .uf2 files. For future work on a specific half, use the `-d` parameter again to ensure you are building into the correct location. ## Flashing @@ -92,5 +93,5 @@ board with it in bootloader mode: west flash ``` -For boards that have drag and drop .uf2 flashing capability, the .uf2 file to flash can be found in `build\zephyr` and is by default named `zmk.uf2`. +For boards that have drag and drop .uf2 flashing capability, the .uf2 file to flash can be found in `build\zephyr` (or `build\left|right\zephyr` if you followed the instructions for splits) and is by default named `zmk.uf2`. -- cgit v1.2.3 From 0a06760cda0cc9cbce4b4c188ea169194903a695 Mon Sep 17 00:00:00 2001 From: Kevin Date: Sat, 29 Aug 2020 19:26:11 -0700 Subject: Updated alt text --- docs/docs/dev-setup.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/docs/dev-setup.md b/docs/docs/dev-setup.md index e9c635a..1d7d703 100644 --- a/docs/docs/dev-setup.md +++ b/docs/docs/dev-setup.md @@ -367,23 +367,23 @@ On Windows, you will have to set two environment variables for ZMK to build prop 1. Open Start Menu and type 'env' to find the 'Edit the system environment variables' option. Open it. -![start menu](assets/env-var/start_menu.png) +![Environment variables in Start Menu](assets/env-var/start_menu.png) 2. Click 'Environment Variables...'. -![start menu](assets/env-var/env_var.png) +![Environment variables button](assets/env-var/env_var.png) 3. Click "New..." under System variables to create a new system variable. -![start menu](assets/env-var/new_variable.png) +![Environment variables menu](assets/env-var/new_variable.png) 4. Set the variable name to 'ZEPHYR_TOOLCHAIN_VARIANT' and value to 'gnuarmemb'. Click OK to save. -![start menu](assets/env-var/zephyr_toolchain.png) +![Adding Zephyr toolchain variable](assets/env-var/zephyr_toolchain.png) 5. Create another variable with variable name 'GNUARMEMB_TOOLCHAIN_PATH' and value set to wherever you installed your toolchain. Click OK to save. -![start menu](assets/env-var/gnuarmemb.png) +![Adding GNUARMEMB variable](assets/env-var/gnuarmemb.png) -- cgit v1.2.3 From 0e04596ef610aa5c23cae5bdc80fd63ee28b3701 Mon Sep 17 00:00:00 2001 From: Kevin Date: Sat, 29 Aug 2020 21:04:32 -0700 Subject: Renamed COM port image --- docs/docs/assets/usb-logging/com-port.PNG | Bin 0 -> 14258 bytes docs/docs/assets/usb-logging/com_port.PNG | Bin 14258 -> 0 bytes docs/docs/dev-guide-usb-logging.md | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 docs/docs/assets/usb-logging/com-port.PNG delete mode 100644 docs/docs/assets/usb-logging/com_port.PNG diff --git a/docs/docs/assets/usb-logging/com-port.PNG b/docs/docs/assets/usb-logging/com-port.PNG new file mode 100644 index 0000000..35934b8 Binary files /dev/null and b/docs/docs/assets/usb-logging/com-port.PNG differ diff --git a/docs/docs/assets/usb-logging/com_port.PNG b/docs/docs/assets/usb-logging/com_port.PNG deleted file mode 100644 index 35934b8..0000000 Binary files a/docs/docs/assets/usb-logging/com_port.PNG and /dev/null differ diff --git a/docs/docs/dev-guide-usb-logging.md b/docs/docs/dev-guide-usb-logging.md index 62977c7..b63494d 100644 --- a/docs/docs/dev-guide-usb-logging.md +++ b/docs/docs/dev-guide-usb-logging.md @@ -64,7 +64,7 @@ sudo tio /dev/ttyACM0 On Windows, you can use [PuTTY](https://www.putty.org/). Once installed, use Device Manager to figure out which COM port your controller is communicating on (listed under 'Ports (COM & LPT)') and specify that as the 'Serial line' in PuTTY. -![Controller COM port](assets/usb-logging/com_port.png) +![Controller COM port](assets/usb-logging/com-port.png) ![PuTTY settings](assets/usb-logging/putty.png) -- cgit v1.2.3 From af23445aa02cea100ba064770a139b4971a6fc39 Mon Sep 17 00:00:00 2001 From: Kevin Date: Sat, 29 Aug 2020 21:13:48 -0700 Subject: COM image fix --- docs/docs/assets/usb-logging/com-port.PNG | Bin 14258 -> 0 bytes docs/docs/assets/usb-logging/com.PNG | Bin 0 -> 14258 bytes docs/docs/dev-guide-usb-logging.md | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 docs/docs/assets/usb-logging/com-port.PNG create mode 100644 docs/docs/assets/usb-logging/com.PNG diff --git a/docs/docs/assets/usb-logging/com-port.PNG b/docs/docs/assets/usb-logging/com-port.PNG deleted file mode 100644 index 35934b8..0000000 Binary files a/docs/docs/assets/usb-logging/com-port.PNG and /dev/null differ diff --git a/docs/docs/assets/usb-logging/com.PNG b/docs/docs/assets/usb-logging/com.PNG new file mode 100644 index 0000000..35934b8 Binary files /dev/null and b/docs/docs/assets/usb-logging/com.PNG differ diff --git a/docs/docs/dev-guide-usb-logging.md b/docs/docs/dev-guide-usb-logging.md index b63494d..6eca165 100644 --- a/docs/docs/dev-guide-usb-logging.md +++ b/docs/docs/dev-guide-usb-logging.md @@ -64,7 +64,7 @@ sudo tio /dev/ttyACM0 On Windows, you can use [PuTTY](https://www.putty.org/). Once installed, use Device Manager to figure out which COM port your controller is communicating on (listed under 'Ports (COM & LPT)') and specify that as the 'Serial line' in PuTTY. -![Controller COM port](assets/usb-logging/com-port.png) +![Controller COM port](./assets/usb-logging/com.png) ![PuTTY settings](assets/usb-logging/putty.png) -- cgit v1.2.3 From 06af711f57df20b195a1cf37b1a31ceee9a672b6 Mon Sep 17 00:00:00 2001 From: Kevin Date: Sat, 29 Aug 2020 21:20:38 -0700 Subject: Replaced png with jpg --- docs/docs/assets/usb-logging/com.PNG | Bin 14258 -> 0 bytes docs/docs/assets/usb-logging/com.jpg | Bin 0 -> 10993 bytes docs/docs/dev-guide-usb-logging.md | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 docs/docs/assets/usb-logging/com.PNG create mode 100644 docs/docs/assets/usb-logging/com.jpg diff --git a/docs/docs/assets/usb-logging/com.PNG b/docs/docs/assets/usb-logging/com.PNG deleted file mode 100644 index 35934b8..0000000 Binary files a/docs/docs/assets/usb-logging/com.PNG and /dev/null differ diff --git a/docs/docs/assets/usb-logging/com.jpg b/docs/docs/assets/usb-logging/com.jpg new file mode 100644 index 0000000..e2ab9a8 Binary files /dev/null and b/docs/docs/assets/usb-logging/com.jpg differ diff --git a/docs/docs/dev-guide-usb-logging.md b/docs/docs/dev-guide-usb-logging.md index 6eca165..11b568e 100644 --- a/docs/docs/dev-guide-usb-logging.md +++ b/docs/docs/dev-guide-usb-logging.md @@ -64,7 +64,7 @@ sudo tio /dev/ttyACM0 On Windows, you can use [PuTTY](https://www.putty.org/). Once installed, use Device Manager to figure out which COM port your controller is communicating on (listed under 'Ports (COM & LPT)') and specify that as the 'Serial line' in PuTTY. -![Controller COM port](./assets/usb-logging/com.png) +![Controller COM port](./assets/usb-logging/com.jpg) ![PuTTY settings](assets/usb-logging/putty.png) -- cgit v1.2.3 From 212dd91e2910e58e5a5c0c32e8726f2efc396c22 Mon Sep 17 00:00:00 2001 From: Kevin Date: Sat, 29 Aug 2020 21:27:03 -0700 Subject: PuTTY image fix --- docs/docs/assets/bond-clearing/debug.log | 0 docs/docs/assets/usb-logging/putty.PNG | Bin 19822 -> 0 bytes docs/docs/assets/usb-logging/putty.jpg | Bin 0 -> 160650 bytes docs/docs/dev-guide-usb-logging.md | 2 +- 4 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 docs/docs/assets/bond-clearing/debug.log delete mode 100644 docs/docs/assets/usb-logging/putty.PNG create mode 100644 docs/docs/assets/usb-logging/putty.jpg diff --git a/docs/docs/assets/bond-clearing/debug.log b/docs/docs/assets/bond-clearing/debug.log new file mode 100644 index 0000000..e69de29 diff --git a/docs/docs/assets/usb-logging/putty.PNG b/docs/docs/assets/usb-logging/putty.PNG deleted file mode 100644 index b53d536..0000000 Binary files a/docs/docs/assets/usb-logging/putty.PNG and /dev/null differ diff --git a/docs/docs/assets/usb-logging/putty.jpg b/docs/docs/assets/usb-logging/putty.jpg new file mode 100644 index 0000000..dfbb4bd Binary files /dev/null and b/docs/docs/assets/usb-logging/putty.jpg differ diff --git a/docs/docs/dev-guide-usb-logging.md b/docs/docs/dev-guide-usb-logging.md index 11b568e..c5fb4b9 100644 --- a/docs/docs/dev-guide-usb-logging.md +++ b/docs/docs/dev-guide-usb-logging.md @@ -66,7 +66,7 @@ On Windows, you can use [PuTTY](https://www.putty.org/). Once installed, use Dev ![Controller COM port](./assets/usb-logging/com.jpg) -![PuTTY settings](assets/usb-logging/putty.png) +![PuTTY settings](assets/usb-logging/putty.jpg) If you already have the Ardunio IDE installed you can also use its built-in Serial Monitor. -- cgit v1.2.3 From 45b1756a700ba0603f0a3b7708108c9ebc9fc945 Mon Sep 17 00:00:00 2001 From: Kevin Chen Date: Sat, 29 Aug 2020 21:36:00 -0700 Subject: Replaced \ with / Co-authored-by: Pete Johanson --- docs/docs/dev-build.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/docs/dev-build.md b/docs/docs/dev-build.md index b962a7d..816468e 100644 --- a/docs/docs/dev-build.md +++ b/docs/docs/dev-build.md @@ -93,5 +93,4 @@ board with it in bootloader mode: west flash ``` -For boards that have drag and drop .uf2 flashing capability, the .uf2 file to flash can be found in `build\zephyr` (or `build\left|right\zephyr` if you followed the instructions for splits) and is by default named `zmk.uf2`. - +For boards that have drag and drop .uf2 flashing capability, the .uf2 file to flash can be found in `build/zephyr` (or `build/left|right/zephyr` if you followed the instructions for splits) and is by default named `zmk.uf2`. -- cgit v1.2.3 From 96fde775604be02f2aeee04f3cd6d4edff2815bd Mon Sep 17 00:00:00 2001 From: Kurtis Lew Date: Sun, 30 Aug 2020 20:12:53 -0700 Subject: Update key-press.md Specified keypress and consumer press pages --- docs/docs/behavior/key-press.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/behavior/key-press.md b/docs/docs/behavior/key-press.md index 2edce1d..f58225d 100644 --- a/docs/docs/behavior/key-press.md +++ b/docs/docs/behavior/key-press.md @@ -8,7 +8,7 @@ sidebar_label: Key Press The most basic of behaviors, is the ability to send certain keycode presses and releases in response to activating a certain key. -For reference on keycode values, see the [USB HID Usage Tables](https://www.usb.org/document-library/hid-usage-tables-12). +For reference on keycode values, see pages 83-89 of the [USB HID Usage Tables](https://www.usb.org/document-library/hid-usage-tables-12). ## Keycode Defines -- cgit v1.2.3 From 21fcab208e50bf8ccbe9e238662ca86c35dab077 Mon Sep 17 00:00:00 2001 From: Okke Formsma Date: Mon, 31 Aug 2020 22:24:36 +0200 Subject: stop on fatal errors --- app/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 9fce3b6..db56c53 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -56,3 +56,5 @@ target_sources_ifdef(CONFIG_ZMK_RGB_UNDERGLOW app PRIVATE src/rgb_underglow.c) target_sources(app PRIVATE src/endpoints.c) target_sources(app PRIVATE src/hid_listener.c) target_sources(app PRIVATE src/main.c) + +zephyr_cc_option(-Wfatal-errors) \ No newline at end of file -- cgit v1.2.3 From 639a338c2dd6801ae8fa4d82c9d7101405b2dc7b Mon Sep 17 00:00:00 2001 From: Cody McGinnis Date: Tue, 1 Sep 2020 09:34:06 -0400 Subject: fix(core): track layer state with keypress --- app/src/keymap.c | 56 ++++++++++++++++++++++++++++++-------------------------- 1 file changed, 30 insertions(+), 26 deletions(-) diff --git a/app/src/keymap.c b/app/src/keymap.c index ee6e370..57cdad6 100644 --- a/app/src/keymap.c +++ b/app/src/keymap.c @@ -51,10 +51,10 @@ static u8_t zmk_keymap_layer_default = 0; // State -// When a behavior handles a key position "down" event, we record that layer +// When a behavior handles a key position "down" event, we record the layer state // here so that even if that layer is deactivated before the "up", event, we // still send the release event to the behavior in that layer also. -static u8_t zmk_keymap_active_behavior_layer[ZMK_KEYMAP_LEN]; +static u32_t zmk_keymap_active_behavior_layer[ZMK_KEYMAP_LEN]; static struct zmk_behavior_binding zmk_keymap[ZMK_KEYMAP_LAYERS_LEN][ZMK_KEYMAP_LEN] = { DT_INST_FOREACH_CHILD(0, TRANSFORMED_LAYER) @@ -101,47 +101,51 @@ int zmk_keymap_layer_toggle(u8_t layer) return zmk_keymap_layer_activate(layer); }; -bool is_active_position(u32_t position, u8_t layer) +bool is_active_layer(u8_t layer, u32_t layer_state) { - return (zmk_keymap_layer_state & BIT(layer)) == BIT(layer) - || layer == zmk_keymap_layer_default - || zmk_keymap_active_behavior_layer[position] == layer; + return (layer_state & BIT(layer)) == BIT(layer) + || layer == zmk_keymap_layer_default; } +int zmk_keymap_apply_position_state(int layer, u32_t position, bool pressed) +{ + struct zmk_behavior_binding *binding = &zmk_keymap[layer][position]; + struct device *behavior; + + LOG_DBG("layer: %d position: %d, binding name: %s", layer, position, log_strdup(binding->behavior_dev)); + + behavior = device_get_binding(binding->behavior_dev); + + if (!behavior) { + LOG_DBG("No behavior assigned to %d on layer %d", position, layer); + return 1; + } + + if (pressed) { + return behavior_keymap_binding_pressed(behavior, position, binding->param1, binding->param2); + } else { + return behavior_keymap_binding_released(behavior, position, binding->param1, binding->param2); + } +} + int zmk_keymap_position_state_changed(u32_t position, bool pressed) { for (int layer = ZMK_KEYMAP_LAYERS_LEN - 1; layer >= zmk_keymap_layer_default; layer--) { - if (is_active_position(position, layer)) + u32_t layer_state = pressed ? zmk_keymap_layer_state : zmk_keymap_active_behavior_layer[position]; + if (is_active_layer(layer, layer_state)) { - struct zmk_behavior_binding *binding = &zmk_keymap[layer][position]; - struct device *behavior; - int ret; - - LOG_DBG("layer: %d position: %d, binding name: %s", layer, position, log_strdup(binding->behavior_dev)); + int ret = zmk_keymap_apply_position_state(layer, position, pressed); - behavior = device_get_binding(binding->behavior_dev); - - if (!behavior) { - LOG_DBG("No behavior assigned to %d on layer %d", position, layer); - continue; - } - if (pressed) { - ret = behavior_keymap_binding_pressed(behavior, position, binding->param1, binding->param2); - } else { - ret = behavior_keymap_binding_released(behavior, position, binding->param1, binding->param2); - } - + zmk_keymap_active_behavior_layer[position] = zmk_keymap_layer_state; if (ret > 0) { LOG_DBG("behavior processing to continue to next layer"); continue; } else if (ret < 0) { LOG_DBG("Behavior returned error: %d", ret); - zmk_keymap_active_behavior_layer[position] = 0; return ret; } else { - zmk_keymap_active_behavior_layer[position] = pressed ? layer : 0; return ret; } } -- cgit v1.2.3 From 01db53b46a6eaf3126e0b44e2f3fc18fd4ae0114 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Tue, 1 Sep 2020 09:55:25 -0400 Subject: fix(kscan): Avoid sending duplicate kscan events. --- app/drivers/zephyr/kscan_gpio_direct.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/drivers/zephyr/kscan_gpio_direct.c b/app/drivers/zephyr/kscan_gpio_direct.c index 6e0beb0..a3aa8c4 100644 --- a/app/drivers/zephyr/kscan_gpio_direct.c +++ b/app/drivers/zephyr/kscan_gpio_direct.c @@ -156,7 +156,6 @@ static int kscan_gpio_read(struct device *dev) struct kscan_gpio_data *data = dev->driver_data; const struct kscan_gpio_config *cfg = dev->config_info; u32_t read_state = data->pin_state; - LOG_DBG("Scanning the pins for updated state"); for (int i = 0; i < cfg->num_of_inputs; i++) { struct device *in_dev = kscan_gpio_input_devices(dev)[i]; @@ -165,8 +164,9 @@ static int kscan_gpio_read(struct device *dev) } for (int i = 0; i < cfg->num_of_inputs; i++) { + bool prev_pressed = BIT(i) & data->pin_state; bool pressed = BIT(i) & read_state; - if (pressed != (BIT(i) & data->pin_state)) + if (pressed != prev_pressed) { LOG_DBG("Sending event at %d,%d state %s", 0, i, (pressed ? "on" : "off")); -- cgit v1.2.3 From ca0f2bb074a103b871a3e0f7f5e1fed8b6b4069b Mon Sep 17 00:00:00 2001 From: CrossR Date: Tue, 1 Sep 2020 18:32:45 +0100 Subject: Add to setup. --- app/boards/shields/sofle/sofle.dtsi | 14 ++++++-------- docs/static/setup.sh | 3 ++- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/app/boards/shields/sofle/sofle.dtsi b/app/boards/shields/sofle/sofle.dtsi index 9b3d3c0..653a772 100644 --- a/app/boards/shields/sofle/sofle.dtsi +++ b/app/boards/shields/sofle/sofle.dtsi @@ -47,19 +47,17 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) left_encoder: encoder_left { compatible = "alps,ec11"; label = "LEFT_ENCODER"; - a-gpios = <&pro_micro_a 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - b-gpios = <&pro_micro_a 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - resolution = <2>; - status = "disabled"; + a-gpios = <&pro_micro_a 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro_a 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + resolution = <4>; }; right_encoder: encoder_right { compatible = "alps,ec11"; label = "RIGHT_ENCODER"; - a-gpios = <&pro_micro_a 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - b-gpios = <&pro_micro_a 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; - resolution = <2>; - status = "disabled"; + a-gpios = <&pro_micro_a 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro_a 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + resolution = <4>; }; sensors { diff --git a/docs/static/setup.sh b/docs/static/setup.sh index 4dc740a..a32718d 100644 --- a/docs/static/setup.sh +++ b/docs/static/setup.sh @@ -38,7 +38,7 @@ echo "" echo "Keyboard Shield Selection:" prompt="Pick an keyboard:" -options=("Kyria" "Lily58" "Corne" "Splitreus62") +options=("Kyria" "Lily58" "Corne" "Splitreus62" "Sofle") PS3="$prompt " # TODO: Add support for "Other" and linking to docs on adding custom shields in user config repos. @@ -51,6 +51,7 @@ select opt in "${options[@]}" "Quit"; do 2 ) shield_title="Lily58" shield="lily58"; split="y"; break;; 3 ) shield_title="Corne" shield="corne"; split="y"; break;; 4 ) shield_title="Splitreus62" shield="splitreus62"; split="y"; break;; + 5 ) shield_title="Sofle" shield="sofle"; split="y"; break;; # Add link to docs on adding your own custom shield in your ZMK config! # $(( ${#options[@]}+1 )) ) echo "Other!"; break;; -- cgit v1.2.3 From c33931c72c179d19028b2d70ec043cbc3d786137 Mon Sep 17 00:00:00 2001 From: Okke Formsma Date: Tue, 1 Sep 2020 14:37:37 +0200 Subject: Initial implementation of hold-tap --- app/CMakeLists.txt | 4 +- app/dts/behaviors.dtsi | 2 + app/dts/behaviors/homerow_tap.dtsi | 12 + app/dts/behaviors/layer_tap.dtsi | 12 + app/dts/behaviors/mod_tap.dtsi | 5 +- .../bindings/behaviors/zmk,behavior-mod-tap.yaml | 8 - .../bindings/behaviors/zmk,behavior-tap-hold.yaml | 23 + app/include/zmk/event-manager.h | 4 + app/run-test-debug.sh | 44 ++ app/src/behaviors/behavior_hold_tap.c | 491 +++++++++++++++++++++ app/src/behaviors/behavior_mod_tap.c | 252 ----------- app/src/event_manager.c | 6 + app/tests/hold-tap/balanced/1/events.patterns | 4 + .../hold-tap/balanced/1/keycode_events.snapshot | 5 + app/tests/hold-tap/balanced/1/native_posix.keymap | 11 + app/tests/hold-tap/balanced/2/events.patterns | 4 + .../hold-tap/balanced/2/keycode_events.snapshot | 5 + app/tests/hold-tap/balanced/2/native_posix.keymap | 11 + app/tests/hold-tap/balanced/3a/events.patterns | 4 + .../hold-tap/balanced/3a/keycode_events.snapshot | 7 + app/tests/hold-tap/balanced/3a/native_posix.keymap | 13 + app/tests/hold-tap/balanced/3b/events.patterns | 4 + .../hold-tap/balanced/3b/keycode_events.snapshot | 7 + app/tests/hold-tap/balanced/3b/native_posix.keymap | 14 + app/tests/hold-tap/balanced/3c/events.patterns | 4 + .../hold-tap/balanced/3c/keycode_events.snapshot | 7 + app/tests/hold-tap/balanced/3c/native_posix.keymap | 13 + app/tests/hold-tap/balanced/3d/events.patterns | 4 + .../hold-tap/balanced/3d/keycode_events.snapshot | 7 + app/tests/hold-tap/balanced/3d/native_posix.keymap | 13 + .../hold-tap/balanced/4a-nested/events.patterns | 4 + .../balanced/4a-nested/keycode_events.snapshot | 10 + .../balanced/4a-nested/native_posix.keymap | 14 + app/tests/hold-tap/balanced/4a/events.patterns | 4 + .../hold-tap/balanced/4a/keycode_events.snapshot | 7 + app/tests/hold-tap/balanced/4a/native_posix.keymap | 14 + app/tests/hold-tap/balanced/4b/events.patterns | 4 + .../hold-tap/balanced/4b/keycode_events.snapshot | 7 + app/tests/hold-tap/balanced/4b/native_posix.keymap | 14 + app/tests/hold-tap/balanced/4c/events.patterns | 4 + .../hold-tap/balanced/4c/keycode_events.snapshot | 7 + app/tests/hold-tap/balanced/4c/native_posix.keymap | 14 + app/tests/hold-tap/balanced/4d/events.patterns | 4 + .../hold-tap/balanced/4d/keycode_events.snapshot | 7 + app/tests/hold-tap/balanced/4d/native_posix.keymap | 14 + app/tests/hold-tap/balanced/behavior_keymap.dtsi | 27 ++ .../hold-tap/hold-preferred/1/events.patterns | 4 + .../hold-preferred/1/keycode_events.snapshot | 5 + .../hold-tap/hold-preferred/1/native_posix.keymap | 11 + .../hold-tap/hold-preferred/2/events.patterns | 4 + .../hold-preferred/2/keycode_events.snapshot | 5 + .../hold-tap/hold-preferred/2/native_posix.keymap | 11 + .../hold-tap/hold-preferred/3a/events.patterns | 4 + .../hold-preferred/3a/keycode_events.snapshot | 7 + .../hold-tap/hold-preferred/3a/native_posix.keymap | 13 + .../hold-tap/hold-preferred/3b/events.patterns | 4 + .../hold-preferred/3b/keycode_events.snapshot | 7 + .../hold-tap/hold-preferred/3b/native_posix.keymap | 14 + .../hold-tap/hold-preferred/3c/events.patterns | 4 + .../hold-preferred/3c/keycode_events.snapshot | 7 + .../hold-tap/hold-preferred/3c/native_posix.keymap | 13 + .../hold-tap/hold-preferred/3d/events.patterns | 4 + .../hold-preferred/3d/keycode_events.snapshot | 7 + .../hold-tap/hold-preferred/3d/native_posix.keymap | 13 + .../hold-preferred/4a-nested/events.patterns | 4 + .../4a-nested/keycode_events.snapshot | 10 + .../hold-preferred/4a-nested/native_posix.keymap | 14 + .../hold-tap/hold-preferred/4a/events.patterns | 4 + .../hold-preferred/4a/keycode_events.snapshot | 7 + .../hold-tap/hold-preferred/4a/native_posix.keymap | 14 + .../hold-tap/hold-preferred/4b/events.patterns | 4 + .../hold-preferred/4b/keycode_events.snapshot | 7 + .../hold-tap/hold-preferred/4b/native_posix.keymap | 14 + .../hold-tap/hold-preferred/4c/events.patterns | 4 + .../hold-preferred/4c/keycode_events.snapshot | 7 + .../hold-tap/hold-preferred/4c/native_posix.keymap | 14 + .../hold-tap/hold-preferred/4d/events.patterns | 4 + .../hold-preferred/4d/keycode_events.snapshot | 7 + .../hold-tap/hold-preferred/4d/native_posix.keymap | 14 + .../hold-tap/hold-preferred/behavior_keymap.dtsi | 29 ++ app/tests/hold-tap/tap-preferred/1/events.patterns | 4 + .../tap-preferred/1/keycode_events.snapshot | 5 + .../hold-tap/tap-preferred/1/native_posix.keymap | 11 + app/tests/hold-tap/tap-preferred/2/events.patterns | 4 + .../tap-preferred/2/keycode_events.snapshot | 5 + .../hold-tap/tap-preferred/2/native_posix.keymap | 11 + .../hold-tap/tap-preferred/3a/events.patterns | 4 + .../tap-preferred/3a/keycode_events.snapshot | 7 + .../hold-tap/tap-preferred/3a/native_posix.keymap | 13 + .../hold-tap/tap-preferred/3b/events.patterns | 4 + .../tap-preferred/3b/keycode_events.snapshot | 7 + .../hold-tap/tap-preferred/3b/native_posix.keymap | 14 + .../hold-tap/tap-preferred/3c/events.patterns | 4 + .../tap-preferred/3c/keycode_events.snapshot | 7 + .../hold-tap/tap-preferred/3c/native_posix.keymap | 13 + .../hold-tap/tap-preferred/3d/events.patterns | 4 + .../tap-preferred/3d/keycode_events.snapshot | 7 + .../hold-tap/tap-preferred/3d/native_posix.keymap | 13 + .../tap-preferred/4a-nested/events.patterns | 4 + .../4a-nested/keycode_events.snapshot | 10 + .../tap-preferred/4a-nested/native_posix.keymap | 14 + .../hold-tap/tap-preferred/4a/events.patterns | 4 + .../tap-preferred/4a/keycode_events.snapshot | 7 + .../hold-tap/tap-preferred/4a/native_posix.keymap | 14 + .../hold-tap/tap-preferred/4b/events.patterns | 4 + .../tap-preferred/4b/keycode_events.snapshot | 7 + .../hold-tap/tap-preferred/4b/native_posix.keymap | 14 + .../hold-tap/tap-preferred/4c/events.patterns | 4 + .../tap-preferred/4c/keycode_events.snapshot | 7 + .../hold-tap/tap-preferred/4c/native_posix.keymap | 14 + .../hold-tap/tap-preferred/4d/events.patterns | 4 + .../tap-preferred/4d/keycode_events.snapshot | 7 + .../hold-tap/tap-preferred/4d/native_posix.keymap | 14 + .../hold-tap/tap-preferred/behavior_keymap.dtsi | 27 ++ app/tests/hold-tap/zmk-modtap-proposal.odg | Bin 0 -> 23148 bytes app/tests/hold-tap/zmk-modtap-proposal.pdf | Bin 0 -> 25493 bytes app/tests/tap-hold/balanced/behavior_keymap.dtsi | 27 ++ .../tap-hold/hold-preferred/behavior_keymap.dtsi | 29 ++ .../tap-hold/tap-preferred/behavior_keymap.dtsi | 27 ++ 119 files changed, 1561 insertions(+), 263 deletions(-) create mode 100644 app/dts/behaviors/homerow_tap.dtsi create mode 100644 app/dts/behaviors/layer_tap.dtsi delete mode 100644 app/dts/bindings/behaviors/zmk,behavior-mod-tap.yaml create mode 100644 app/dts/bindings/behaviors/zmk,behavior-tap-hold.yaml create mode 100755 app/run-test-debug.sh create mode 100644 app/src/behaviors/behavior_hold_tap.c delete mode 100644 app/src/behaviors/behavior_mod_tap.c create mode 100644 app/tests/hold-tap/balanced/1/events.patterns create mode 100644 app/tests/hold-tap/balanced/1/keycode_events.snapshot create mode 100644 app/tests/hold-tap/balanced/1/native_posix.keymap create mode 100644 app/tests/hold-tap/balanced/2/events.patterns create mode 100644 app/tests/hold-tap/balanced/2/keycode_events.snapshot create mode 100644 app/tests/hold-tap/balanced/2/native_posix.keymap create mode 100644 app/tests/hold-tap/balanced/3a/events.patterns create mode 100644 app/tests/hold-tap/balanced/3a/keycode_events.snapshot create mode 100644 app/tests/hold-tap/balanced/3a/native_posix.keymap create mode 100644 app/tests/hold-tap/balanced/3b/events.patterns create mode 100644 app/tests/hold-tap/balanced/3b/keycode_events.snapshot create mode 100644 app/tests/hold-tap/balanced/3b/native_posix.keymap create mode 100644 app/tests/hold-tap/balanced/3c/events.patterns create mode 100644 app/tests/hold-tap/balanced/3c/keycode_events.snapshot create mode 100644 app/tests/hold-tap/balanced/3c/native_posix.keymap create mode 100644 app/tests/hold-tap/balanced/3d/events.patterns create mode 100644 app/tests/hold-tap/balanced/3d/keycode_events.snapshot create mode 100644 app/tests/hold-tap/balanced/3d/native_posix.keymap create mode 100644 app/tests/hold-tap/balanced/4a-nested/events.patterns create mode 100644 app/tests/hold-tap/balanced/4a-nested/keycode_events.snapshot create mode 100644 app/tests/hold-tap/balanced/4a-nested/native_posix.keymap create mode 100644 app/tests/hold-tap/balanced/4a/events.patterns create mode 100644 app/tests/hold-tap/balanced/4a/keycode_events.snapshot create mode 100644 app/tests/hold-tap/balanced/4a/native_posix.keymap create mode 100644 app/tests/hold-tap/balanced/4b/events.patterns create mode 100644 app/tests/hold-tap/balanced/4b/keycode_events.snapshot create mode 100644 app/tests/hold-tap/balanced/4b/native_posix.keymap create mode 100644 app/tests/hold-tap/balanced/4c/events.patterns create mode 100644 app/tests/hold-tap/balanced/4c/keycode_events.snapshot create mode 100644 app/tests/hold-tap/balanced/4c/native_posix.keymap create mode 100644 app/tests/hold-tap/balanced/4d/events.patterns create mode 100644 app/tests/hold-tap/balanced/4d/keycode_events.snapshot create mode 100644 app/tests/hold-tap/balanced/4d/native_posix.keymap create mode 100644 app/tests/hold-tap/balanced/behavior_keymap.dtsi create mode 100644 app/tests/hold-tap/hold-preferred/1/events.patterns create mode 100644 app/tests/hold-tap/hold-preferred/1/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-preferred/1/native_posix.keymap create mode 100644 app/tests/hold-tap/hold-preferred/2/events.patterns create mode 100644 app/tests/hold-tap/hold-preferred/2/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-preferred/2/native_posix.keymap create mode 100644 app/tests/hold-tap/hold-preferred/3a/events.patterns create mode 100644 app/tests/hold-tap/hold-preferred/3a/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-preferred/3a/native_posix.keymap create mode 100644 app/tests/hold-tap/hold-preferred/3b/events.patterns create mode 100644 app/tests/hold-tap/hold-preferred/3b/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-preferred/3b/native_posix.keymap create mode 100644 app/tests/hold-tap/hold-preferred/3c/events.patterns create mode 100644 app/tests/hold-tap/hold-preferred/3c/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-preferred/3c/native_posix.keymap create mode 100644 app/tests/hold-tap/hold-preferred/3d/events.patterns create mode 100644 app/tests/hold-tap/hold-preferred/3d/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-preferred/3d/native_posix.keymap create mode 100644 app/tests/hold-tap/hold-preferred/4a-nested/events.patterns create mode 100644 app/tests/hold-tap/hold-preferred/4a-nested/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-preferred/4a-nested/native_posix.keymap create mode 100644 app/tests/hold-tap/hold-preferred/4a/events.patterns create mode 100644 app/tests/hold-tap/hold-preferred/4a/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-preferred/4a/native_posix.keymap create mode 100644 app/tests/hold-tap/hold-preferred/4b/events.patterns create mode 100644 app/tests/hold-tap/hold-preferred/4b/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-preferred/4b/native_posix.keymap create mode 100644 app/tests/hold-tap/hold-preferred/4c/events.patterns create mode 100644 app/tests/hold-tap/hold-preferred/4c/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-preferred/4c/native_posix.keymap create mode 100644 app/tests/hold-tap/hold-preferred/4d/events.patterns create mode 100644 app/tests/hold-tap/hold-preferred/4d/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-preferred/4d/native_posix.keymap create mode 100644 app/tests/hold-tap/hold-preferred/behavior_keymap.dtsi create mode 100644 app/tests/hold-tap/tap-preferred/1/events.patterns create mode 100644 app/tests/hold-tap/tap-preferred/1/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-preferred/1/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-preferred/2/events.patterns create mode 100644 app/tests/hold-tap/tap-preferred/2/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-preferred/2/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-preferred/3a/events.patterns create mode 100644 app/tests/hold-tap/tap-preferred/3a/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-preferred/3a/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-preferred/3b/events.patterns create mode 100644 app/tests/hold-tap/tap-preferred/3b/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-preferred/3b/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-preferred/3c/events.patterns create mode 100644 app/tests/hold-tap/tap-preferred/3c/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-preferred/3c/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-preferred/3d/events.patterns create mode 100644 app/tests/hold-tap/tap-preferred/3d/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-preferred/3d/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-preferred/4a-nested/events.patterns create mode 100644 app/tests/hold-tap/tap-preferred/4a-nested/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-preferred/4a-nested/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-preferred/4a/events.patterns create mode 100644 app/tests/hold-tap/tap-preferred/4a/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-preferred/4a/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-preferred/4b/events.patterns create mode 100644 app/tests/hold-tap/tap-preferred/4b/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-preferred/4b/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-preferred/4c/events.patterns create mode 100644 app/tests/hold-tap/tap-preferred/4c/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-preferred/4c/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-preferred/4d/events.patterns create mode 100644 app/tests/hold-tap/tap-preferred/4d/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-preferred/4d/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-preferred/behavior_keymap.dtsi create mode 100644 app/tests/hold-tap/zmk-modtap-proposal.odg create mode 100644 app/tests/hold-tap/zmk-modtap-proposal.pdf create mode 100644 app/tests/tap-hold/balanced/behavior_keymap.dtsi create mode 100644 app/tests/tap-hold/hold-preferred/behavior_keymap.dtsi create mode 100644 app/tests/tap-hold/tap-preferred/behavior_keymap.dtsi diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index db56c53..2e24fdc 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -25,7 +25,6 @@ zephyr_linker_sources(RODATA include/linker/zmk-events.ld) target_include_directories(app PRIVATE include) target_sources(app PRIVATE src/kscan.c) target_sources(app PRIVATE src/matrix_transform.c) -target_sources(app PRIVATE src/keymap.c) target_sources(app PRIVATE src/hid.c) target_sources(app PRIVATE src/sensors.c) target_sources_ifdef(CONFIG_ZMK_DISPLAY app PRIVATE src/display.c) @@ -36,12 +35,13 @@ target_sources(app PRIVATE src/events/modifiers_state_changed.c) target_sources(app PRIVATE src/events/sensor_event.c) target_sources(app PRIVATE src/behaviors/behavior_key_press.c) target_sources(app PRIVATE src/behaviors/behavior_reset.c) -target_sources(app PRIVATE src/behaviors/behavior_mod_tap.c) +target_sources(app PRIVATE src/behaviors/behavior_hold_tap.c) target_sources(app PRIVATE src/behaviors/behavior_momentary_layer.c) target_sources(app PRIVATE src/behaviors/behavior_toggle_layer.c) target_sources(app PRIVATE src/behaviors/behavior_transparent.c) target_sources(app PRIVATE src/behaviors/behavior_none.c) target_sources(app PRIVATE src/behaviors/behavior_sensor_rotate_key_press.c) +target_sources(app PRIVATE src/keymap.c) target_sources_ifdef(CONFIG_ZMK_RGB_UNDERGLOW app PRIVATE src/behaviors/behavior_rgb_underglow.c) target_sources_ifdef(CONFIG_ZMK_BLE app PRIVATE src/ble.c) target_sources_ifdef(CONFIG_ZMK_BLE app PRIVATE src/ble_unpair_combo.c) diff --git a/app/dts/behaviors.dtsi b/app/dts/behaviors.dtsi index 4cfb7a0..fdcf426 100644 --- a/app/dts/behaviors.dtsi +++ b/app/dts/behaviors.dtsi @@ -2,6 +2,8 @@ #include #include #include +#include +#include #include #include #include diff --git a/app/dts/behaviors/homerow_tap.dtsi b/app/dts/behaviors/homerow_tap.dtsi new file mode 100644 index 0000000..21c1531 --- /dev/null +++ b/app/dts/behaviors/homerow_tap.dtsi @@ -0,0 +1,12 @@ +/ { + behaviors { + ht: behavior_homerow_mod { + compatible = "zmk,behavior-hold-tap"; + label = "homerow_mod"; + #binding-cells = <2>; + flavor = "balanced"; + tapping_term_ms = <200>; + bindings = <&kp>, <&kp>; + }; + }; +}; diff --git a/app/dts/behaviors/layer_tap.dtsi b/app/dts/behaviors/layer_tap.dtsi new file mode 100644 index 0000000..af7319b --- /dev/null +++ b/app/dts/behaviors/layer_tap.dtsi @@ -0,0 +1,12 @@ +/ { + behaviors { + lt: behavior_layer_tap { + compatible = "zmk,behavior-hold-tap"; + label = "LAYER_TAP"; + #binding-cells = <2>; + flavor = "tap-preferred"; + tapping_term_ms = <200>; + bindings = <&mo>, <&kp>; + }; + }; +}; diff --git a/app/dts/behaviors/mod_tap.dtsi b/app/dts/behaviors/mod_tap.dtsi index 8e3b4e9..4ce732b 100644 --- a/app/dts/behaviors/mod_tap.dtsi +++ b/app/dts/behaviors/mod_tap.dtsi @@ -1,9 +1,12 @@ / { behaviors { mt: behavior_mod_tap { - compatible = "zmk,behavior-mod-tap"; + compatible = "zmk,behavior-hold-tap"; label = "MOD_TAP"; #binding-cells = <2>; + flavor = "hold-preferred"; + tapping_term_ms = <200>; + bindings = <&kp>, <&kp>; }; }; }; diff --git a/app/dts/bindings/behaviors/zmk,behavior-mod-tap.yaml b/app/dts/bindings/behaviors/zmk,behavior-mod-tap.yaml deleted file mode 100644 index 7911082..0000000 --- a/app/dts/bindings/behaviors/zmk,behavior-mod-tap.yaml +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright (c) 2020, Pete Johanson -# SPDX-License-Identifier: MIT - -description: Mod-Tap Beavhior - -compatible: "zmk,behavior-mod-tap" - -include: two_param.yaml diff --git a/app/dts/bindings/behaviors/zmk,behavior-tap-hold.yaml b/app/dts/bindings/behaviors/zmk,behavior-tap-hold.yaml new file mode 100644 index 0000000..a20578f --- /dev/null +++ b/app/dts/bindings/behaviors/zmk,behavior-tap-hold.yaml @@ -0,0 +1,23 @@ +# Copyright (c) 2020, Cody McGinnis; Okke Formsma +# SPDX-License-Identifier: MIT + +description: Hold or Tap behavior + +compatible: "zmk,behavior-hold-tap" + +include: two_param.yaml + +properties: + bindings: + type: phandles + required: true + tapping_term_ms: + type: int + flavor: + type: string + required: false + default: "hold-preferred" + enum: + - "hold-preferred" + - "balanced" + - "tap-preferred" \ No newline at end of file diff --git a/app/include/zmk/event-manager.h b/app/include/zmk/event-manager.h index 43d3f29..07c0aa9 100644 --- a/app/include/zmk/event-manager.h +++ b/app/include/zmk/event-manager.h @@ -78,6 +78,10 @@ struct zmk_event_subscription { #define ZMK_EVENT_RELEASE(ev) \ zmk_event_manager_release((struct zmk_event_header *)ev); +#define ZMK_EVENT_RELEASE_AGAIN(ev) \ + zmk_event_manager_release_again((struct zmk_event_header *)ev); + int zmk_event_manager_raise(struct zmk_event_header *event); int zmk_event_manager_raise_after(struct zmk_event_header *event, const struct zmk_listener *listener); int zmk_event_manager_release(struct zmk_event_header *event); +int zmk_event_manager_release_again(struct zmk_event_header *event); diff --git a/app/run-test-debug.sh b/app/run-test-debug.sh new file mode 100755 index 0000000..f6696a1 --- /dev/null +++ b/app/run-test-debug.sh @@ -0,0 +1,44 @@ +#!/bin/sh +# +# Copyright (c) 2020 Peter Johanson; Cody McGinnis; Okke Formsma +# +# SPDX-License-Identifier: MIT +# +set -e +set -x + +if [ -z "$1" ]; then + echo "Usage: ./run-test.sh " + exit 1 +elif [ "$1" = "all" ]; then + echo "" > ./build/tests/pass-fail.log + find tests -name native_posix.keymap -exec dirname \{\} \; | xargs -l -P 4 ./run-test.sh + err=$? + sort -k2 ./build/tests/pass-fail.log + exit $err +fi + +testcase="$1" +echo "Running $testcase:" + +west build -d build/$testcase -b native_posix --pristine -- -DZMK_CONFIG=$testcase +if [ $? -gt 0 ]; then + echo "FAIL: $testcase did not build" +else + ./build/$testcase/zephyr/zmk.exe | sed -e "s/.*> //" | tee build/$testcase/keycode_events_full.log | sed -n -f $testcase/events.patterns > build/$testcase/keycode_events.log + cat build/$testcase/keycode_events_full.log + cat build/$testcase/keycode_events.log + diff -au $testcase/keycode_events.snapshot build/$testcase/keycode_events.log + if [ $? -gt 0 ]; then + if [ -f $testcase/pending ]; then + echo "PEND: $testcase" + exit 0 + else + echo "FAIL: $testcase" + exit 1 + fi + else + echo "PASS: $testcase" + exit 0 + fi +fi \ No newline at end of file diff --git a/app/src/behaviors/behavior_hold_tap.c b/app/src/behaviors/behavior_hold_tap.c new file mode 100644 index 0000000..08fa139 --- /dev/null +++ b/app/src/behaviors/behavior_hold_tap.c @@ -0,0 +1,491 @@ +/* + * Copyright (c) 2020 Cody McGinnis, Okke Formsma + * + * SPDX-License-Identifier: MIT + */ + +#define DT_DRV_COMPAT zmk_behavior_hold_tap + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#if DT_NODE_EXISTS(DT_DRV_INST(0)) + +/************************************************************ DATA SETUP */ +#define ZMK_BHV_HOLD_TAP_MAX_HELD 10 +#define ZMK_BHV_HOLD_TAP_MAX_CAPTURED_EVENTS 40 + +// increase if you have keyboard with more keys. +#define ZMK_BHV_HOLD_TAP_POSITION_NOT_USED 9999 + +struct behavior_hold_tap_behaviors { + struct zmk_behavior_binding tap; + struct zmk_behavior_binding hold; +}; + +typedef k_timeout_t (*timer_func)(); + +struct behavior_hold_tap_config { + timer_func tapping_term_ms; + struct behavior_hold_tap_behaviors *behaviors; + char *flavor; +}; + +// this data is specific for each hold-tap +struct active_hold_tap { + s32_t position; + u32_t param_hold; + u32_t param_tap; + bool is_decided; + bool is_hold; + const struct behavior_hold_tap_config *config; + struct k_delayed_work work; + bool work_is_cancelled; +}; + +// The undecided hold tap is the hold tap that needs to be decided before +// other keypress events can be released. While the undecided_hold_tap is +// not NULL, most events are captured in captured_events. +// After the hold_tap is decided, it will stay in the active_hold_taps until +// its key-up has been processed and the delayed work is cleaned up. +struct active_hold_tap *undecided_hold_tap = NULL; +struct active_hold_tap active_hold_taps[ZMK_BHV_HOLD_TAP_MAX_HELD] = {}; +// We capture most position_state_changed events and some modifiers_state_changed events. +const struct zmk_event_header *captured_events[ZMK_BHV_HOLD_TAP_MAX_CAPTURED_EVENTS] = {}; + +/************************************************************ CAPTURED POSITION HELPER FUNCTIONS */ +static int capture_event(const struct zmk_event_header *event) +{ + for (int i = 0; i < ZMK_BHV_HOLD_TAP_MAX_CAPTURED_EVENTS; i++) { + if (captured_events[i] == NULL) { + captured_events[i] = event; + return 0; + } + } + return -ENOMEM; +} + +static struct position_state_changed *find_captured_keydown_event(u32_t position) +{ + struct position_state_changed *last_match = NULL; + for (int i = 0; i < ZMK_BHV_HOLD_TAP_MAX_CAPTURED_EVENTS; i++) { + const struct zmk_event_header *eh = captured_events[i]; + if (eh == NULL) { + return last_match; + } + if (!is_position_state_changed(eh)) { + continue; + } + struct position_state_changed *position_event = cast_position_state_changed(eh); + if (position_event->position == position && position_event->state) { + last_match = position_event; + } + } + return last_match; +} + +static void release_captured_events() +{ + if (undecided_hold_tap != NULL) { + return; + } + + // We use a trick to prevent copying the captured_events array. + // + // Events for different mod-tap instances are separated by a NULL pointer. + // + // The first event popped will never be catched by the next active hold-tap + // because to start capturing a mod-tap-key-down event must first completely + // go through the events queue. + // + // Example of this release process; + // [mt2_down, k1_down, k1_up, mt2_up, null, ...] + // ^ + // mt2_down position event isn't captured because no hold-tap is active. + // mt2_down behavior event is handled, now we have an undecided hold-tap + // [null, k1_down, k1_up, mt2_up, null, ...] + // ^ + // k1_down is captured by the mt2 mod-tap + // !note that searches for find_captured_keydown_event by the mt2 behavior will stop at the first null encountered + // [mt1_down, null, k1_up, mt2_up, null, ...] + // ^ + // k1_up event is captured by the new hold-tap: + // [k1_down, k1_up, null, mt2_up, null, ...] + // ^ + // mt2_up event is not captured but causes release of mt2 behavior + // [k1_down, k1_up, null, null, null, ...] + // now mt2 will start releasing it's own captured positions. + for (int i = 0; i < ZMK_BHV_HOLD_TAP_MAX_CAPTURED_EVENTS; i++) { + const struct zmk_event_header *captured_event = captured_events[i]; + if (captured_event == NULL) { + return; + } + captured_events[i] = NULL; + if (undecided_hold_tap != NULL) { + k_msleep(10); + } + if (is_position_state_changed(captured_event)) { + struct position_state_changed *position_event = cast_position_state_changed(captured_event); + LOG_DBG("Releasing key position event for position %d %s", position_event->position, (position_event->state ? "pressed" : "released")); + } else { + struct keycode_state_changed *modifier_event = cast_keycode_state_changed(captured_event); + LOG_DBG("Releasing mods changed event 0x%02X %s", modifier_event->keycode, (modifier_event->state ? "pressed" : "released")); + } + ZMK_EVENT_RELEASE_AGAIN(captured_event); + } +} + + +/************************************************************ ACTIVE TAP HOLD HELPER FUNCTIONS */ + +static struct active_hold_tap *find_hold_tap(u32_t position) +{ + for (int i = 0; i < ZMK_BHV_HOLD_TAP_MAX_HELD; i++) { + if (active_hold_taps[i].position == position) { + return &active_hold_taps[i]; + } + } + return NULL; +} + +static struct active_hold_tap *store_hold_tap(u32_t position, u32_t param_hold, u32_t param_tap, const struct behavior_hold_tap_config *config) +{ + for (int i = 0; i < ZMK_BHV_HOLD_TAP_MAX_HELD; i++) { + if (active_hold_taps[i].position != ZMK_BHV_HOLD_TAP_POSITION_NOT_USED) { + continue; + } + active_hold_taps[i].position = position; + active_hold_taps[i].is_decided = false; + active_hold_taps[i].is_hold = false; + active_hold_taps[i].config = config; + active_hold_taps[i].param_hold = param_hold; + active_hold_taps[i].param_tap = param_tap; + return &active_hold_taps[i]; + } + return NULL; +} + +static void clear_hold_tap(struct active_hold_tap *hold_tap) +{ + hold_tap->position = ZMK_BHV_HOLD_TAP_POSITION_NOT_USED; + hold_tap->is_decided = false; + hold_tap->is_hold = false; + hold_tap->work_is_cancelled = false; +} + +enum decision_moment { + HT_KEY_UP = 0, + HT_OTHER_KEY_DOWN = 1, + HT_OTHER_KEY_UP = 2, + HT_TIMER_EVENT = 3, +}; + +static void decide_balanced(struct active_hold_tap *hold_tap, enum decision_moment event) +{ + switch (event) { + case HT_KEY_UP: + hold_tap->is_hold = 0; + hold_tap->is_decided = true; + break; + case HT_OTHER_KEY_UP: + hold_tap->is_hold = 1; + hold_tap->is_decided = true; + break; + case HT_TIMER_EVENT: + hold_tap->is_hold = 1; + hold_tap->is_decided = true; + break; + default: return; + } +} + +static void decide_tap_preferred(struct active_hold_tap *hold_tap, enum decision_moment event) +{ + switch (event) { + case HT_KEY_UP: + hold_tap->is_hold = 0; + hold_tap->is_decided = true; + break; + case HT_TIMER_EVENT: + hold_tap->is_hold = 1; + hold_tap->is_decided = true; + break; + default: return; + } +} + +static void decide_hold_preferred(struct active_hold_tap *hold_tap, enum decision_moment event) +{ + switch (event) { + case HT_KEY_UP: + hold_tap->is_hold = 0; + hold_tap->is_decided = true; + break; + case HT_OTHER_KEY_DOWN: + hold_tap->is_hold = 1; + hold_tap->is_decided = true; + break; + case HT_TIMER_EVENT: + hold_tap->is_hold = 1; + hold_tap->is_decided = true; + break; + default: return; + } +} + +static void decide_hold_tap(struct active_hold_tap *hold_tap, enum decision_moment event) +{ + if (hold_tap->is_decided) { + return; + } + + if (hold_tap != undecided_hold_tap) { + LOG_DBG("ERROR found undecided tap hold that is not the active tap hold"); + return; + } + + char *flavor = hold_tap->config->flavor; + if (strcmp(flavor, "balanced") == 0) { + decide_balanced(hold_tap, event); + } else if (strcmp(flavor, "tap-preferred") == 0) { + decide_tap_preferred(hold_tap, event); + } else if (strcmp(flavor, "hold-preferred") == 0) { + decide_hold_preferred(hold_tap, event); + } + + if (!hold_tap->is_decided) { + return; + } + + LOG_DBG("%d decided %s (%s event %d)", hold_tap->position, hold_tap->is_hold ? "hold" : "tap", flavor, event); + undecided_hold_tap = NULL; + + struct zmk_behavior_binding *behavior; + if (hold_tap->is_hold) { + behavior = &hold_tap->config->behaviors->hold; + struct device *behavior_device = device_get_binding(behavior->behavior_dev); + behavior_keymap_binding_pressed(behavior_device, hold_tap->position, hold_tap->param_hold, 0); + } else { + behavior = &hold_tap->config->behaviors->tap; + struct device *behavior_device = device_get_binding(behavior->behavior_dev); + behavior_keymap_binding_pressed(behavior_device, hold_tap->position, hold_tap->param_tap, 0); + } + release_captured_events(); +} + +/************************************************************ hold_tap_binding and key handlers */ +static int on_hold_tap_binding_pressed(struct device *dev, u32_t position, u32_t param_hold, u32_t param_tap) +{ + const struct behavior_hold_tap_config *cfg = dev->config_info; + + if (undecided_hold_tap != NULL) { + LOG_DBG("ERROR another hold-tap behavior is undecided."); + // if this happens, make sure the behavior events occur AFTER other position events. + return 0; + } + + struct active_hold_tap *hold_tap = store_hold_tap(position, param_hold, param_tap, cfg); + if (hold_tap == NULL) { + LOG_ERR("unable to store hold-tap info, did you press more than %d hold-taps?", ZMK_BHV_HOLD_TAP_MAX_HELD); + return 0; + } + + LOG_DBG("%d new undecided hold_tap", position); + undecided_hold_tap = hold_tap; + k_delayed_work_submit(&hold_tap->work, cfg->tapping_term_ms()); + + // todo: once we get timing info for keypresses, start the timer relative to the original keypress + // don't forget to simulate a timer-event before the event after that time was handled. + + return 0; +} + +static int on_hold_tap_binding_released(struct device *dev, u32_t position, u32_t _, u32_t __) +{ + struct active_hold_tap *hold_tap = find_hold_tap(position); + + if (hold_tap == NULL) { + LOG_ERR("ACTIVE_HOLD_TAP_CLEANED_UP_TOO_EARLY"); + return 0; + } + + int work_cancel_result = k_delayed_work_cancel(&hold_tap->work); + decide_hold_tap(hold_tap, HT_KEY_UP); + + struct zmk_behavior_binding *behavior; + if (hold_tap->is_hold) { + behavior = &hold_tap->config->behaviors->hold; + struct device *behavior_device = device_get_binding(behavior->behavior_dev); + behavior_keymap_binding_released(behavior_device, hold_tap->position, hold_tap->param_hold, 0); + } else { + behavior = &hold_tap->config->behaviors->tap; + struct device *behavior_device = device_get_binding(behavior->behavior_dev); + behavior_keymap_binding_released(behavior_device, hold_tap->position, hold_tap->param_tap, 0); + } + + + if (work_cancel_result == -EINPROGRESS) { + // let the timer handler clean up + // if we'd clear now, the timer may call back for an uninitialized active_hold_tap. + LOG_DBG("%d hold-tap timer work in event queue", position); + hold_tap->work_is_cancelled = true; + } else { + LOG_DBG("%d cleaning up hold-tap", position); + clear_hold_tap(hold_tap); + } + + return 0; +} + +static const struct behavior_driver_api behavior_hold_tap_driver_api = { + .binding_pressed = on_hold_tap_binding_pressed, + .binding_released = on_hold_tap_binding_released, +}; + + +static int position_state_changed_listener(const struct zmk_event_header *eh) +{ + struct position_state_changed *ev = cast_position_state_changed(eh); + + if (undecided_hold_tap == NULL) { + LOG_DBG("%d bubble (no undecided hold_tap active)", ev->position); + return 0; + } + + if (undecided_hold_tap->position == ev->position) { + if (ev->state) { // keydown + LOG_ERR("hold-tap listener should be called before before most other listeners!"); + return 0; + } else { // keyup + LOG_DBG("%d bubble undecided hold-tap keyrelease event", undecided_hold_tap->position); + return 0; + } + } + + if (!ev->state && find_captured_keydown_event(ev->position) == NULL) { + // no keydown event has been captured, let it bubble. + // we'll catch modifiers later in modifier_state_changed_listener + LOG_DBG("%d bubbling %d %s event", undecided_hold_tap->position, ev->position, ev->state ? "down" : "up"); + return 0; + } + + LOG_DBG("%d capturing %d %s event", undecided_hold_tap->position, ev->position, ev->state ? "down" : "up"); + capture_event(eh); + decide_hold_tap(undecided_hold_tap, ev->state ? HT_OTHER_KEY_DOWN : HT_OTHER_KEY_UP); + return ZMK_EV_EVENT_CAPTURED; +} + +static bool is_mod(struct keycode_state_changed *ev) +{ + return ev->usage_page == USAGE_KEYPAD && ev->keycode >= LCTL && ev->keycode <= RGUI; +} + +static int keycode_state_changed_listener(const struct zmk_event_header *eh) +{ + // we want to catch layer-up events too... how? + struct keycode_state_changed *ev = cast_keycode_state_changed(eh); + + if (undecided_hold_tap == NULL) { + // LOG_DBG("0x%02X bubble (no undecided hold_tap active)", ev->keycode); + return 0; + } + + if (!is_mod(ev)) { + // LOG_DBG("0x%02X bubble (not a mod)", ev->keycode); + return 0; + } + + // only key-up events will bubble through position_state_changed_listener + // if a undecided_hold_tap is active. + LOG_DBG("%d capturing 0x%02X %s event", undecided_hold_tap->position, ev->keycode, ev->state ? "down" : "up"); + capture_event(eh); + return ZMK_EV_EVENT_CAPTURED; +} + + +int behavior_hold_tap_listener(const struct zmk_event_header *eh) +{ + if (is_position_state_changed(eh)) { + return position_state_changed_listener(eh); + } else if (is_keycode_state_changed(eh)) { + return keycode_state_changed_listener(eh); + } + return 0; +} + +ZMK_LISTENER(behavior_hold_tap, behavior_hold_tap_listener); +ZMK_SUBSCRIPTION(behavior_hold_tap, position_state_changed); +// this should be modifiers_state_changed, but unfrotunately that's not implemented yet. +ZMK_SUBSCRIPTION(behavior_hold_tap, keycode_state_changed); + +/************************************************************ TIMER FUNCTIONS */ +void behavior_hold_tap_timer_work_handler(struct k_work *item) +{ + struct active_hold_tap *hold_tap = CONTAINER_OF(item, struct active_hold_tap, work); + + if (hold_tap->work_is_cancelled) { + clear_hold_tap(hold_tap); + } else { + decide_hold_tap(hold_tap, HT_TIMER_EVENT); + } +} + +static int behavior_hold_tap_init(struct device *dev) +{ + static bool init_first_run = true; + + if (init_first_run) { + for (int i = 0; i < ZMK_BHV_HOLD_TAP_MAX_HELD; i++) { + k_delayed_work_init(&active_hold_taps[i].work, behavior_hold_tap_timer_work_handler); + active_hold_taps[i].position = ZMK_BHV_HOLD_TAP_POSITION_NOT_USED; + } + } + init_first_run = false; + return 0; +} + +struct behavior_hold_tap_data {}; +static struct behavior_hold_tap_data behavior_hold_tap_data; + +/************************************************************ NODE CONFIG */ +#define _TRANSFORM_ENTRY(idx, node) \ + { \ + .behavior_dev = DT_LABEL(DT_INST_PHANDLE_BY_IDX(node, bindings, idx)), \ + .param1 = COND_CODE_0(DT_INST_PHA_HAS_CELL_AT_IDX(node, bindings, idx, param1), (0), (DT_INST_PHA_BY_IDX(node, bindings, idx, param1))), \ + .param2 = COND_CODE_0(DT_INST_PHA_HAS_CELL_AT_IDX(node, bindings, idx, param2), (0), (DT_INST_PHA_BY_IDX(node, bindings, idx, param2))), \ + }, + +#define KP_INST(n) \ + static k_timeout_t behavior_hold_tap_config_##n##_gettime() { return K_MSEC(DT_INST_PROP(n, tapping_term_ms)); } \ + static struct behavior_hold_tap_behaviors behavior_hold_tap_behaviors_##n = { \ + .hold = _TRANSFORM_ENTRY(0, n) \ + .tap = _TRANSFORM_ENTRY(1, n) \ + }; \ + static struct behavior_hold_tap_config behavior_hold_tap_config_##n = { \ + .behaviors = &behavior_hold_tap_behaviors_##n, \ + .tapping_term_ms = &behavior_hold_tap_config_##n##_gettime, \ + .flavor = DT_INST_PROP(n, flavor), \ + }; \ + DEVICE_AND_API_INIT( \ + behavior_hold_tap_##n, DT_INST_LABEL(n), behavior_hold_tap_init, \ + &behavior_hold_tap_data, \ + &behavior_hold_tap_config_##n, \ + APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ + &behavior_hold_tap_driver_api); + +DT_INST_FOREACH_STATUS_OKAY(KP_INST) + + +#endif \ No newline at end of file diff --git a/app/src/behaviors/behavior_mod_tap.c b/app/src/behaviors/behavior_mod_tap.c deleted file mode 100644 index 5a2f60e..0000000 --- a/app/src/behaviors/behavior_mod_tap.c +++ /dev/null @@ -1,252 +0,0 @@ -/* - * Copyright (c) 2020 Peter Johanson - * - * SPDX-License-Identifier: MIT - */ - -#define DT_DRV_COMPAT zmk_behavior_mod_tap - -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); - -#define ZMK_BHV_MOD_TAP_MAX_HELD 4 -#define ZMK_BHV_MOD_TAP_MAX_PENDING_KC 4 - -struct active_mod_tap_item { - u32_t keycode; - u8_t mods; - bool pending; - zmk_mod_flags active_mods; -}; - -struct captured_keycode_state_change_item { - struct keycode_state_changed* event; - zmk_mod_flags active_mods; -}; - -struct behavior_mod_tap_config { }; -struct behavior_mod_tap_data { - struct active_mod_tap_item active_mod_taps[ZMK_BHV_MOD_TAP_MAX_HELD]; - struct captured_keycode_state_change_item captured_keycode_events[ZMK_BHV_MOD_TAP_MAX_PENDING_KC]; -}; - -bool have_pending_mods(char *label) { - struct device *dev = device_get_binding(label); - struct behavior_mod_tap_data *data = dev->driver_data; - - for (int i = 0; i < ZMK_BHV_MOD_TAP_MAX_HELD; i++) { - if (data->active_mod_taps[i].mods) { - LOG_DBG("Found pending mods for %d and keycode 0x%02X", data->active_mod_taps[i].mods, data->active_mod_taps[i].keycode); - return true; - } - } - - return false; -} - -struct captured_keycode_state_change_item* find_pending_keycode(struct behavior_mod_tap_data *data, u32_t keycode) -{ - for (int i = 0; i < ZMK_BHV_MOD_TAP_MAX_PENDING_KC; i++) { - if (data->captured_keycode_events[i].event == NULL) { - continue; - } - - if (data->captured_keycode_events[i].event->keycode == keycode) { - return &data->captured_keycode_events[i]; - } - } - - return NULL; -} - -zmk_mod_flags behavior_mod_tap_active_mods(struct behavior_mod_tap_data *data) -{ - zmk_mod_flags mods = 0; - - for (int i = 0; i < ZMK_BHV_MOD_TAP_MAX_HELD; i++) { - mods |= data->active_mod_taps[i].mods; - } - - return mods; -} - -int behavior_mod_tap_capture_keycode_event(struct behavior_mod_tap_data *data, struct keycode_state_changed *ev) -{ - for (int i = 0; i < ZMK_BHV_MOD_TAP_MAX_PENDING_KC; i++) { - if (data->captured_keycode_events[i].event != NULL) { - continue; - } - - data->captured_keycode_events[i].event = ev; - data->captured_keycode_events[i].active_mods = behavior_mod_tap_active_mods(data); - return 0; - } - - return -ENOMEM; -} - -void behavior_mod_tap_update_active_mods_state(struct behavior_mod_tap_data *data, zmk_mod_flags used_flags) -{ - for (int i = 0; i < ZMK_BHV_MOD_TAP_MAX_HELD; i++) { - if ((data->active_mod_taps[i].mods & used_flags) == data->active_mod_taps[i].mods) { - data->active_mod_taps[i].pending = false; - } - } -} - -// How to pass context to subscription?! -int behavior_mod_tap_listener(const struct zmk_event_header *eh) -{ - if (is_keycode_state_changed(eh) && have_pending_mods(DT_INST_LABEL(0))) { - struct device *dev = device_get_binding(DT_INST_LABEL(0)); - struct keycode_state_changed *ev = cast_keycode_state_changed(eh); - struct behavior_mod_tap_data *data = dev->driver_data; - struct captured_keycode_state_change_item* pending_keycode; - if (ev->state) { - LOG_DBG("Have pending mods, capturing keycode 0x%02X event to ressend later", ev->keycode); - behavior_mod_tap_capture_keycode_event(data, ev); - return ZMK_EV_EVENT_CAPTURED; - } else if ((pending_keycode = find_pending_keycode(data, ev->keycode)) != NULL) { - LOG_DBG("Key released, going to activate mods 0x%02X then send pending key press for keycode 0x%02X", - pending_keycode->active_mods, pending_keycode->event->keycode); - - zmk_hid_register_mods(pending_keycode->active_mods); - behavior_mod_tap_update_active_mods_state(data, pending_keycode->active_mods); - - ZMK_EVENT_RELEASE(pending_keycode->event); - k_msleep(10); - - pending_keycode->event = NULL; - pending_keycode->active_mods = 0; - } - } - return 0; -} - -ZMK_LISTENER(behavior_mod_tap, behavior_mod_tap_listener); -ZMK_SUBSCRIPTION(behavior_mod_tap, keycode_state_changed); - -static int behavior_mod_tap_init(struct device *dev) -{ - return 0; -}; - - -static int on_keymap_binding_pressed(struct device *dev, u32_t position, u32_t mods, u32_t keycode) -{ - struct behavior_mod_tap_data *data = dev->driver_data; - LOG_DBG("mods: %d, keycode: 0x%02X", mods, keycode); - for (int i = 0; i < ZMK_BHV_MOD_TAP_MAX_HELD; i++) { - if (data->active_mod_taps[i].mods != 0) { - continue; - } - - zmk_mod_flags active_mods = behavior_mod_tap_active_mods(data); - - data->active_mod_taps[i].active_mods = active_mods; - data->active_mod_taps[i].mods = mods; - data->active_mod_taps[i].keycode = keycode; - data->active_mod_taps[i].pending = true; - - return 0; - } - - LOG_WRN("Failed to record mod-tap activation, at maximum concurrent mod-tap activations"); - - return -ENOMEM; -} - -static int on_keymap_binding_released(struct device *dev, u32_t position, u32_t mods, u32_t keycode) -{ - struct behavior_mod_tap_data *data = dev->driver_data; - LOG_DBG("mods: %d, keycode: %d", mods, keycode); - - for (int i = 0; i < ZMK_BHV_MOD_TAP_MAX_HELD; i++) { - struct active_mod_tap_item *item = &data->active_mod_taps[i]; - if (item->mods == mods && item->keycode == keycode) { - if (item->pending) { - LOG_DBG("Sending un-triggered mod-tap for keycode: 0x%02X", keycode); - - if (item->active_mods) { - LOG_DBG("Registering recorded active mods captured when mod-tap initially activated: 0x%02X", item->active_mods); - behavior_mod_tap_update_active_mods_state(data, item->active_mods); - zmk_hid_register_mods(item->active_mods); - } - - struct keycode_state_changed *key_press = create_keycode_state_changed(USAGE_KEYPAD, item->keycode, true); - ZMK_EVENT_RAISE_AFTER(key_press, behavior_mod_tap); - k_msleep(10); - - for (int j = 0; j < ZMK_BHV_MOD_TAP_MAX_PENDING_KC; j++) { - if (data->captured_keycode_events[j].event == NULL) { - continue; - } - - struct keycode_state_changed *ev = data->captured_keycode_events[j].event; - data->captured_keycode_events[j].event = NULL; - data->captured_keycode_events[j].active_mods = 0; - LOG_DBG("Re-sending latched key press for usage page 0x%02X keycode 0x%02X state %s", ev->usage_page, ev->keycode, (ev->state ? "pressed" : "released")); - ZMK_EVENT_RELEASE(ev); - k_msleep(10); - } - - struct keycode_state_changed *key_release = create_keycode_state_changed(USAGE_KEYPAD, keycode, false); - LOG_DBG("Sending un-triggered mod-tap release for keycode: 0x%02X", keycode); - ZMK_EVENT_RAISE_AFTER(key_release, behavior_mod_tap); - k_msleep(10); - - if (item->active_mods) { - LOG_DBG("Unregistering recorded active mods captured when mod-tap initially activated: 0x%02X", item->active_mods); - zmk_hid_unregister_mods(item->active_mods); - zmk_endpoints_send_report(USAGE_KEYPAD); - } - - - } else { - LOG_DBG("Releasing triggered mods: %d", mods); - zmk_hid_unregister_mods(mods); - zmk_endpoints_send_report(USAGE_KEYPAD); - } - - item->mods = 0; - item->keycode = 0; - item->active_mods = 0; - - LOG_DBG("Removing mods %d from active_mods for other held mod-taps", mods); - for (int j = 0; j < ZMK_BHV_MOD_TAP_MAX_HELD; j++) { - if (data->active_mod_taps[j].active_mods & mods) { - LOG_DBG("Removing 0x%02X from active mod tap mods 0x%02X keycode 0x%02X", mods, data->active_mod_taps[j].mods, data->active_mod_taps[j].keycode); - data->active_mod_taps[j].active_mods &= ~mods; - } - } - break; - } - } - - return 0; -} - -static const struct behavior_driver_api behavior_mod_tap_driver_api = { - .binding_pressed = on_keymap_binding_pressed, - .binding_released = on_keymap_binding_released, -}; - -static const struct behavior_mod_tap_config behavior_mod_tap_config = {}; - -static struct behavior_mod_tap_data behavior_mod_tap_data; - -DEVICE_AND_API_INIT(behavior_mod_tap, DT_INST_LABEL(0), behavior_mod_tap_init, - &behavior_mod_tap_data, - &behavior_mod_tap_config, - APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, - &behavior_mod_tap_driver_api); diff --git a/app/src/event_manager.c b/app/src/event_manager.c index c405176..2f423fc 100644 --- a/app/src/event_manager.c +++ b/app/src/event_manager.c @@ -74,4 +74,10 @@ int zmk_event_manager_raise_after(struct zmk_event_header *event, const struct z int zmk_event_manager_release(struct zmk_event_header *event) { return zmk_event_manager_handle_from(event, event->last_listener_index + 1); +} + + +int zmk_event_manager_release_again(struct zmk_event_header *event) +{ + return zmk_event_manager_handle_from(event, event->last_listener_index); } \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/1/events.patterns b/app/tests/hold-tap/balanced/1/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/balanced/1/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/1/keycode_events.snapshot b/app/tests/hold-tap/balanced/1/keycode_events.snapshot new file mode 100644 index 0000000..5f6a266 --- /dev/null +++ b/app/tests/hold-tap/balanced/1/keycode_events.snapshot @@ -0,0 +1,5 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (balanced event 0) +kp_pressed: usage_page 0x07 keycode 0x09 +kp_released: usage_page 0x07 keycode 0x09 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/1/native_posix.keymap b/app/tests/hold-tap/balanced/1/native_posix.keymap new file mode 100644 index 0000000..10336ef --- /dev/null +++ b/app/tests/hold-tap/balanced/1/native_posix.keymap @@ -0,0 +1,11 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/2/events.patterns b/app/tests/hold-tap/balanced/2/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/balanced/2/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/2/keycode_events.snapshot b/app/tests/hold-tap/balanced/2/keycode_events.snapshot new file mode 100644 index 0000000..ddda1ae --- /dev/null +++ b/app/tests/hold-tap/balanced/2/keycode_events.snapshot @@ -0,0 +1,5 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (balanced event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_released: usage_page 0x07 keycode 0xe1 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/2/native_posix.keymap b/app/tests/hold-tap/balanced/2/native_posix.keymap new file mode 100644 index 0000000..aa93b86 --- /dev/null +++ b/app/tests/hold-tap/balanced/2/native_posix.keymap @@ -0,0 +1,11 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,500) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/3a/events.patterns b/app/tests/hold-tap/balanced/3a/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/balanced/3a/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/3a/keycode_events.snapshot b/app/tests/hold-tap/balanced/3a/keycode_events.snapshot new file mode 100644 index 0000000..a435103 --- /dev/null +++ b/app/tests/hold-tap/balanced/3a/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0xe4 +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (balanced event 0) +kp_pressed: usage_page 0x07 keycode 0x09 +kp_released: usage_page 0x07 keycode 0xe4 +kp_released: usage_page 0x07 keycode 0x09 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/3a/native_posix.keymap b/app/tests/hold-tap/balanced/3a/native_posix.keymap new file mode 100644 index 0000000..6f08689 --- /dev/null +++ b/app/tests/hold-tap/balanced/3a/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ + ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/3b/events.patterns b/app/tests/hold-tap/balanced/3b/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/balanced/3b/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/3b/keycode_events.snapshot b/app/tests/hold-tap/balanced/3b/keycode_events.snapshot new file mode 100644 index 0000000..c0da94f --- /dev/null +++ b/app/tests/hold-tap/balanced/3b/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0xe4 +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (balanced event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_released: usage_page 0x07 keycode 0xe4 +kp_released: usage_page 0x07 keycode 0xe1 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/3b/native_posix.keymap b/app/tests/hold-tap/balanced/3b/native_posix.keymap new file mode 100644 index 0000000..392d328 --- /dev/null +++ b/app/tests/hold-tap/balanced/3b/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ + ZMK_MOCK_PRESS(0,0,50) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,1,300) + /*timer*/ + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/3c/events.patterns b/app/tests/hold-tap/balanced/3c/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/balanced/3c/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/3c/keycode_events.snapshot b/app/tests/hold-tap/balanced/3c/keycode_events.snapshot new file mode 100644 index 0000000..ce6e7b7 --- /dev/null +++ b/app/tests/hold-tap/balanced/3c/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0x07 +ht_binding_pressed: 0 new undecided hold_tap +kp_released: usage_page 0x07 keycode 0x07 +ht_decide: 0 decided tap (balanced event 0) +kp_pressed: usage_page 0x07 keycode 0x09 +kp_released: usage_page 0x07 keycode 0x09 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/3c/native_posix.keymap b/app/tests/hold-tap/balanced/3c/native_posix.keymap new file mode 100644 index 0000000..77306cd --- /dev/null +++ b/app/tests/hold-tap/balanced/3c/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) /*d*/ + ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/3d/events.patterns b/app/tests/hold-tap/balanced/3d/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/balanced/3d/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/3d/keycode_events.snapshot b/app/tests/hold-tap/balanced/3d/keycode_events.snapshot new file mode 100644 index 0000000..1ec384a --- /dev/null +++ b/app/tests/hold-tap/balanced/3d/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0x07 +ht_binding_pressed: 0 new undecided hold_tap +kp_released: usage_page 0x07 keycode 0x07 +ht_decide: 0 decided hold (balanced event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_released: usage_page 0x07 keycode 0xe1 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/3d/native_posix.keymap b/app/tests/hold-tap/balanced/3d/native_posix.keymap new file mode 100644 index 0000000..1441331 --- /dev/null +++ b/app/tests/hold-tap/balanced/3d/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) /* d */ + ZMK_MOCK_PRESS(0,0,100) /* mt f-shift */ + ZMK_MOCK_RELEASE(1,0,400) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/4a-nested/events.patterns b/app/tests/hold-tap/balanced/4a-nested/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/balanced/4a-nested/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/4a-nested/keycode_events.snapshot b/app/tests/hold-tap/balanced/4a-nested/keycode_events.snapshot new file mode 100644 index 0000000..8a1980b --- /dev/null +++ b/app/tests/hold-tap/balanced/4a-nested/keycode_events.snapshot @@ -0,0 +1,10 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (balanced event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 +ht_binding_pressed: 1 new undecided hold_tap +ht_decide: 1 decided tap (balanced event 0) +kp_pressed: usage_page 0x07 keycode 0x0d +kp_released: usage_page 0x07 keycode 0x0d +ht_binding_released: 1 cleaning up hold-tap +kp_released: usage_page 0x07 keycode 0xe1 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/4a-nested/native_posix.keymap b/app/tests/hold-tap/balanced/4a-nested/native_posix.keymap new file mode 100644 index 0000000..c10c6d6 --- /dev/null +++ b/app/tests/hold-tap/balanced/4a-nested/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(0,1,200) + /* timer fires */ + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/4a/events.patterns b/app/tests/hold-tap/balanced/4a/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/balanced/4a/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/4a/keycode_events.snapshot b/app/tests/hold-tap/balanced/4a/keycode_events.snapshot new file mode 100644 index 0000000..b89b21d --- /dev/null +++ b/app/tests/hold-tap/balanced/4a/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (balanced event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_pressed: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0xe1 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/4a/native_posix.keymap b/app/tests/hold-tap/balanced/4a/native_posix.keymap new file mode 100644 index 0000000..ce163f5 --- /dev/null +++ b/app/tests/hold-tap/balanced/4a/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(1,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/4b/events.patterns b/app/tests/hold-tap/balanced/4b/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/balanced/4b/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/4b/keycode_events.snapshot b/app/tests/hold-tap/balanced/4b/keycode_events.snapshot new file mode 100644 index 0000000..798e2ee --- /dev/null +++ b/app/tests/hold-tap/balanced/4b/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (balanced event 2) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_pressed: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0xe1 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/4b/native_posix.keymap b/app/tests/hold-tap/balanced/4b/native_posix.keymap new file mode 100644 index 0000000..7abda41 --- /dev/null +++ b/app/tests/hold-tap/balanced/4b/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(1,0,100) + ZMK_MOCK_RELEASE(1,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/4c/events.patterns b/app/tests/hold-tap/balanced/4c/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/balanced/4c/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/4c/keycode_events.snapshot b/app/tests/hold-tap/balanced/4c/keycode_events.snapshot new file mode 100644 index 0000000..798e2ee --- /dev/null +++ b/app/tests/hold-tap/balanced/4c/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (balanced event 2) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_pressed: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0xe1 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/4c/native_posix.keymap b/app/tests/hold-tap/balanced/4c/native_posix.keymap new file mode 100644 index 0000000..ce030af --- /dev/null +++ b/app/tests/hold-tap/balanced/4c/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* timer */ + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/4d/events.patterns b/app/tests/hold-tap/balanced/4d/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/balanced/4d/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/4d/keycode_events.snapshot b/app/tests/hold-tap/balanced/4d/keycode_events.snapshot new file mode 100644 index 0000000..5c9f4e3 --- /dev/null +++ b/app/tests/hold-tap/balanced/4d/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (balanced event 0) +kp_pressed: usage_page 0x07 keycode 0x09 +kp_pressed: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0x09 +ht_binding_released: 0 cleaning up hold-tap +kp_released: usage_page 0x07 keycode 0x07 diff --git a/app/tests/hold-tap/balanced/4d/native_posix.keymap b/app/tests/hold-tap/balanced/4d/native_posix.keymap new file mode 100644 index 0000000..5467660 --- /dev/null +++ b/app/tests/hold-tap/balanced/4d/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(1,0,100) + ZMK_MOCK_RELEASE(0,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(1,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/behavior_keymap.dtsi b/app/tests/hold-tap/balanced/behavior_keymap.dtsi new file mode 100644 index 0000000..df56fb5 --- /dev/null +++ b/app/tests/hold-tap/balanced/behavior_keymap.dtsi @@ -0,0 +1,27 @@ +#include +#include +#include + +/ { + behaviors { + ht_bal: behavior_hold_tap_balanced { + compatible = "zmk,behavior-hold-tap"; + label = "HOLD_TAP_BALANCED"; + #binding-cells = <2>; + flavor = "balanced"; + tapping_term_ms = <300>; + bindings = <&kp>, <&kp>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &ht_bal LSFT F &ht_bal LCTL J + &kp D &kp RCTL>; + }; + }; +}; diff --git a/app/tests/hold-tap/hold-preferred/1/events.patterns b/app/tests/hold-tap/hold-preferred/1/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/1/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/1/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/1/keycode_events.snapshot new file mode 100644 index 0000000..cf787d8 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/1/keycode_events.snapshot @@ -0,0 +1,5 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (hold-preferred event 0) +kp_pressed: usage_page 0x07 keycode 0x09 +kp_released: usage_page 0x07 keycode 0x09 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/1/native_posix.keymap b/app/tests/hold-tap/hold-preferred/1/native_posix.keymap new file mode 100644 index 0000000..10336ef --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/1/native_posix.keymap @@ -0,0 +1,11 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/2/events.patterns b/app/tests/hold-tap/hold-preferred/2/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/2/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/2/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/2/keycode_events.snapshot new file mode 100644 index 0000000..03329d5 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/2/keycode_events.snapshot @@ -0,0 +1,5 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (hold-preferred event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_released: usage_page 0x07 keycode 0xe1 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/2/native_posix.keymap b/app/tests/hold-tap/hold-preferred/2/native_posix.keymap new file mode 100644 index 0000000..aa93b86 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/2/native_posix.keymap @@ -0,0 +1,11 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,500) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/3a/events.patterns b/app/tests/hold-tap/hold-preferred/3a/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/3a/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/3a/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/3a/keycode_events.snapshot new file mode 100644 index 0000000..adf4fe2 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/3a/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0xe4 +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (hold-preferred event 0) +kp_pressed: usage_page 0x07 keycode 0x09 +kp_released: usage_page 0x07 keycode 0xe4 +kp_released: usage_page 0x07 keycode 0x09 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/3a/native_posix.keymap b/app/tests/hold-tap/hold-preferred/3a/native_posix.keymap new file mode 100644 index 0000000..6f08689 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/3a/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ + ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/3b/events.patterns b/app/tests/hold-tap/hold-preferred/3b/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/3b/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/3b/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/3b/keycode_events.snapshot new file mode 100644 index 0000000..69b64a9 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/3b/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0xe4 +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (hold-preferred event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_released: usage_page 0x07 keycode 0xe4 +kp_released: usage_page 0x07 keycode 0xe1 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/3b/native_posix.keymap b/app/tests/hold-tap/hold-preferred/3b/native_posix.keymap new file mode 100644 index 0000000..392d328 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/3b/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ + ZMK_MOCK_PRESS(0,0,50) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,1,300) + /*timer*/ + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/3c/events.patterns b/app/tests/hold-tap/hold-preferred/3c/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/3c/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/3c/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/3c/keycode_events.snapshot new file mode 100644 index 0000000..b06a1d7 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/3c/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0x07 +ht_binding_pressed: 0 new undecided hold_tap +kp_released: usage_page 0x07 keycode 0x07 +ht_decide: 0 decided tap (hold-preferred event 0) +kp_pressed: usage_page 0x07 keycode 0x09 +kp_released: usage_page 0x07 keycode 0x09 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/3c/native_posix.keymap b/app/tests/hold-tap/hold-preferred/3c/native_posix.keymap new file mode 100644 index 0000000..77306cd --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/3c/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) /*d*/ + ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/3d/events.patterns b/app/tests/hold-tap/hold-preferred/3d/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/3d/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/3d/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/3d/keycode_events.snapshot new file mode 100644 index 0000000..bf31955 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/3d/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0x07 +ht_binding_pressed: 0 new undecided hold_tap +kp_released: usage_page 0x07 keycode 0x07 +ht_decide: 0 decided hold (hold-preferred event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_released: usage_page 0x07 keycode 0xe1 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/3d/native_posix.keymap b/app/tests/hold-tap/hold-preferred/3d/native_posix.keymap new file mode 100644 index 0000000..1441331 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/3d/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) /* d */ + ZMK_MOCK_PRESS(0,0,100) /* mt f-shift */ + ZMK_MOCK_RELEASE(1,0,400) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/4a-nested/events.patterns b/app/tests/hold-tap/hold-preferred/4a-nested/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/4a-nested/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/4a-nested/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/4a-nested/keycode_events.snapshot new file mode 100644 index 0000000..3ed7de0 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/4a-nested/keycode_events.snapshot @@ -0,0 +1,10 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (hold-preferred event 1) +kp_pressed: usage_page 0x07 keycode 0xe1 +ht_binding_pressed: 1 new undecided hold_tap +ht_decide: 1 decided tap (hold-preferred event 0) +kp_pressed: usage_page 0x07 keycode 0x0d +kp_released: usage_page 0x07 keycode 0x0d +ht_binding_released: 1 cleaning up hold-tap +kp_released: usage_page 0x07 keycode 0xe1 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/4a-nested/native_posix.keymap b/app/tests/hold-tap/hold-preferred/4a-nested/native_posix.keymap new file mode 100644 index 0000000..c10c6d6 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/4a-nested/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(0,1,200) + /* timer fires */ + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/4a/events.patterns b/app/tests/hold-tap/hold-preferred/4a/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/4a/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/4a/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/4a/keycode_events.snapshot new file mode 100644 index 0000000..e0b57fd --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/4a/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (hold-preferred event 1) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_pressed: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0xe1 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/4a/native_posix.keymap b/app/tests/hold-tap/hold-preferred/4a/native_posix.keymap new file mode 100644 index 0000000..ce163f5 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/4a/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(1,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/4b/events.patterns b/app/tests/hold-tap/hold-preferred/4b/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/4b/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/4b/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/4b/keycode_events.snapshot new file mode 100644 index 0000000..e0b57fd --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/4b/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (hold-preferred event 1) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_pressed: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0xe1 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/4b/native_posix.keymap b/app/tests/hold-tap/hold-preferred/4b/native_posix.keymap new file mode 100644 index 0000000..7abda41 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/4b/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(1,0,100) + ZMK_MOCK_RELEASE(1,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/4c/events.patterns b/app/tests/hold-tap/hold-preferred/4c/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/4c/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/4c/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/4c/keycode_events.snapshot new file mode 100644 index 0000000..e0b57fd --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/4c/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (hold-preferred event 1) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_pressed: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0xe1 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/4c/native_posix.keymap b/app/tests/hold-tap/hold-preferred/4c/native_posix.keymap new file mode 100644 index 0000000..ce030af --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/4c/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* timer */ + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/4d/events.patterns b/app/tests/hold-tap/hold-preferred/4d/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/4d/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/4d/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/4d/keycode_events.snapshot new file mode 100644 index 0000000..cac579d --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/4d/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (hold-preferred event 1) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_pressed: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0xe1 +ht_binding_released: 0 cleaning up hold-tap +kp_released: usage_page 0x07 keycode 0x07 diff --git a/app/tests/hold-tap/hold-preferred/4d/native_posix.keymap b/app/tests/hold-tap/hold-preferred/4d/native_posix.keymap new file mode 100644 index 0000000..5467660 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/4d/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(1,0,100) + ZMK_MOCK_RELEASE(0,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(1,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/behavior_keymap.dtsi b/app/tests/hold-tap/hold-preferred/behavior_keymap.dtsi new file mode 100644 index 0000000..375ffd9 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/behavior_keymap.dtsi @@ -0,0 +1,29 @@ +#include +#include +#include + + + +/ { + behaviors { + ht_hold: behavior_hold_hold_tap { + compatible = "zmk,behavior-hold-tap"; + label = "hold_hold_tap"; + #binding-cells = <2>; + flavor = "hold-preferred"; + tapping_term_ms = <300>; + bindings = <&kp>, <&kp>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &ht_hold LSFT F &ht_hold LCTL J + &kp D &kp RCTL>; + }; + }; +}; diff --git a/app/tests/hold-tap/tap-preferred/1/events.patterns b/app/tests/hold-tap/tap-preferred/1/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/1/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/1/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/1/keycode_events.snapshot new file mode 100644 index 0000000..2a250fb --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/1/keycode_events.snapshot @@ -0,0 +1,5 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (tap-preferred event 0) +kp_pressed: usage_page 0x07 keycode 0x09 +kp_released: usage_page 0x07 keycode 0x09 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/1/native_posix.keymap b/app/tests/hold-tap/tap-preferred/1/native_posix.keymap new file mode 100644 index 0000000..10336ef --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/1/native_posix.keymap @@ -0,0 +1,11 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/2/events.patterns b/app/tests/hold-tap/tap-preferred/2/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/2/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/2/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/2/keycode_events.snapshot new file mode 100644 index 0000000..4f1ee63 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/2/keycode_events.snapshot @@ -0,0 +1,5 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (tap-preferred event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_released: usage_page 0x07 keycode 0xe1 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/2/native_posix.keymap b/app/tests/hold-tap/tap-preferred/2/native_posix.keymap new file mode 100644 index 0000000..aa93b86 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/2/native_posix.keymap @@ -0,0 +1,11 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,500) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/3a/events.patterns b/app/tests/hold-tap/tap-preferred/3a/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/3a/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/3a/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/3a/keycode_events.snapshot new file mode 100644 index 0000000..87d1406 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/3a/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0xe4 +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (tap-preferred event 0) +kp_pressed: usage_page 0x07 keycode 0x09 +kp_released: usage_page 0x07 keycode 0xe4 +kp_released: usage_page 0x07 keycode 0x09 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/3a/native_posix.keymap b/app/tests/hold-tap/tap-preferred/3a/native_posix.keymap new file mode 100644 index 0000000..6f08689 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/3a/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ + ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/3b/events.patterns b/app/tests/hold-tap/tap-preferred/3b/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/3b/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/3b/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/3b/keycode_events.snapshot new file mode 100644 index 0000000..7455d2a --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/3b/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0xe4 +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (tap-preferred event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_released: usage_page 0x07 keycode 0xe4 +kp_released: usage_page 0x07 keycode 0xe1 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/3b/native_posix.keymap b/app/tests/hold-tap/tap-preferred/3b/native_posix.keymap new file mode 100644 index 0000000..392d328 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/3b/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ + ZMK_MOCK_PRESS(0,0,50) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,1,300) + /*timer*/ + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/3c/events.patterns b/app/tests/hold-tap/tap-preferred/3c/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/3c/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/3c/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/3c/keycode_events.snapshot new file mode 100644 index 0000000..3d7eaf1 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/3c/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0x07 +ht_binding_pressed: 0 new undecided hold_tap +kp_released: usage_page 0x07 keycode 0x07 +ht_decide: 0 decided tap (tap-preferred event 0) +kp_pressed: usage_page 0x07 keycode 0x09 +kp_released: usage_page 0x07 keycode 0x09 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/3c/native_posix.keymap b/app/tests/hold-tap/tap-preferred/3c/native_posix.keymap new file mode 100644 index 0000000..77306cd --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/3c/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) /*d*/ + ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/3d/events.patterns b/app/tests/hold-tap/tap-preferred/3d/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/3d/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/3d/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/3d/keycode_events.snapshot new file mode 100644 index 0000000..059d99c --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/3d/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0x07 +ht_binding_pressed: 0 new undecided hold_tap +kp_released: usage_page 0x07 keycode 0x07 +ht_decide: 0 decided hold (tap-preferred event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_released: usage_page 0x07 keycode 0xe1 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/3d/native_posix.keymap b/app/tests/hold-tap/tap-preferred/3d/native_posix.keymap new file mode 100644 index 0000000..1441331 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/3d/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) /* d */ + ZMK_MOCK_PRESS(0,0,100) /* mt f-shift */ + ZMK_MOCK_RELEASE(1,0,400) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/4a-nested/events.patterns b/app/tests/hold-tap/tap-preferred/4a-nested/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/4a-nested/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/4a-nested/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/4a-nested/keycode_events.snapshot new file mode 100644 index 0000000..a8cf490 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/4a-nested/keycode_events.snapshot @@ -0,0 +1,10 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (tap-preferred event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 +ht_binding_pressed: 1 new undecided hold_tap +ht_decide: 1 decided tap (tap-preferred event 0) +kp_pressed: usage_page 0x07 keycode 0x0d +kp_released: usage_page 0x07 keycode 0x0d +ht_binding_released: 1 cleaning up hold-tap +kp_released: usage_page 0x07 keycode 0xe1 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/4a-nested/native_posix.keymap b/app/tests/hold-tap/tap-preferred/4a-nested/native_posix.keymap new file mode 100644 index 0000000..c10c6d6 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/4a-nested/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(0,1,200) + /* timer fires */ + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/4a/events.patterns b/app/tests/hold-tap/tap-preferred/4a/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/4a/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/4a/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/4a/keycode_events.snapshot new file mode 100644 index 0000000..92a3569 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/4a/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (tap-preferred event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_pressed: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0xe1 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/4a/native_posix.keymap b/app/tests/hold-tap/tap-preferred/4a/native_posix.keymap new file mode 100644 index 0000000..ce163f5 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/4a/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(1,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/4b/events.patterns b/app/tests/hold-tap/tap-preferred/4b/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/4b/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/4b/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/4b/keycode_events.snapshot new file mode 100644 index 0000000..92a3569 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/4b/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (tap-preferred event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_pressed: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0xe1 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/4b/native_posix.keymap b/app/tests/hold-tap/tap-preferred/4b/native_posix.keymap new file mode 100644 index 0000000..7abda41 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/4b/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(1,0,100) + ZMK_MOCK_RELEASE(1,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/4c/events.patterns b/app/tests/hold-tap/tap-preferred/4c/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/4c/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/4c/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/4c/keycode_events.snapshot new file mode 100644 index 0000000..bc8aa8e --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/4c/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (tap-preferred event 0) +kp_pressed: usage_page 0x07 keycode 0x09 +kp_pressed: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0x09 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/4c/native_posix.keymap b/app/tests/hold-tap/tap-preferred/4c/native_posix.keymap new file mode 100644 index 0000000..ce030af --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/4c/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* timer */ + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/4d/events.patterns b/app/tests/hold-tap/tap-preferred/4d/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/4d/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/4d/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/4d/keycode_events.snapshot new file mode 100644 index 0000000..b106f13 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/4d/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (tap-preferred event 0) +kp_pressed: usage_page 0x07 keycode 0x09 +kp_pressed: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0x09 +ht_binding_released: 0 cleaning up hold-tap +kp_released: usage_page 0x07 keycode 0x07 diff --git a/app/tests/hold-tap/tap-preferred/4d/native_posix.keymap b/app/tests/hold-tap/tap-preferred/4d/native_posix.keymap new file mode 100644 index 0000000..5467660 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/4d/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(1,0,100) + ZMK_MOCK_RELEASE(0,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(1,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/behavior_keymap.dtsi b/app/tests/hold-tap/tap-preferred/behavior_keymap.dtsi new file mode 100644 index 0000000..e514fa6 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/behavior_keymap.dtsi @@ -0,0 +1,27 @@ +#include +#include +#include + +/ { + behaviors { + tp: behavior_tap_preferred { + compatible = "zmk,behavior-hold-tap"; + label = "MOD_TAP"; + #binding-cells = <2>; + flavor = "tap-preferred"; + tapping_term_ms = <300>; + bindings = <&kp>, <&kp>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &tp LSFT F &tp LCTL J + &kp D &kp RCTL>; + }; + }; +}; diff --git a/app/tests/hold-tap/zmk-modtap-proposal.odg b/app/tests/hold-tap/zmk-modtap-proposal.odg new file mode 100644 index 0000000..82f8436 Binary files /dev/null and b/app/tests/hold-tap/zmk-modtap-proposal.odg differ diff --git a/app/tests/hold-tap/zmk-modtap-proposal.pdf b/app/tests/hold-tap/zmk-modtap-proposal.pdf new file mode 100644 index 0000000..33048ca Binary files /dev/null and b/app/tests/hold-tap/zmk-modtap-proposal.pdf differ diff --git a/app/tests/tap-hold/balanced/behavior_keymap.dtsi b/app/tests/tap-hold/balanced/behavior_keymap.dtsi new file mode 100644 index 0000000..df56fb5 --- /dev/null +++ b/app/tests/tap-hold/balanced/behavior_keymap.dtsi @@ -0,0 +1,27 @@ +#include +#include +#include + +/ { + behaviors { + ht_bal: behavior_hold_tap_balanced { + compatible = "zmk,behavior-hold-tap"; + label = "HOLD_TAP_BALANCED"; + #binding-cells = <2>; + flavor = "balanced"; + tapping_term_ms = <300>; + bindings = <&kp>, <&kp>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &ht_bal LSFT F &ht_bal LCTL J + &kp D &kp RCTL>; + }; + }; +}; diff --git a/app/tests/tap-hold/hold-preferred/behavior_keymap.dtsi b/app/tests/tap-hold/hold-preferred/behavior_keymap.dtsi new file mode 100644 index 0000000..375ffd9 --- /dev/null +++ b/app/tests/tap-hold/hold-preferred/behavior_keymap.dtsi @@ -0,0 +1,29 @@ +#include +#include +#include + + + +/ { + behaviors { + ht_hold: behavior_hold_hold_tap { + compatible = "zmk,behavior-hold-tap"; + label = "hold_hold_tap"; + #binding-cells = <2>; + flavor = "hold-preferred"; + tapping_term_ms = <300>; + bindings = <&kp>, <&kp>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &ht_hold LSFT F &ht_hold LCTL J + &kp D &kp RCTL>; + }; + }; +}; diff --git a/app/tests/tap-hold/tap-preferred/behavior_keymap.dtsi b/app/tests/tap-hold/tap-preferred/behavior_keymap.dtsi new file mode 100644 index 0000000..e514fa6 --- /dev/null +++ b/app/tests/tap-hold/tap-preferred/behavior_keymap.dtsi @@ -0,0 +1,27 @@ +#include +#include +#include + +/ { + behaviors { + tp: behavior_tap_preferred { + compatible = "zmk,behavior-hold-tap"; + label = "MOD_TAP"; + #binding-cells = <2>; + flavor = "tap-preferred"; + tapping_term_ms = <300>; + bindings = <&kp>, <&kp>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &tp LSFT F &tp LCTL J + &kp D &kp RCTL>; + }; + }; +}; -- cgit v1.2.3 From 29a23f018235ede8cfe65f5ede5014408eee879a Mon Sep 17 00:00:00 2001 From: Okke Formsma Date: Tue, 1 Sep 2020 16:04:58 +0200 Subject: Add tap-hold docs, update mod-tap docs --- docs/docs/assets/hold-tap/case1_2.png | Bin 0 -> 10323 bytes docs/docs/assets/hold-tap/case_hold_preferred.png | Bin 0 -> 6380 bytes docs/docs/assets/hold-tap/comparison.png | Bin 0 -> 158912 bytes docs/docs/behavior/hold-tap.md | 62 ++++++++++++++++++++++ docs/docs/behavior/mod-tap.md | 27 +++++++--- 5 files changed, 82 insertions(+), 7 deletions(-) create mode 100644 docs/docs/assets/hold-tap/case1_2.png create mode 100644 docs/docs/assets/hold-tap/case_hold_preferred.png create mode 100644 docs/docs/assets/hold-tap/comparison.png create mode 100644 docs/docs/behavior/hold-tap.md diff --git a/docs/docs/assets/hold-tap/case1_2.png b/docs/docs/assets/hold-tap/case1_2.png new file mode 100644 index 0000000..818ac83 Binary files /dev/null and b/docs/docs/assets/hold-tap/case1_2.png differ diff --git a/docs/docs/assets/hold-tap/case_hold_preferred.png b/docs/docs/assets/hold-tap/case_hold_preferred.png new file mode 100644 index 0000000..6d7fd43 Binary files /dev/null and b/docs/docs/assets/hold-tap/case_hold_preferred.png differ diff --git a/docs/docs/assets/hold-tap/comparison.png b/docs/docs/assets/hold-tap/comparison.png new file mode 100644 index 0000000..419b204 Binary files /dev/null and b/docs/docs/assets/hold-tap/comparison.png differ diff --git a/docs/docs/behavior/hold-tap.md b/docs/docs/behavior/hold-tap.md new file mode 100644 index 0000000..b586b90 --- /dev/null +++ b/docs/docs/behavior/hold-tap.md @@ -0,0 +1,62 @@ +--- +title: Hold-tap behavior +sidebar_label: Hold-Tap +--- + +## Summary +Hold-tap is the basis for other behaviors such as layer-tap and mod-tap. + +Simply put, the hold-tap key will output the 'hold' behavior if it's held for a while, and output the 'tap' behavior when it's tapped quickly. + + +### Hold-Tap +The `tapping_term_ms` parameter decides between a 'tap' and a 'hold'. + +![Simple behavior](../assets/hold-tap/case1_2.png) + +By default, the hold-tap is configured to also select the 'hold' functionality if another key is tapped while it's active: + +![Hold preferred behavior](../assets/hold-tap/case1_2.png) + +We call this the 'hold-preferred' flavor of hold-taps. While this flavor may work very well for a ctrl/escape key, it's not very well suited for home-row mods or layer-taps. That's why there are two more flavors to choose from: 'tap-preferred' and 'balanced'. + +![Hold-tap comparison](../assets/hold-tap/comparison.png) + +### Configuration +A code example which configures a mod-tap setting that works with homerow mods: + +``` +#include +#include + +/ { + behaviors { + &hm: homerow_mods { + compatible = "zmk,behavior-hold-tap"; + label = "homerow_mods"; + #binding-cells = <2>; + tapping_term_ms = <175>; + flavor = "balanced"; + bindings = <&kp>, <&kp>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + + default_layer { + bindings = < + &hm LCTL A &hm LGUI S &hm LALT D &hm LSFT F + >; + }; + }; +}; + +``` + +If this config does not work for you, try the flavor "tap-preferred" and a short tapping_term_ms such as 120ms. + +If you want to use a tap-hold with a keycode from a different code page, you have to define another behavior with another "bindings" parameter.For example, if you want to use SHIFT and volume up, define the bindings like `bindings = <&kp>, <&cp>;`. Only single-argument behaviors are supported at the moment. + +#### Note +Astute readers may notice similarities between the possible behaviors in ZMK and other firmware, such as QMK. The hold-preferred flavor works similar to the `HOLD_ON_OTHER_KEY_PRESS` setting. The 'balanced' flavor is similar to the `PERMISSIVE_HOLD` setting, and the `tap-preferred` flavor is similar to `IGNORE_MOD_TAP_INTERRUPT`. \ No newline at end of file diff --git a/docs/docs/behavior/mod-tap.md b/docs/docs/behavior/mod-tap.md index 08e9b65..cbe95e4 100644 --- a/docs/docs/behavior/mod-tap.md +++ b/docs/docs/behavior/mod-tap.md @@ -5,13 +5,9 @@ sidebar_label: Mod-Tap ## Summary -The Mod-Tap behavior allows varying the effect of pressing and releasing a key position depending -on whether it is used with other simultaneous key presses at the same time. +The Mod-Tap sends a different keypress, if it's tapped or held. When you tap the key shortly, the first keycode is sent. If you hold the key for longer than 200ms, the second keycode is sent. -If pressed and released independently, the Mod-Tap behavior will send the press and release events -for the configure keycode. If pressed and held while another key is pressed and released, then -the configured modifiers will be applied to that _other_ key press, and no press will be generated -on the release of the Mod-Tap key. +If you press another key within the 200ms, the 'mod' behavior is also activated. ## Mod-Tap @@ -20,7 +16,7 @@ The Mod-Tap behavior either acts as a held modifier, or as a tapped keycode. ### Behavior Binding - Reference: `&mt` -- Parameter #1: The modifiers to be used when activating as a modifier, e.g. `MOD_LSFT` +- Parameter #1: The keycode to be sent when activating as a modifier, e.g. `LSFT` - Parameter #2: The keycode to sent when used as a tap, e.g. `A`, `B`. Example: @@ -28,3 +24,20 @@ Example: ``` &mt MOD_LSFT A ``` + +### Configuration + +You can configure a different tapping term in your keymap: + +``` +&mt { + tapping_term_ms: <400>; +} + +/ { + keymap { + ... + } +} +``` + -- cgit v1.2.3 From 081ae84d0ed4e5fd5a90e9a5e279cfcea55e81b4 Mon Sep 17 00:00:00 2001 From: kurtis-lew Date: Tue, 1 Sep 2020 20:22:11 -0700 Subject: Added Iris Shield --- app/boards/shields/iris/Kconfig.defconfig | 14 ++++++++ app/boards/shields/iris/Kconfig.shield | 8 +++++ app/boards/shields/iris/iris.conf | 0 app/boards/shields/iris/iris.dtsi | 51 +++++++++++++++++++++++++++ app/boards/shields/iris/iris.keymap | 56 ++++++++++++++++++++++++++++++ app/boards/shields/iris/iris_left.conf | 2 ++ app/boards/shields/iris/iris_left.overlay | 22 ++++++++++++ app/boards/shields/iris/iris_right.conf | 2 ++ app/boards/shields/iris/iris_right.overlay | 26 ++++++++++++++ 9 files changed, 181 insertions(+) create mode 100644 app/boards/shields/iris/Kconfig.defconfig create mode 100644 app/boards/shields/iris/Kconfig.shield create mode 100644 app/boards/shields/iris/iris.conf create mode 100644 app/boards/shields/iris/iris.dtsi create mode 100644 app/boards/shields/iris/iris.keymap create mode 100644 app/boards/shields/iris/iris_left.conf create mode 100644 app/boards/shields/iris/iris_left.overlay create mode 100644 app/boards/shields/iris/iris_right.conf create mode 100644 app/boards/shields/iris/iris_right.overlay diff --git a/app/boards/shields/iris/Kconfig.defconfig b/app/boards/shields/iris/Kconfig.defconfig new file mode 100644 index 0000000..bf4919a --- /dev/null +++ b/app/boards/shields/iris/Kconfig.defconfig @@ -0,0 +1,14 @@ + +if SHIELD_IRIS_LEFT + +config ZMK_KEYBOARD_NAME + default "Iris Left" + +endif + +if SHIELD_IRIS_RIGHT + +config ZMK_KEYBOARD_NAME + default "Iris Right" + +endif \ No newline at end of file diff --git a/app/boards/shields/iris/Kconfig.shield b/app/boards/shields/iris/Kconfig.shield new file mode 100644 index 0000000..370bd22 --- /dev/null +++ b/app/boards/shields/iris/Kconfig.shield @@ -0,0 +1,8 @@ +# Copyright (c) 2020 Pete Johanson, Kurtis Lew +# SPDX-License-Identifier: MIT + +config SHIELD_IRIS_LEFT + def_bool $(shields_list_contains,iris_left) + +config SHIELD_IRIS_RIGHT + def_bool $(shields_list_contains,iris_right) diff --git a/app/boards/shields/iris/iris.conf b/app/boards/shields/iris/iris.conf new file mode 100644 index 0000000..e69de29 diff --git a/app/boards/shields/iris/iris.dtsi b/app/boards/shields/iris/iris.dtsi new file mode 100644 index 0000000..f6e32c4 --- /dev/null +++ b/app/boards/shields/iris/iris.dtsi @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2020 Pete Johanson, Kurtis Lew + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <16>; + rows = <4>; +// | SW6 | SW5 | SW4 | SW3 | SW2 | SW1 | | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 | +// | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | +// | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 | | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 | +// | SW24 | SW23 | SW22 | SW21 | SW20 | SW19 | SW25 | | SW25 | SW19 | SW20 | SW21 | SW22 | SW23 | SW24 | +// | SW29 | SW28 | SW27 | SW26 | | SW26 | SW27 | SW28 | SW29 | + map = < +RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) +RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) +RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) +RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,2) RC(4,9) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) + RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8) + >; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + + diode-direction = "col2row"; + row-gpios + = <&pro_micro_d 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + + }; + + bt_unpair_combo: bt_unpair_combo { + compatible = "zmk,bt-unpair-combo"; + }; +}; \ No newline at end of file diff --git a/app/boards/shields/iris/iris.keymap b/app/boards/shields/iris/iris.keymap new file mode 100644 index 0000000..4607adf --- /dev/null +++ b/app/boards/shields/iris/iris.keymap @@ -0,0 +1,56 @@ +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { +// ------------------------------------------------------------------------------------------------------------ +// | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` | +// | TAB | Q | W | E | R | T | | Y | U | I | O | P | - | +// | CTRL | A | S | D | F | G | | H | J | K | L | ; | ' | +// | SHIFT | Z | X | C | V | B | "[" | | "]" | N | M | , | . | / | SHIFT | +// | GUI | LOWER| SPACE | | ENTER | RAISE| ALT | + bindings = < +&kp ESC &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 &kp GRAV +&kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp MINUS +&kp LCTL &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SCLN &kp QUOT +&kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp LBKT &kp RBKT &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RSFT + &kp LGUI &mo 1 &kp SPC &kp RET &mo 2 &kp RALT + >; + }; + + lower_layer { +// ------------------------------------------------------------------------------------------------------------ +// | | | | | | | | | | | | | | +// | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | +// | ` | ! | @ | # | $ | % | | ^ | & | * | ( | ) | ~ | +// | | | | | | | | | | | _ | + | { | } | "|" | +// | | | | | | | | + bindings = < +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans +&kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 +&kp GRAV &kp BANG &kp ATSN &kp HASH &kp CURU &kp PRCT &kp CRRT &kp AMPS &kp KMLT &kp LPRN &kp RPRN &kp TILD +&trans &trans &trans &trans &trans &trans &trans &trans &trans &kp MINUS &kp KPLS &kp LCUR &kp RCUR &kp PIPE + &trans &trans &trans &trans &trans &trans + >; + }; + + raise_layer { +// ------------------------------------------------------------------------------------------------------------ +// | | | | | | | | | | | | | | +// | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | | +// | F1 | F2 | F3 | F4 | F5 | F6 | | | <- | ^ | v | -> | | +// | F7 | F8 | F9 | F10 | F11 | F12 | | | | + | - | = | [ | ] | \ | +// | | | | | | | | + bindings = < +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans +&kp GRAV &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 &trans +&kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &trans &kp LARW &kp DARW &kp UARW &kp RARW &trans +&kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &trans &trans &kp KPLS &kp MINUS &kp EQL &kp LBKT &kp RBKT &kp BSLH + &trans &trans &trans &trans &trans &trans + >; + }; + }; +}; diff --git a/app/boards/shields/iris/iris_left.conf b/app/boards/shields/iris/iris_left.conf new file mode 100644 index 0000000..1e028a7 --- /dev/null +++ b/app/boards/shields/iris/iris_left.conf @@ -0,0 +1,2 @@ +CONFIG_ZMK_SPLIT=y +CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL=y diff --git a/app/boards/shields/iris/iris_left.overlay b/app/boards/shields/iris/iris_left.overlay new file mode 100644 index 0000000..e04638e --- /dev/null +++ b/app/boards/shields/iris/iris_left.overlay @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2020 Pete Johanson, Kurtis Lew + * + * SPDX-License-Identifier: MIT + */ + +#include "iris.dtsi" + +&kscan0 { + col-gpios + = <&pro_micro_a 1 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 16 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 10 GPIO_ACTIVE_HIGH> + ; +}; + +&bt_unpair_combo { + key-positions = <0 42>; +}; diff --git a/app/boards/shields/iris/iris_right.conf b/app/boards/shields/iris/iris_right.conf new file mode 100644 index 0000000..990cf7c --- /dev/null +++ b/app/boards/shields/iris/iris_right.conf @@ -0,0 +1,2 @@ +CONFIG_ZMK_SPLIT=y +CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL=y diff --git a/app/boards/shields/iris/iris_right.overlay b/app/boards/shields/iris/iris_right.overlay new file mode 100644 index 0000000..3f3dcb8 --- /dev/null +++ b/app/boards/shields/iris/iris_right.overlay @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2020 Pete Johanson, Kurtis Lew + * + * SPDX-License-Identifier: MIT + */ + +#include "iris.dtsi" + +&default_transform { + col-offset = <6>; +}; + +&kscan0 { + col-gpios + = <&pro_micro_a 1 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 16 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 10 GPIO_ACTIVE_HIGH> + ; +}; + +&bt_unpair_combo { + key-positions = <11 43>; +}; -- cgit v1.2.3 From 068626d1a74d3883a8ccb2cd514a217098e99420 Mon Sep 17 00:00:00 2001 From: Kevin Date: Tue, 1 Sep 2020 21:12:09 -0700 Subject: Some work on encoder docs --- docs/docs/dev-guide-add-encoders.md | 53 +++++++++++++++++++++++++++++++++++++ docs/docs/feature/encoders.md | 36 ++++++++++++++++++++++++- docs/sidebars.js | 5 +++- 3 files changed, 92 insertions(+), 2 deletions(-) create mode 100644 docs/docs/dev-guide-add-encoders.md diff --git a/docs/docs/dev-guide-add-encoders.md b/docs/docs/dev-guide-add-encoders.md new file mode 100644 index 0000000..79f353f --- /dev/null +++ b/docs/docs/dev-guide-add-encoders.md @@ -0,0 +1,53 @@ +--- +id: dev-guide-add-encoders +title: Adding Encoders +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +EC11 encoder support can be added to your board or shield by adding the appropriate lines to your board/shield's .conf, .dtsi, and .overlay files. + + + + +In your .conf file you will need to add the following lines so that the EC11 drivers can be enabled: + +``` +# Uncomment to enable encoder +# CONFIG_EC11=y +# CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y +``` + +These should be commented by default if encoders are optional, but can be uncommented if encoders are part of the original design. + + + +In your .dtsi file you will need to add the following lines to define the encoder sensor: + + +``` +left_encoder: encoder_left { + compatible = "alps,ec11"; + label = "LEFT_ENCODER"; + a-gpios = ; + b-gpios = ; + resolution = <4>; + }; +``` +Here you will have to replace PIN_A and PIN_B with the appropriate pins that your PCB utilizes for the encoder(s). + +For keyboards that use the Pro Micro or any of the Pro Micro replacements, Sparkfun's [Pro Micro Hookup Guide](https://learn.sparkfun.com/tutorials/pro-micro--fio-v3-hookup-guide/hardware-overview-pro-micro) has a pinout diagram that can be useful to determine the right pins. Reference either the blue numbers labeled "Arduino" (digital pins) or the green numbers labeled "Analog" (analog pins). For pins that are labeled as both digital and analog, refer to your specific board's .dtsi file to determine how you should refer to that pin. + +Replace `left` with `right` to define a right-side encoder, although note that support for peripheral side sensors is still in progress. + + + + + diff --git a/docs/docs/feature/encoders.md b/docs/docs/feature/encoders.md index 16537ad..9f583cb 100644 --- a/docs/docs/feature/encoders.md +++ b/docs/docs/feature/encoders.md @@ -3,4 +3,38 @@ title: Encoders sidebar_label: Encoders --- -TODO: Documentation on encoders. +Existing support for encoders in ZMK is focused around the EC11 rotary encoder with push button design used in the majority of current keyboard and macropad designs. + +## Enabling EC11 Encoders + +To enable encoders for boards that have existing encoder support, uncomment the `EC11_CONFIG=y` and `CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y` lines in your board's .conf file in your `zmk-config/config` folder. Save and push your changes, then download and flash the new firmware. + +## Customizing EC11 Encoder Behavior + +Encoder behavior in ZMK is configured in two different locations as the push button and rotation behaviors are handled in two separate ways. + +### Push Button + +Keyboards and macropads with encoder support will typically take the two EC11 pins responsible for the push button and include them as part of the matrix for the keys. To configure what is sent by the push button, find the encoder's position in the keyboard matrix and assign it a behavior the same as you would any other key. + +### Rotation + +Rotation is handled separately as a type of sensor. The behavior for this is set by defining `sensor-bindings` within a layer but below the `bindings` for the regular keys in the following format: + +``` +sensor-bindings = ; +``` + +- `BINDING` is one of two rotation bindings that are currently defined, `&inc_dec_cp` for consumer key presses or `&inc_dec_kp` for normal key presses (see [Key Press](<(/docs/behavior/key-press)>) for the difference between the two). +- `CW_KEY` is the keycode activated by a clockwise turn. +- `CCW_KEY` is the keycode activated by a counter-clockwise turn. + +Behaviors for additional encoders can be configured by adding more `BINDING CW_KEY CCW_KEY` sets immediately after the first. + +As an example, a complete `sensor-bindings` for a Kyria would look like: + +``` +sensor-bindings = <&inc_dec_cp M_VOLU M_VOLD &inc_dec_kp PGUP PGDN>; +``` + +In this example, the left encoder is configured to control volume up and down while the right encoder sends either Page Up or Page Down. diff --git a/docs/sidebars.js b/docs/sidebars.js index 53c5cf3..924010e 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -23,6 +23,9 @@ module.exports = { "dev-posix-board", "dev-tests", ], - "Dev Guides": ["dev-guide-new-shield", "dev-guide-usb-logging"], + "Dev Guides": [ + "dev-guide-new-shield", + "dev-guide-add-encoders", + "dev-guide-usb-logging"], }, }; -- cgit v1.2.3 From f6a9c1ee57e9e8b5a6d2fd7cd5a60c32138a4404 Mon Sep 17 00:00:00 2001 From: Okke Formsma Date: Wed, 2 Sep 2020 15:10:46 +0200 Subject: rename tests --- .../hold-tap/balanced/1-dn-up/events.patterns | 4 +++ .../balanced/1-dn-up/keycode_events.snapshot | 5 ++++ .../hold-tap/balanced/1-dn-up/native_posix.keymap | 11 ++++++++ app/tests/hold-tap/balanced/1/events.patterns | 4 --- .../hold-tap/balanced/1/keycode_events.snapshot | 5 ---- app/tests/hold-tap/balanced/1/native_posix.keymap | 11 -------- .../balanced/2-dn-timer-up/events.patterns | 4 +++ .../balanced/2-dn-timer-up/keycode_events.snapshot | 5 ++++ .../balanced/2-dn-timer-up/native_posix.keymap | 11 ++++++++ app/tests/hold-tap/balanced/2/events.patterns | 4 --- .../hold-tap/balanced/2/keycode_events.snapshot | 5 ---- app/tests/hold-tap/balanced/2/native_posix.keymap | 11 -------- .../balanced/3a-moddn-dn-modup-up/events.patterns | 4 +++ .../3a-moddn-dn-modup-up/keycode_events.snapshot | 7 ++++++ .../3a-moddn-dn-modup-up/native_posix.keymap | 13 ++++++++++ app/tests/hold-tap/balanced/3a/events.patterns | 4 --- .../hold-tap/balanced/3a/keycode_events.snapshot | 7 ------ app/tests/hold-tap/balanced/3a/native_posix.keymap | 13 ---------- .../3b-moddn-dn-modup-timer-up/events.patterns | 4 +++ .../keycode_events.snapshot | 7 ++++++ .../3b-moddn-dn-modup-timer-up/native_posix.keymap | 14 +++++++++++ app/tests/hold-tap/balanced/3b/events.patterns | 4 --- .../hold-tap/balanced/3b/keycode_events.snapshot | 7 ------ app/tests/hold-tap/balanced/3b/native_posix.keymap | 14 ----------- .../balanced/3c-kcdn-dn-kcup-up/events.patterns | 4 +++ .../3c-kcdn-dn-kcup-up/keycode_events.snapshot | 7 ++++++ .../3c-kcdn-dn-kcup-up/native_posix.keymap | 13 ++++++++++ app/tests/hold-tap/balanced/3c/events.patterns | 4 --- .../hold-tap/balanced/3c/keycode_events.snapshot | 7 ------ app/tests/hold-tap/balanced/3c/native_posix.keymap | 13 ---------- .../3d-kcdn-dn-kcup-timer-up/events.patterns | 4 +++ .../keycode_events.snapshot | 7 ++++++ .../3d-kcdn-dn-kcup-timer-up/native_posix.keymap | 13 ++++++++++ app/tests/hold-tap/balanced/3d/events.patterns | 4 --- .../hold-tap/balanced/3d/keycode_events.snapshot | 7 ------ app/tests/hold-tap/balanced/3d/native_posix.keymap | 13 ---------- .../4a-dn-htdn-timer-htup-up/events.patterns | 4 +++ .../keycode_events.snapshot | 10 ++++++++ .../4a-dn-htdn-timer-htup-up/native_posix.keymap | 14 +++++++++++ .../4a-dn-kcdn-timer-kcup-up/events.patterns | 4 +++ .../keycode_events.snapshot | 7 ++++++ .../4a-dn-kcdn-timer-kcup-up/native_posix.keymap | 14 +++++++++++ .../hold-tap/balanced/4a-nested/events.patterns | 4 --- .../balanced/4a-nested/keycode_events.snapshot | 10 -------- .../balanced/4a-nested/native_posix.keymap | 14 ----------- app/tests/hold-tap/balanced/4a/events.patterns | 4 --- .../hold-tap/balanced/4a/keycode_events.snapshot | 7 ------ app/tests/hold-tap/balanced/4a/native_posix.keymap | 14 ----------- .../4b-dn-kcdn-kcup-timer-up/events.patterns | 4 +++ .../keycode_events.snapshot | 7 ++++++ .../4b-dn-kcdn-kcup-timer-up/native_posix.keymap | 14 +++++++++++ app/tests/hold-tap/balanced/4b/events.patterns | 4 --- .../hold-tap/balanced/4b/keycode_events.snapshot | 7 ------ app/tests/hold-tap/balanced/4b/native_posix.keymap | 14 ----------- .../balanced/4c-dn-kcdn-kcup-up/events.patterns | 4 +++ .../4c-dn-kcdn-kcup-up/keycode_events.snapshot | 7 ++++++ .../4c-dn-kcdn-kcup-up/native_posix.keymap | 14 +++++++++++ app/tests/hold-tap/balanced/4c/events.patterns | 4 --- .../hold-tap/balanced/4c/keycode_events.snapshot | 7 ------ app/tests/hold-tap/balanced/4c/native_posix.keymap | 14 ----------- .../4d-dn-kcdn-timer-up-kcup/events.patterns | 4 +++ .../keycode_events.snapshot | 7 ++++++ .../4d-dn-kcdn-timer-up-kcup/native_posix.keymap | 14 +++++++++++ app/tests/hold-tap/balanced/4d/events.patterns | 4 --- .../hold-tap/balanced/4d/keycode_events.snapshot | 7 ------ app/tests/hold-tap/balanced/4d/native_posix.keymap | 14 ----------- .../hold-preferred/1-dn-up/events.patterns | 4 +++ .../hold-preferred/1-dn-up/keycode_events.snapshot | 5 ++++ .../hold-preferred/1-dn-up/native_posix.keymap | 11 ++++++++ .../hold-tap/hold-preferred/1/events.patterns | 4 --- .../hold-preferred/1/keycode_events.snapshot | 5 ---- .../hold-tap/hold-preferred/1/native_posix.keymap | 11 -------- .../hold-preferred/2-dn-timer-up/events.patterns | 4 +++ .../2-dn-timer-up/keycode_events.snapshot | 5 ++++ .../2-dn-timer-up/native_posix.keymap | 11 ++++++++ .../hold-tap/hold-preferred/2/events.patterns | 4 --- .../hold-preferred/2/keycode_events.snapshot | 5 ---- .../hold-tap/hold-preferred/2/native_posix.keymap | 11 -------- .../3a-moddn-dn-modup-up/events.patterns | 4 +++ .../3a-moddn-dn-modup-up/keycode_events.snapshot | 7 ++++++ .../3a-moddn-dn-modup-up/native_posix.keymap | 13 ++++++++++ .../hold-tap/hold-preferred/3a/events.patterns | 4 --- .../hold-preferred/3a/keycode_events.snapshot | 7 ------ .../hold-tap/hold-preferred/3a/native_posix.keymap | 13 ---------- .../3b-moddn-dn-modup-timer-up/events.patterns | 4 +++ .../keycode_events.snapshot | 7 ++++++ .../3b-moddn-dn-modup-timer-up/native_posix.keymap | 14 +++++++++++ .../hold-tap/hold-preferred/3b/events.patterns | 4 --- .../hold-preferred/3b/keycode_events.snapshot | 7 ------ .../hold-tap/hold-preferred/3b/native_posix.keymap | 14 ----------- .../3c-kcdn-dn-kcup-up/events.patterns | 4 +++ .../3c-kcdn-dn-kcup-up/keycode_events.snapshot | 7 ++++++ .../3c-kcdn-dn-kcup-up/native_posix.keymap | 13 ++++++++++ .../hold-tap/hold-preferred/3c/events.patterns | 4 --- .../hold-preferred/3c/keycode_events.snapshot | 7 ------ .../hold-tap/hold-preferred/3c/native_posix.keymap | 13 ---------- .../3d-kcdn-dn-kcup-timer-up/events.patterns | 4 +++ .../keycode_events.snapshot | 7 ++++++ .../3d-kcdn-dn-kcup-timer-up/native_posix.keymap | 13 ++++++++++ .../hold-tap/hold-preferred/3d/events.patterns | 4 --- .../hold-preferred/3d/keycode_events.snapshot | 7 ------ .../hold-tap/hold-preferred/3d/native_posix.keymap | 13 ---------- .../4a-dn-htdn-timer-htup-up/events.patterns | 4 +++ .../keycode_events.snapshot | 10 ++++++++ .../4a-dn-htdn-timer-htup-up/native_posix.keymap | 14 +++++++++++ .../4a-dn-kcdn-timer-kcup-up/events.patterns | 4 +++ .../keycode_events.snapshot | 7 ++++++ .../4a-dn-kcdn-timer-kcup-up/native_posix.keymap | 14 +++++++++++ .../hold-preferred/4a-nested/events.patterns | 4 --- .../4a-nested/keycode_events.snapshot | 10 -------- .../hold-preferred/4a-nested/native_posix.keymap | 14 ----------- .../hold-tap/hold-preferred/4a/events.patterns | 4 --- .../hold-preferred/4a/keycode_events.snapshot | 7 ------ .../hold-tap/hold-preferred/4a/native_posix.keymap | 14 ----------- .../4b-dn-kcdn-kcup-timer-up/events.patterns | 4 +++ .../keycode_events.snapshot | 7 ++++++ .../4b-dn-kcdn-kcup-timer-up/native_posix.keymap | 14 +++++++++++ .../hold-tap/hold-preferred/4b/events.patterns | 4 --- .../hold-preferred/4b/keycode_events.snapshot | 7 ------ .../hold-tap/hold-preferred/4b/native_posix.keymap | 14 ----------- .../4c-dn-kcdn-kcup-up/events.patterns | 4 +++ .../4c-dn-kcdn-kcup-up/keycode_events.snapshot | 7 ++++++ .../4c-dn-kcdn-kcup-up/native_posix.keymap | 14 +++++++++++ .../hold-tap/hold-preferred/4c/events.patterns | 4 --- .../hold-preferred/4c/keycode_events.snapshot | 7 ------ .../hold-tap/hold-preferred/4c/native_posix.keymap | 14 ----------- .../4d-dn-kcdn-timer-up-kcup/events.patterns | 4 +++ .../keycode_events.snapshot | 7 ++++++ .../4d-dn-kcdn-timer-up-kcup/native_posix.keymap | 14 +++++++++++ .../hold-tap/hold-preferred/4d/events.patterns | 4 --- .../hold-preferred/4d/keycode_events.snapshot | 7 ------ .../hold-tap/hold-preferred/4d/native_posix.keymap | 14 ----------- .../hold-tap/tap-preferred/1-dn-up/events.patterns | 4 +++ .../tap-preferred/1-dn-up/keycode_events.snapshot | 5 ++++ .../tap-preferred/1-dn-up/native_posix.keymap | 11 ++++++++ app/tests/hold-tap/tap-preferred/1/events.patterns | 4 --- .../tap-preferred/1/keycode_events.snapshot | 5 ---- .../hold-tap/tap-preferred/1/native_posix.keymap | 11 -------- .../tap-preferred/2-dn-timer-up/events.patterns | 4 +++ .../2-dn-timer-up/keycode_events.snapshot | 5 ++++ .../2-dn-timer-up/native_posix.keymap | 11 ++++++++ app/tests/hold-tap/tap-preferred/2/events.patterns | 4 --- .../tap-preferred/2/keycode_events.snapshot | 5 ---- .../hold-tap/tap-preferred/2/native_posix.keymap | 11 -------- .../3a-moddn-dn-modup-up/events.patterns | 4 +++ .../3a-moddn-dn-modup-up/keycode_events.snapshot | 7 ++++++ .../3a-moddn-dn-modup-up/native_posix.keymap | 13 ++++++++++ .../hold-tap/tap-preferred/3a/events.patterns | 4 --- .../tap-preferred/3a/keycode_events.snapshot | 7 ------ .../hold-tap/tap-preferred/3a/native_posix.keymap | 13 ---------- .../3b-moddn-dn-modup-timer-up/events.patterns | 4 +++ .../keycode_events.snapshot | 7 ++++++ .../3b-moddn-dn-modup-timer-up/native_posix.keymap | 14 +++++++++++ .../hold-tap/tap-preferred/3b/events.patterns | 4 --- .../tap-preferred/3b/keycode_events.snapshot | 7 ------ .../hold-tap/tap-preferred/3b/native_posix.keymap | 14 ----------- .../3c-kcdn-dn-kcup-up/events.patterns | 4 +++ .../3c-kcdn-dn-kcup-up/keycode_events.snapshot | 7 ++++++ .../3c-kcdn-dn-kcup-up/native_posix.keymap | 13 ++++++++++ .../hold-tap/tap-preferred/3c/events.patterns | 4 --- .../tap-preferred/3c/keycode_events.snapshot | 7 ------ .../hold-tap/tap-preferred/3c/native_posix.keymap | 13 ---------- .../3d-kcdn-dn-kcup-timer-up/events.patterns | 4 +++ .../keycode_events.snapshot | 7 ++++++ .../3d-kcdn-dn-kcup-timer-up/native_posix.keymap | 13 ++++++++++ .../hold-tap/tap-preferred/3d/events.patterns | 4 --- .../tap-preferred/3d/keycode_events.snapshot | 7 ------ .../hold-tap/tap-preferred/3d/native_posix.keymap | 13 ---------- .../4a-dn-htdn-timer-htup-up/events.patterns | 4 +++ .../keycode_events.snapshot | 10 ++++++++ .../4a-dn-htdn-timer-htup-up/native_posix.keymap | 14 +++++++++++ .../4a-dn-kcdn-timer-kcup-up/events.patterns | 4 +++ .../keycode_events.snapshot | 7 ++++++ .../4a-dn-kcdn-timer-kcup-up/native_posix.keymap | 14 +++++++++++ .../tap-preferred/4a-nested/events.patterns | 4 --- .../4a-nested/keycode_events.snapshot | 10 -------- .../tap-preferred/4a-nested/native_posix.keymap | 14 ----------- .../hold-tap/tap-preferred/4a/events.patterns | 4 --- .../tap-preferred/4a/keycode_events.snapshot | 7 ------ .../hold-tap/tap-preferred/4a/native_posix.keymap | 14 ----------- .../4b-dn-kcdn-kcup-timer-up/events.patterns | 4 +++ .../keycode_events.snapshot | 7 ++++++ .../4b-dn-kcdn-kcup-timer-up/native_posix.keymap | 14 +++++++++++ .../hold-tap/tap-preferred/4b/events.patterns | 4 --- .../tap-preferred/4b/keycode_events.snapshot | 7 ------ .../hold-tap/tap-preferred/4b/native_posix.keymap | 14 ----------- .../4c-dn-kcdn-kcup-up/events.patterns | 4 +++ .../4c-dn-kcdn-kcup-up/keycode_events.snapshot | 7 ++++++ .../4c-dn-kcdn-kcup-up/native_posix.keymap | 14 +++++++++++ .../hold-tap/tap-preferred/4c/events.patterns | 4 --- .../tap-preferred/4c/keycode_events.snapshot | 7 ------ .../hold-tap/tap-preferred/4c/native_posix.keymap | 14 ----------- .../4d-dn-kcdn-timer-up-kcup/events.patterns | 4 +++ .../keycode_events.snapshot | 7 ++++++ .../4d-dn-kcdn-timer-up-kcup/native_posix.keymap | 14 +++++++++++ .../hold-tap/tap-preferred/4d/events.patterns | 4 --- .../tap-preferred/4d/keycode_events.snapshot | 7 ------ .../hold-tap/tap-preferred/4d/native_posix.keymap | 14 ----------- app/tests/tap-hold/balanced/behavior_keymap.dtsi | 27 -------------------- .../tap-hold/hold-preferred/behavior_keymap.dtsi | 29 ---------------------- .../tap-hold/tap-preferred/behavior_keymap.dtsi | 27 -------------------- 201 files changed, 795 insertions(+), 878 deletions(-) create mode 100644 app/tests/hold-tap/balanced/1-dn-up/events.patterns create mode 100644 app/tests/hold-tap/balanced/1-dn-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/balanced/1-dn-up/native_posix.keymap delete mode 100644 app/tests/hold-tap/balanced/1/events.patterns delete mode 100644 app/tests/hold-tap/balanced/1/keycode_events.snapshot delete mode 100644 app/tests/hold-tap/balanced/1/native_posix.keymap create mode 100644 app/tests/hold-tap/balanced/2-dn-timer-up/events.patterns create mode 100644 app/tests/hold-tap/balanced/2-dn-timer-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/balanced/2-dn-timer-up/native_posix.keymap delete mode 100644 app/tests/hold-tap/balanced/2/events.patterns delete mode 100644 app/tests/hold-tap/balanced/2/keycode_events.snapshot delete mode 100644 app/tests/hold-tap/balanced/2/native_posix.keymap create mode 100644 app/tests/hold-tap/balanced/3a-moddn-dn-modup-up/events.patterns create mode 100644 app/tests/hold-tap/balanced/3a-moddn-dn-modup-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/balanced/3a-moddn-dn-modup-up/native_posix.keymap delete mode 100644 app/tests/hold-tap/balanced/3a/events.patterns delete mode 100644 app/tests/hold-tap/balanced/3a/keycode_events.snapshot delete mode 100644 app/tests/hold-tap/balanced/3a/native_posix.keymap create mode 100644 app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/events.patterns create mode 100644 app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/native_posix.keymap delete mode 100644 app/tests/hold-tap/balanced/3b/events.patterns delete mode 100644 app/tests/hold-tap/balanced/3b/keycode_events.snapshot delete mode 100644 app/tests/hold-tap/balanced/3b/native_posix.keymap create mode 100644 app/tests/hold-tap/balanced/3c-kcdn-dn-kcup-up/events.patterns create mode 100644 app/tests/hold-tap/balanced/3c-kcdn-dn-kcup-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/balanced/3c-kcdn-dn-kcup-up/native_posix.keymap delete mode 100644 app/tests/hold-tap/balanced/3c/events.patterns delete mode 100644 app/tests/hold-tap/balanced/3c/keycode_events.snapshot delete mode 100644 app/tests/hold-tap/balanced/3c/native_posix.keymap create mode 100644 app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/events.patterns create mode 100644 app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/native_posix.keymap delete mode 100644 app/tests/hold-tap/balanced/3d/events.patterns delete mode 100644 app/tests/hold-tap/balanced/3d/keycode_events.snapshot delete mode 100644 app/tests/hold-tap/balanced/3d/native_posix.keymap create mode 100644 app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/events.patterns create mode 100644 app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/native_posix.keymap create mode 100644 app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/events.patterns create mode 100644 app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/native_posix.keymap delete mode 100644 app/tests/hold-tap/balanced/4a-nested/events.patterns delete mode 100644 app/tests/hold-tap/balanced/4a-nested/keycode_events.snapshot delete mode 100644 app/tests/hold-tap/balanced/4a-nested/native_posix.keymap delete mode 100644 app/tests/hold-tap/balanced/4a/events.patterns delete mode 100644 app/tests/hold-tap/balanced/4a/keycode_events.snapshot delete mode 100644 app/tests/hold-tap/balanced/4a/native_posix.keymap create mode 100644 app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/events.patterns create mode 100644 app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/native_posix.keymap delete mode 100644 app/tests/hold-tap/balanced/4b/events.patterns delete mode 100644 app/tests/hold-tap/balanced/4b/keycode_events.snapshot delete mode 100644 app/tests/hold-tap/balanced/4b/native_posix.keymap create mode 100644 app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/events.patterns create mode 100644 app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/native_posix.keymap delete mode 100644 app/tests/hold-tap/balanced/4c/events.patterns delete mode 100644 app/tests/hold-tap/balanced/4c/keycode_events.snapshot delete mode 100644 app/tests/hold-tap/balanced/4c/native_posix.keymap create mode 100644 app/tests/hold-tap/balanced/4d-dn-kcdn-timer-up-kcup/events.patterns create mode 100644 app/tests/hold-tap/balanced/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot create mode 100644 app/tests/hold-tap/balanced/4d-dn-kcdn-timer-up-kcup/native_posix.keymap delete mode 100644 app/tests/hold-tap/balanced/4d/events.patterns delete mode 100644 app/tests/hold-tap/balanced/4d/keycode_events.snapshot delete mode 100644 app/tests/hold-tap/balanced/4d/native_posix.keymap create mode 100644 app/tests/hold-tap/hold-preferred/1-dn-up/events.patterns create mode 100644 app/tests/hold-tap/hold-preferred/1-dn-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-preferred/1-dn-up/native_posix.keymap delete mode 100644 app/tests/hold-tap/hold-preferred/1/events.patterns delete mode 100644 app/tests/hold-tap/hold-preferred/1/keycode_events.snapshot delete mode 100644 app/tests/hold-tap/hold-preferred/1/native_posix.keymap create mode 100644 app/tests/hold-tap/hold-preferred/2-dn-timer-up/events.patterns create mode 100644 app/tests/hold-tap/hold-preferred/2-dn-timer-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-preferred/2-dn-timer-up/native_posix.keymap delete mode 100644 app/tests/hold-tap/hold-preferred/2/events.patterns delete mode 100644 app/tests/hold-tap/hold-preferred/2/keycode_events.snapshot delete mode 100644 app/tests/hold-tap/hold-preferred/2/native_posix.keymap create mode 100644 app/tests/hold-tap/hold-preferred/3a-moddn-dn-modup-up/events.patterns create mode 100644 app/tests/hold-tap/hold-preferred/3a-moddn-dn-modup-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-preferred/3a-moddn-dn-modup-up/native_posix.keymap delete mode 100644 app/tests/hold-tap/hold-preferred/3a/events.patterns delete mode 100644 app/tests/hold-tap/hold-preferred/3a/keycode_events.snapshot delete mode 100644 app/tests/hold-tap/hold-preferred/3a/native_posix.keymap create mode 100644 app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/events.patterns create mode 100644 app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/native_posix.keymap delete mode 100644 app/tests/hold-tap/hold-preferred/3b/events.patterns delete mode 100644 app/tests/hold-tap/hold-preferred/3b/keycode_events.snapshot delete mode 100644 app/tests/hold-tap/hold-preferred/3b/native_posix.keymap create mode 100644 app/tests/hold-tap/hold-preferred/3c-kcdn-dn-kcup-up/events.patterns create mode 100644 app/tests/hold-tap/hold-preferred/3c-kcdn-dn-kcup-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-preferred/3c-kcdn-dn-kcup-up/native_posix.keymap delete mode 100644 app/tests/hold-tap/hold-preferred/3c/events.patterns delete mode 100644 app/tests/hold-tap/hold-preferred/3c/keycode_events.snapshot delete mode 100644 app/tests/hold-tap/hold-preferred/3c/native_posix.keymap create mode 100644 app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/events.patterns create mode 100644 app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/native_posix.keymap delete mode 100644 app/tests/hold-tap/hold-preferred/3d/events.patterns delete mode 100644 app/tests/hold-tap/hold-preferred/3d/keycode_events.snapshot delete mode 100644 app/tests/hold-tap/hold-preferred/3d/native_posix.keymap create mode 100644 app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/events.patterns create mode 100644 app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/native_posix.keymap create mode 100644 app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/events.patterns create mode 100644 app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/native_posix.keymap delete mode 100644 app/tests/hold-tap/hold-preferred/4a-nested/events.patterns delete mode 100644 app/tests/hold-tap/hold-preferred/4a-nested/keycode_events.snapshot delete mode 100644 app/tests/hold-tap/hold-preferred/4a-nested/native_posix.keymap delete mode 100644 app/tests/hold-tap/hold-preferred/4a/events.patterns delete mode 100644 app/tests/hold-tap/hold-preferred/4a/keycode_events.snapshot delete mode 100644 app/tests/hold-tap/hold-preferred/4a/native_posix.keymap create mode 100644 app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/events.patterns create mode 100644 app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/native_posix.keymap delete mode 100644 app/tests/hold-tap/hold-preferred/4b/events.patterns delete mode 100644 app/tests/hold-tap/hold-preferred/4b/keycode_events.snapshot delete mode 100644 app/tests/hold-tap/hold-preferred/4b/native_posix.keymap create mode 100644 app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/events.patterns create mode 100644 app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/native_posix.keymap delete mode 100644 app/tests/hold-tap/hold-preferred/4c/events.patterns delete mode 100644 app/tests/hold-tap/hold-preferred/4c/keycode_events.snapshot delete mode 100644 app/tests/hold-tap/hold-preferred/4c/native_posix.keymap create mode 100644 app/tests/hold-tap/hold-preferred/4d-dn-kcdn-timer-up-kcup/events.patterns create mode 100644 app/tests/hold-tap/hold-preferred/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot create mode 100644 app/tests/hold-tap/hold-preferred/4d-dn-kcdn-timer-up-kcup/native_posix.keymap delete mode 100644 app/tests/hold-tap/hold-preferred/4d/events.patterns delete mode 100644 app/tests/hold-tap/hold-preferred/4d/keycode_events.snapshot delete mode 100644 app/tests/hold-tap/hold-preferred/4d/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-preferred/1-dn-up/events.patterns create mode 100644 app/tests/hold-tap/tap-preferred/1-dn-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-preferred/1-dn-up/native_posix.keymap delete mode 100644 app/tests/hold-tap/tap-preferred/1/events.patterns delete mode 100644 app/tests/hold-tap/tap-preferred/1/keycode_events.snapshot delete mode 100644 app/tests/hold-tap/tap-preferred/1/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-preferred/2-dn-timer-up/events.patterns create mode 100644 app/tests/hold-tap/tap-preferred/2-dn-timer-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-preferred/2-dn-timer-up/native_posix.keymap delete mode 100644 app/tests/hold-tap/tap-preferred/2/events.patterns delete mode 100644 app/tests/hold-tap/tap-preferred/2/keycode_events.snapshot delete mode 100644 app/tests/hold-tap/tap-preferred/2/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-preferred/3a-moddn-dn-modup-up/events.patterns create mode 100644 app/tests/hold-tap/tap-preferred/3a-moddn-dn-modup-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-preferred/3a-moddn-dn-modup-up/native_posix.keymap delete mode 100644 app/tests/hold-tap/tap-preferred/3a/events.patterns delete mode 100644 app/tests/hold-tap/tap-preferred/3a/keycode_events.snapshot delete mode 100644 app/tests/hold-tap/tap-preferred/3a/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/events.patterns create mode 100644 app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/native_posix.keymap delete mode 100644 app/tests/hold-tap/tap-preferred/3b/events.patterns delete mode 100644 app/tests/hold-tap/tap-preferred/3b/keycode_events.snapshot delete mode 100644 app/tests/hold-tap/tap-preferred/3b/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-preferred/3c-kcdn-dn-kcup-up/events.patterns create mode 100644 app/tests/hold-tap/tap-preferred/3c-kcdn-dn-kcup-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-preferred/3c-kcdn-dn-kcup-up/native_posix.keymap delete mode 100644 app/tests/hold-tap/tap-preferred/3c/events.patterns delete mode 100644 app/tests/hold-tap/tap-preferred/3c/keycode_events.snapshot delete mode 100644 app/tests/hold-tap/tap-preferred/3c/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/events.patterns create mode 100644 app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/native_posix.keymap delete mode 100644 app/tests/hold-tap/tap-preferred/3d/events.patterns delete mode 100644 app/tests/hold-tap/tap-preferred/3d/keycode_events.snapshot delete mode 100644 app/tests/hold-tap/tap-preferred/3d/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/events.patterns create mode 100644 app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/events.patterns create mode 100644 app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/native_posix.keymap delete mode 100644 app/tests/hold-tap/tap-preferred/4a-nested/events.patterns delete mode 100644 app/tests/hold-tap/tap-preferred/4a-nested/keycode_events.snapshot delete mode 100644 app/tests/hold-tap/tap-preferred/4a-nested/native_posix.keymap delete mode 100644 app/tests/hold-tap/tap-preferred/4a/events.patterns delete mode 100644 app/tests/hold-tap/tap-preferred/4a/keycode_events.snapshot delete mode 100644 app/tests/hold-tap/tap-preferred/4a/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/events.patterns create mode 100644 app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/native_posix.keymap delete mode 100644 app/tests/hold-tap/tap-preferred/4b/events.patterns delete mode 100644 app/tests/hold-tap/tap-preferred/4b/keycode_events.snapshot delete mode 100644 app/tests/hold-tap/tap-preferred/4b/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-preferred/4c-dn-kcdn-kcup-up/events.patterns create mode 100644 app/tests/hold-tap/tap-preferred/4c-dn-kcdn-kcup-up/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-preferred/4c-dn-kcdn-kcup-up/native_posix.keymap delete mode 100644 app/tests/hold-tap/tap-preferred/4c/events.patterns delete mode 100644 app/tests/hold-tap/tap-preferred/4c/keycode_events.snapshot delete mode 100644 app/tests/hold-tap/tap-preferred/4c/native_posix.keymap create mode 100644 app/tests/hold-tap/tap-preferred/4d-dn-kcdn-timer-up-kcup/events.patterns create mode 100644 app/tests/hold-tap/tap-preferred/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot create mode 100644 app/tests/hold-tap/tap-preferred/4d-dn-kcdn-timer-up-kcup/native_posix.keymap delete mode 100644 app/tests/hold-tap/tap-preferred/4d/events.patterns delete mode 100644 app/tests/hold-tap/tap-preferred/4d/keycode_events.snapshot delete mode 100644 app/tests/hold-tap/tap-preferred/4d/native_posix.keymap delete mode 100644 app/tests/tap-hold/balanced/behavior_keymap.dtsi delete mode 100644 app/tests/tap-hold/hold-preferred/behavior_keymap.dtsi delete mode 100644 app/tests/tap-hold/tap-preferred/behavior_keymap.dtsi diff --git a/app/tests/hold-tap/balanced/1-dn-up/events.patterns b/app/tests/hold-tap/balanced/1-dn-up/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/balanced/1-dn-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/1-dn-up/keycode_events.snapshot b/app/tests/hold-tap/balanced/1-dn-up/keycode_events.snapshot new file mode 100644 index 0000000..5f6a266 --- /dev/null +++ b/app/tests/hold-tap/balanced/1-dn-up/keycode_events.snapshot @@ -0,0 +1,5 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (balanced event 0) +kp_pressed: usage_page 0x07 keycode 0x09 +kp_released: usage_page 0x07 keycode 0x09 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/1-dn-up/native_posix.keymap b/app/tests/hold-tap/balanced/1-dn-up/native_posix.keymap new file mode 100644 index 0000000..10336ef --- /dev/null +++ b/app/tests/hold-tap/balanced/1-dn-up/native_posix.keymap @@ -0,0 +1,11 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/1/events.patterns b/app/tests/hold-tap/balanced/1/events.patterns deleted file mode 100644 index fdf2b15..0000000 --- a/app/tests/hold-tap/balanced/1/events.patterns +++ /dev/null @@ -1,4 +0,0 @@ -s/.*hid_listener_keycode/kp/p -s/.*mo_keymap_binding/mo/p -s/.*on_hold_tap_binding/ht_binding/p -s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/1/keycode_events.snapshot b/app/tests/hold-tap/balanced/1/keycode_events.snapshot deleted file mode 100644 index 5f6a266..0000000 --- a/app/tests/hold-tap/balanced/1/keycode_events.snapshot +++ /dev/null @@ -1,5 +0,0 @@ -ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided tap (balanced event 0) -kp_pressed: usage_page 0x07 keycode 0x09 -kp_released: usage_page 0x07 keycode 0x09 -ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/1/native_posix.keymap b/app/tests/hold-tap/balanced/1/native_posix.keymap deleted file mode 100644 index 10336ef..0000000 --- a/app/tests/hold-tap/balanced/1/native_posix.keymap +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include -#include -#include "../behavior_keymap.dtsi" - -&kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - >; -}; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/2-dn-timer-up/events.patterns b/app/tests/hold-tap/balanced/2-dn-timer-up/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/balanced/2-dn-timer-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/2-dn-timer-up/keycode_events.snapshot b/app/tests/hold-tap/balanced/2-dn-timer-up/keycode_events.snapshot new file mode 100644 index 0000000..ddda1ae --- /dev/null +++ b/app/tests/hold-tap/balanced/2-dn-timer-up/keycode_events.snapshot @@ -0,0 +1,5 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (balanced event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_released: usage_page 0x07 keycode 0xe1 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/2-dn-timer-up/native_posix.keymap b/app/tests/hold-tap/balanced/2-dn-timer-up/native_posix.keymap new file mode 100644 index 0000000..aa93b86 --- /dev/null +++ b/app/tests/hold-tap/balanced/2-dn-timer-up/native_posix.keymap @@ -0,0 +1,11 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,500) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/2/events.patterns b/app/tests/hold-tap/balanced/2/events.patterns deleted file mode 100644 index fdf2b15..0000000 --- a/app/tests/hold-tap/balanced/2/events.patterns +++ /dev/null @@ -1,4 +0,0 @@ -s/.*hid_listener_keycode/kp/p -s/.*mo_keymap_binding/mo/p -s/.*on_hold_tap_binding/ht_binding/p -s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/2/keycode_events.snapshot b/app/tests/hold-tap/balanced/2/keycode_events.snapshot deleted file mode 100644 index ddda1ae..0000000 --- a/app/tests/hold-tap/balanced/2/keycode_events.snapshot +++ /dev/null @@ -1,5 +0,0 @@ -ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold (balanced event 3) -kp_pressed: usage_page 0x07 keycode 0xe1 -kp_released: usage_page 0x07 keycode 0xe1 -ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/2/native_posix.keymap b/app/tests/hold-tap/balanced/2/native_posix.keymap deleted file mode 100644 index aa93b86..0000000 --- a/app/tests/hold-tap/balanced/2/native_posix.keymap +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include -#include -#include "../behavior_keymap.dtsi" - -&kscan { - events = < - ZMK_MOCK_PRESS(0,0,500) - ZMK_MOCK_RELEASE(0,0,10) - >; -}; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/3a-moddn-dn-modup-up/events.patterns b/app/tests/hold-tap/balanced/3a-moddn-dn-modup-up/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/balanced/3a-moddn-dn-modup-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/3a-moddn-dn-modup-up/keycode_events.snapshot b/app/tests/hold-tap/balanced/3a-moddn-dn-modup-up/keycode_events.snapshot new file mode 100644 index 0000000..a435103 --- /dev/null +++ b/app/tests/hold-tap/balanced/3a-moddn-dn-modup-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0xe4 +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (balanced event 0) +kp_pressed: usage_page 0x07 keycode 0x09 +kp_released: usage_page 0x07 keycode 0xe4 +kp_released: usage_page 0x07 keycode 0x09 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/3a-moddn-dn-modup-up/native_posix.keymap b/app/tests/hold-tap/balanced/3a-moddn-dn-modup-up/native_posix.keymap new file mode 100644 index 0000000..6f08689 --- /dev/null +++ b/app/tests/hold-tap/balanced/3a-moddn-dn-modup-up/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ + ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/3a/events.patterns b/app/tests/hold-tap/balanced/3a/events.patterns deleted file mode 100644 index fdf2b15..0000000 --- a/app/tests/hold-tap/balanced/3a/events.patterns +++ /dev/null @@ -1,4 +0,0 @@ -s/.*hid_listener_keycode/kp/p -s/.*mo_keymap_binding/mo/p -s/.*on_hold_tap_binding/ht_binding/p -s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/3a/keycode_events.snapshot b/app/tests/hold-tap/balanced/3a/keycode_events.snapshot deleted file mode 100644 index a435103..0000000 --- a/app/tests/hold-tap/balanced/3a/keycode_events.snapshot +++ /dev/null @@ -1,7 +0,0 @@ -kp_pressed: usage_page 0x07 keycode 0xe4 -ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided tap (balanced event 0) -kp_pressed: usage_page 0x07 keycode 0x09 -kp_released: usage_page 0x07 keycode 0xe4 -kp_released: usage_page 0x07 keycode 0x09 -ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/3a/native_posix.keymap b/app/tests/hold-tap/balanced/3a/native_posix.keymap deleted file mode 100644 index 6f08689..0000000 --- a/app/tests/hold-tap/balanced/3a/native_posix.keymap +++ /dev/null @@ -1,13 +0,0 @@ -#include -#include -#include -#include "../behavior_keymap.dtsi" - -&kscan { - events = < - ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ - ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ - ZMK_MOCK_RELEASE(1,1,10) - ZMK_MOCK_RELEASE(0,0,10) - >; -}; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/events.patterns b/app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/keycode_events.snapshot new file mode 100644 index 0000000..c0da94f --- /dev/null +++ b/app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0xe4 +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (balanced event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_released: usage_page 0x07 keycode 0xe4 +kp_released: usage_page 0x07 keycode 0xe1 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/native_posix.keymap b/app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/native_posix.keymap new file mode 100644 index 0000000..392d328 --- /dev/null +++ b/app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ + ZMK_MOCK_PRESS(0,0,50) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,1,300) + /*timer*/ + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/3b/events.patterns b/app/tests/hold-tap/balanced/3b/events.patterns deleted file mode 100644 index fdf2b15..0000000 --- a/app/tests/hold-tap/balanced/3b/events.patterns +++ /dev/null @@ -1,4 +0,0 @@ -s/.*hid_listener_keycode/kp/p -s/.*mo_keymap_binding/mo/p -s/.*on_hold_tap_binding/ht_binding/p -s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/3b/keycode_events.snapshot b/app/tests/hold-tap/balanced/3b/keycode_events.snapshot deleted file mode 100644 index c0da94f..0000000 --- a/app/tests/hold-tap/balanced/3b/keycode_events.snapshot +++ /dev/null @@ -1,7 +0,0 @@ -kp_pressed: usage_page 0x07 keycode 0xe4 -ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold (balanced event 3) -kp_pressed: usage_page 0x07 keycode 0xe1 -kp_released: usage_page 0x07 keycode 0xe4 -kp_released: usage_page 0x07 keycode 0xe1 -ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/3b/native_posix.keymap b/app/tests/hold-tap/balanced/3b/native_posix.keymap deleted file mode 100644 index 392d328..0000000 --- a/app/tests/hold-tap/balanced/3b/native_posix.keymap +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include -#include -#include "../behavior_keymap.dtsi" - -&kscan { - events = < - ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ - ZMK_MOCK_PRESS(0,0,50) /*mt f-shift */ - ZMK_MOCK_RELEASE(1,1,300) - /*timer*/ - ZMK_MOCK_RELEASE(0,0,10) - >; -}; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/3c-kcdn-dn-kcup-up/events.patterns b/app/tests/hold-tap/balanced/3c-kcdn-dn-kcup-up/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/balanced/3c-kcdn-dn-kcup-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/3c-kcdn-dn-kcup-up/keycode_events.snapshot b/app/tests/hold-tap/balanced/3c-kcdn-dn-kcup-up/keycode_events.snapshot new file mode 100644 index 0000000..ce6e7b7 --- /dev/null +++ b/app/tests/hold-tap/balanced/3c-kcdn-dn-kcup-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0x07 +ht_binding_pressed: 0 new undecided hold_tap +kp_released: usage_page 0x07 keycode 0x07 +ht_decide: 0 decided tap (balanced event 0) +kp_pressed: usage_page 0x07 keycode 0x09 +kp_released: usage_page 0x07 keycode 0x09 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/3c-kcdn-dn-kcup-up/native_posix.keymap b/app/tests/hold-tap/balanced/3c-kcdn-dn-kcup-up/native_posix.keymap new file mode 100644 index 0000000..77306cd --- /dev/null +++ b/app/tests/hold-tap/balanced/3c-kcdn-dn-kcup-up/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) /*d*/ + ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/3c/events.patterns b/app/tests/hold-tap/balanced/3c/events.patterns deleted file mode 100644 index fdf2b15..0000000 --- a/app/tests/hold-tap/balanced/3c/events.patterns +++ /dev/null @@ -1,4 +0,0 @@ -s/.*hid_listener_keycode/kp/p -s/.*mo_keymap_binding/mo/p -s/.*on_hold_tap_binding/ht_binding/p -s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/3c/keycode_events.snapshot b/app/tests/hold-tap/balanced/3c/keycode_events.snapshot deleted file mode 100644 index ce6e7b7..0000000 --- a/app/tests/hold-tap/balanced/3c/keycode_events.snapshot +++ /dev/null @@ -1,7 +0,0 @@ -kp_pressed: usage_page 0x07 keycode 0x07 -ht_binding_pressed: 0 new undecided hold_tap -kp_released: usage_page 0x07 keycode 0x07 -ht_decide: 0 decided tap (balanced event 0) -kp_pressed: usage_page 0x07 keycode 0x09 -kp_released: usage_page 0x07 keycode 0x09 -ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/3c/native_posix.keymap b/app/tests/hold-tap/balanced/3c/native_posix.keymap deleted file mode 100644 index 77306cd..0000000 --- a/app/tests/hold-tap/balanced/3c/native_posix.keymap +++ /dev/null @@ -1,13 +0,0 @@ -#include -#include -#include -#include "../behavior_keymap.dtsi" - -&kscan { - events = < - ZMK_MOCK_PRESS(1,0,10) /*d*/ - ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) - >; -}; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/events.patterns b/app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot new file mode 100644 index 0000000..1ec384a --- /dev/null +++ b/app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0x07 +ht_binding_pressed: 0 new undecided hold_tap +kp_released: usage_page 0x07 keycode 0x07 +ht_decide: 0 decided hold (balanced event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_released: usage_page 0x07 keycode 0xe1 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/native_posix.keymap b/app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/native_posix.keymap new file mode 100644 index 0000000..1441331 --- /dev/null +++ b/app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) /* d */ + ZMK_MOCK_PRESS(0,0,100) /* mt f-shift */ + ZMK_MOCK_RELEASE(1,0,400) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/3d/events.patterns b/app/tests/hold-tap/balanced/3d/events.patterns deleted file mode 100644 index fdf2b15..0000000 --- a/app/tests/hold-tap/balanced/3d/events.patterns +++ /dev/null @@ -1,4 +0,0 @@ -s/.*hid_listener_keycode/kp/p -s/.*mo_keymap_binding/mo/p -s/.*on_hold_tap_binding/ht_binding/p -s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/3d/keycode_events.snapshot b/app/tests/hold-tap/balanced/3d/keycode_events.snapshot deleted file mode 100644 index 1ec384a..0000000 --- a/app/tests/hold-tap/balanced/3d/keycode_events.snapshot +++ /dev/null @@ -1,7 +0,0 @@ -kp_pressed: usage_page 0x07 keycode 0x07 -ht_binding_pressed: 0 new undecided hold_tap -kp_released: usage_page 0x07 keycode 0x07 -ht_decide: 0 decided hold (balanced event 3) -kp_pressed: usage_page 0x07 keycode 0xe1 -kp_released: usage_page 0x07 keycode 0xe1 -ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/3d/native_posix.keymap b/app/tests/hold-tap/balanced/3d/native_posix.keymap deleted file mode 100644 index 1441331..0000000 --- a/app/tests/hold-tap/balanced/3d/native_posix.keymap +++ /dev/null @@ -1,13 +0,0 @@ -#include -#include -#include -#include "../behavior_keymap.dtsi" - -&kscan { - events = < - ZMK_MOCK_PRESS(1,0,10) /* d */ - ZMK_MOCK_PRESS(0,0,100) /* mt f-shift */ - ZMK_MOCK_RELEASE(1,0,400) - ZMK_MOCK_RELEASE(0,0,10) - >; -}; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/events.patterns b/app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/keycode_events.snapshot b/app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/keycode_events.snapshot new file mode 100644 index 0000000..8a1980b --- /dev/null +++ b/app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/keycode_events.snapshot @@ -0,0 +1,10 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (balanced event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 +ht_binding_pressed: 1 new undecided hold_tap +ht_decide: 1 decided tap (balanced event 0) +kp_pressed: usage_page 0x07 keycode 0x0d +kp_released: usage_page 0x07 keycode 0x0d +ht_binding_released: 1 cleaning up hold-tap +kp_released: usage_page 0x07 keycode 0xe1 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/native_posix.keymap b/app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/native_posix.keymap new file mode 100644 index 0000000..c10c6d6 --- /dev/null +++ b/app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(0,1,200) + /* timer fires */ + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/events.patterns b/app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot b/app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot new file mode 100644 index 0000000..b89b21d --- /dev/null +++ b/app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (balanced event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_pressed: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0xe1 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/native_posix.keymap b/app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/native_posix.keymap new file mode 100644 index 0000000..ce163f5 --- /dev/null +++ b/app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(1,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/4a-nested/events.patterns b/app/tests/hold-tap/balanced/4a-nested/events.patterns deleted file mode 100644 index fdf2b15..0000000 --- a/app/tests/hold-tap/balanced/4a-nested/events.patterns +++ /dev/null @@ -1,4 +0,0 @@ -s/.*hid_listener_keycode/kp/p -s/.*mo_keymap_binding/mo/p -s/.*on_hold_tap_binding/ht_binding/p -s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/4a-nested/keycode_events.snapshot b/app/tests/hold-tap/balanced/4a-nested/keycode_events.snapshot deleted file mode 100644 index 8a1980b..0000000 --- a/app/tests/hold-tap/balanced/4a-nested/keycode_events.snapshot +++ /dev/null @@ -1,10 +0,0 @@ -ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold (balanced event 3) -kp_pressed: usage_page 0x07 keycode 0xe1 -ht_binding_pressed: 1 new undecided hold_tap -ht_decide: 1 decided tap (balanced event 0) -kp_pressed: usage_page 0x07 keycode 0x0d -kp_released: usage_page 0x07 keycode 0x0d -ht_binding_released: 1 cleaning up hold-tap -kp_released: usage_page 0x07 keycode 0xe1 -ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/4a-nested/native_posix.keymap b/app/tests/hold-tap/balanced/4a-nested/native_posix.keymap deleted file mode 100644 index c10c6d6..0000000 --- a/app/tests/hold-tap/balanced/4a-nested/native_posix.keymap +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include -#include -#include "../behavior_keymap.dtsi" - -&kscan { - events = < - ZMK_MOCK_PRESS(0,0,200) - ZMK_MOCK_PRESS(0,1,200) - /* timer fires */ - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) - >; -}; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/4a/events.patterns b/app/tests/hold-tap/balanced/4a/events.patterns deleted file mode 100644 index fdf2b15..0000000 --- a/app/tests/hold-tap/balanced/4a/events.patterns +++ /dev/null @@ -1,4 +0,0 @@ -s/.*hid_listener_keycode/kp/p -s/.*mo_keymap_binding/mo/p -s/.*on_hold_tap_binding/ht_binding/p -s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/4a/keycode_events.snapshot b/app/tests/hold-tap/balanced/4a/keycode_events.snapshot deleted file mode 100644 index b89b21d..0000000 --- a/app/tests/hold-tap/balanced/4a/keycode_events.snapshot +++ /dev/null @@ -1,7 +0,0 @@ -ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold (balanced event 3) -kp_pressed: usage_page 0x07 keycode 0xe1 -kp_pressed: usage_page 0x07 keycode 0x07 -kp_released: usage_page 0x07 keycode 0x07 -kp_released: usage_page 0x07 keycode 0xe1 -ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/4a/native_posix.keymap b/app/tests/hold-tap/balanced/4a/native_posix.keymap deleted file mode 100644 index ce163f5..0000000 --- a/app/tests/hold-tap/balanced/4a/native_posix.keymap +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include -#include -#include "../behavior_keymap.dtsi" - -&kscan { - events = < - ZMK_MOCK_PRESS(0,0,200) - ZMK_MOCK_PRESS(1,0,200) - /* timer fires */ - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) - >; -}; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/events.patterns b/app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot new file mode 100644 index 0000000..798e2ee --- /dev/null +++ b/app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (balanced event 2) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_pressed: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0xe1 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/native_posix.keymap b/app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/native_posix.keymap new file mode 100644 index 0000000..7abda41 --- /dev/null +++ b/app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(1,0,100) + ZMK_MOCK_RELEASE(1,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/4b/events.patterns b/app/tests/hold-tap/balanced/4b/events.patterns deleted file mode 100644 index fdf2b15..0000000 --- a/app/tests/hold-tap/balanced/4b/events.patterns +++ /dev/null @@ -1,4 +0,0 @@ -s/.*hid_listener_keycode/kp/p -s/.*mo_keymap_binding/mo/p -s/.*on_hold_tap_binding/ht_binding/p -s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/4b/keycode_events.snapshot b/app/tests/hold-tap/balanced/4b/keycode_events.snapshot deleted file mode 100644 index 798e2ee..0000000 --- a/app/tests/hold-tap/balanced/4b/keycode_events.snapshot +++ /dev/null @@ -1,7 +0,0 @@ -ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold (balanced event 2) -kp_pressed: usage_page 0x07 keycode 0xe1 -kp_pressed: usage_page 0x07 keycode 0x07 -kp_released: usage_page 0x07 keycode 0x07 -kp_released: usage_page 0x07 keycode 0xe1 -ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/4b/native_posix.keymap b/app/tests/hold-tap/balanced/4b/native_posix.keymap deleted file mode 100644 index 7abda41..0000000 --- a/app/tests/hold-tap/balanced/4b/native_posix.keymap +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include -#include -#include "../behavior_keymap.dtsi" - -&kscan { - events = < - ZMK_MOCK_PRESS(0,0,100) - ZMK_MOCK_PRESS(1,0,100) - ZMK_MOCK_RELEASE(1,0,200) - /* timer fires */ - ZMK_MOCK_RELEASE(0,0,10) - >; -}; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/events.patterns b/app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/keycode_events.snapshot b/app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/keycode_events.snapshot new file mode 100644 index 0000000..798e2ee --- /dev/null +++ b/app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (balanced event 2) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_pressed: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0xe1 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/native_posix.keymap b/app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/native_posix.keymap new file mode 100644 index 0000000..ce030af --- /dev/null +++ b/app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* timer */ + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/4c/events.patterns b/app/tests/hold-tap/balanced/4c/events.patterns deleted file mode 100644 index fdf2b15..0000000 --- a/app/tests/hold-tap/balanced/4c/events.patterns +++ /dev/null @@ -1,4 +0,0 @@ -s/.*hid_listener_keycode/kp/p -s/.*mo_keymap_binding/mo/p -s/.*on_hold_tap_binding/ht_binding/p -s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/4c/keycode_events.snapshot b/app/tests/hold-tap/balanced/4c/keycode_events.snapshot deleted file mode 100644 index 798e2ee..0000000 --- a/app/tests/hold-tap/balanced/4c/keycode_events.snapshot +++ /dev/null @@ -1,7 +0,0 @@ -ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold (balanced event 2) -kp_pressed: usage_page 0x07 keycode 0xe1 -kp_pressed: usage_page 0x07 keycode 0x07 -kp_released: usage_page 0x07 keycode 0x07 -kp_released: usage_page 0x07 keycode 0xe1 -ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/balanced/4c/native_posix.keymap b/app/tests/hold-tap/balanced/4c/native_posix.keymap deleted file mode 100644 index ce030af..0000000 --- a/app/tests/hold-tap/balanced/4c/native_posix.keymap +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include -#include -#include "../behavior_keymap.dtsi" - -&kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) - /* timer */ - >; -}; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/4d-dn-kcdn-timer-up-kcup/events.patterns b/app/tests/hold-tap/balanced/4d-dn-kcdn-timer-up-kcup/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/balanced/4d-dn-kcdn-timer-up-kcup/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot b/app/tests/hold-tap/balanced/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot new file mode 100644 index 0000000..5c9f4e3 --- /dev/null +++ b/app/tests/hold-tap/balanced/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (balanced event 0) +kp_pressed: usage_page 0x07 keycode 0x09 +kp_pressed: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0x09 +ht_binding_released: 0 cleaning up hold-tap +kp_released: usage_page 0x07 keycode 0x07 diff --git a/app/tests/hold-tap/balanced/4d-dn-kcdn-timer-up-kcup/native_posix.keymap b/app/tests/hold-tap/balanced/4d-dn-kcdn-timer-up-kcup/native_posix.keymap new file mode 100644 index 0000000..5467660 --- /dev/null +++ b/app/tests/hold-tap/balanced/4d-dn-kcdn-timer-up-kcup/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(1,0,100) + ZMK_MOCK_RELEASE(0,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(1,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/4d/events.patterns b/app/tests/hold-tap/balanced/4d/events.patterns deleted file mode 100644 index fdf2b15..0000000 --- a/app/tests/hold-tap/balanced/4d/events.patterns +++ /dev/null @@ -1,4 +0,0 @@ -s/.*hid_listener_keycode/kp/p -s/.*mo_keymap_binding/mo/p -s/.*on_hold_tap_binding/ht_binding/p -s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/balanced/4d/keycode_events.snapshot b/app/tests/hold-tap/balanced/4d/keycode_events.snapshot deleted file mode 100644 index 5c9f4e3..0000000 --- a/app/tests/hold-tap/balanced/4d/keycode_events.snapshot +++ /dev/null @@ -1,7 +0,0 @@ -ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided tap (balanced event 0) -kp_pressed: usage_page 0x07 keycode 0x09 -kp_pressed: usage_page 0x07 keycode 0x07 -kp_released: usage_page 0x07 keycode 0x09 -ht_binding_released: 0 cleaning up hold-tap -kp_released: usage_page 0x07 keycode 0x07 diff --git a/app/tests/hold-tap/balanced/4d/native_posix.keymap b/app/tests/hold-tap/balanced/4d/native_posix.keymap deleted file mode 100644 index 5467660..0000000 --- a/app/tests/hold-tap/balanced/4d/native_posix.keymap +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include -#include -#include "../behavior_keymap.dtsi" - -&kscan { - events = < - ZMK_MOCK_PRESS(0,0,100) - ZMK_MOCK_PRESS(1,0,100) - ZMK_MOCK_RELEASE(0,0,200) - /* timer fires */ - ZMK_MOCK_RELEASE(1,0,10) - >; -}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/1-dn-up/events.patterns b/app/tests/hold-tap/hold-preferred/1-dn-up/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/1-dn-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/1-dn-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/1-dn-up/keycode_events.snapshot new file mode 100644 index 0000000..cf787d8 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/1-dn-up/keycode_events.snapshot @@ -0,0 +1,5 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (hold-preferred event 0) +kp_pressed: usage_page 0x07 keycode 0x09 +kp_released: usage_page 0x07 keycode 0x09 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/1-dn-up/native_posix.keymap b/app/tests/hold-tap/hold-preferred/1-dn-up/native_posix.keymap new file mode 100644 index 0000000..10336ef --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/1-dn-up/native_posix.keymap @@ -0,0 +1,11 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/1/events.patterns b/app/tests/hold-tap/hold-preferred/1/events.patterns deleted file mode 100644 index fdf2b15..0000000 --- a/app/tests/hold-tap/hold-preferred/1/events.patterns +++ /dev/null @@ -1,4 +0,0 @@ -s/.*hid_listener_keycode/kp/p -s/.*mo_keymap_binding/mo/p -s/.*on_hold_tap_binding/ht_binding/p -s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/1/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/1/keycode_events.snapshot deleted file mode 100644 index cf787d8..0000000 --- a/app/tests/hold-tap/hold-preferred/1/keycode_events.snapshot +++ /dev/null @@ -1,5 +0,0 @@ -ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided tap (hold-preferred event 0) -kp_pressed: usage_page 0x07 keycode 0x09 -kp_released: usage_page 0x07 keycode 0x09 -ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/1/native_posix.keymap b/app/tests/hold-tap/hold-preferred/1/native_posix.keymap deleted file mode 100644 index 10336ef..0000000 --- a/app/tests/hold-tap/hold-preferred/1/native_posix.keymap +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include -#include -#include "../behavior_keymap.dtsi" - -&kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - >; -}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/2-dn-timer-up/events.patterns b/app/tests/hold-tap/hold-preferred/2-dn-timer-up/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/2-dn-timer-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/2-dn-timer-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/2-dn-timer-up/keycode_events.snapshot new file mode 100644 index 0000000..03329d5 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/2-dn-timer-up/keycode_events.snapshot @@ -0,0 +1,5 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (hold-preferred event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_released: usage_page 0x07 keycode 0xe1 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/2-dn-timer-up/native_posix.keymap b/app/tests/hold-tap/hold-preferred/2-dn-timer-up/native_posix.keymap new file mode 100644 index 0000000..aa93b86 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/2-dn-timer-up/native_posix.keymap @@ -0,0 +1,11 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,500) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/2/events.patterns b/app/tests/hold-tap/hold-preferred/2/events.patterns deleted file mode 100644 index fdf2b15..0000000 --- a/app/tests/hold-tap/hold-preferred/2/events.patterns +++ /dev/null @@ -1,4 +0,0 @@ -s/.*hid_listener_keycode/kp/p -s/.*mo_keymap_binding/mo/p -s/.*on_hold_tap_binding/ht_binding/p -s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/2/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/2/keycode_events.snapshot deleted file mode 100644 index 03329d5..0000000 --- a/app/tests/hold-tap/hold-preferred/2/keycode_events.snapshot +++ /dev/null @@ -1,5 +0,0 @@ -ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold (hold-preferred event 3) -kp_pressed: usage_page 0x07 keycode 0xe1 -kp_released: usage_page 0x07 keycode 0xe1 -ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/2/native_posix.keymap b/app/tests/hold-tap/hold-preferred/2/native_posix.keymap deleted file mode 100644 index aa93b86..0000000 --- a/app/tests/hold-tap/hold-preferred/2/native_posix.keymap +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include -#include -#include "../behavior_keymap.dtsi" - -&kscan { - events = < - ZMK_MOCK_PRESS(0,0,500) - ZMK_MOCK_RELEASE(0,0,10) - >; -}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/3a-moddn-dn-modup-up/events.patterns b/app/tests/hold-tap/hold-preferred/3a-moddn-dn-modup-up/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/3a-moddn-dn-modup-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/3a-moddn-dn-modup-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/3a-moddn-dn-modup-up/keycode_events.snapshot new file mode 100644 index 0000000..adf4fe2 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/3a-moddn-dn-modup-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0xe4 +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (hold-preferred event 0) +kp_pressed: usage_page 0x07 keycode 0x09 +kp_released: usage_page 0x07 keycode 0xe4 +kp_released: usage_page 0x07 keycode 0x09 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/3a-moddn-dn-modup-up/native_posix.keymap b/app/tests/hold-tap/hold-preferred/3a-moddn-dn-modup-up/native_posix.keymap new file mode 100644 index 0000000..6f08689 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/3a-moddn-dn-modup-up/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ + ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/3a/events.patterns b/app/tests/hold-tap/hold-preferred/3a/events.patterns deleted file mode 100644 index fdf2b15..0000000 --- a/app/tests/hold-tap/hold-preferred/3a/events.patterns +++ /dev/null @@ -1,4 +0,0 @@ -s/.*hid_listener_keycode/kp/p -s/.*mo_keymap_binding/mo/p -s/.*on_hold_tap_binding/ht_binding/p -s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/3a/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/3a/keycode_events.snapshot deleted file mode 100644 index adf4fe2..0000000 --- a/app/tests/hold-tap/hold-preferred/3a/keycode_events.snapshot +++ /dev/null @@ -1,7 +0,0 @@ -kp_pressed: usage_page 0x07 keycode 0xe4 -ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided tap (hold-preferred event 0) -kp_pressed: usage_page 0x07 keycode 0x09 -kp_released: usage_page 0x07 keycode 0xe4 -kp_released: usage_page 0x07 keycode 0x09 -ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/3a/native_posix.keymap b/app/tests/hold-tap/hold-preferred/3a/native_posix.keymap deleted file mode 100644 index 6f08689..0000000 --- a/app/tests/hold-tap/hold-preferred/3a/native_posix.keymap +++ /dev/null @@ -1,13 +0,0 @@ -#include -#include -#include -#include "../behavior_keymap.dtsi" - -&kscan { - events = < - ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ - ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ - ZMK_MOCK_RELEASE(1,1,10) - ZMK_MOCK_RELEASE(0,0,10) - >; -}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/events.patterns b/app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/keycode_events.snapshot new file mode 100644 index 0000000..69b64a9 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0xe4 +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (hold-preferred event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_released: usage_page 0x07 keycode 0xe4 +kp_released: usage_page 0x07 keycode 0xe1 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/native_posix.keymap b/app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/native_posix.keymap new file mode 100644 index 0000000..392d328 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ + ZMK_MOCK_PRESS(0,0,50) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,1,300) + /*timer*/ + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/3b/events.patterns b/app/tests/hold-tap/hold-preferred/3b/events.patterns deleted file mode 100644 index fdf2b15..0000000 --- a/app/tests/hold-tap/hold-preferred/3b/events.patterns +++ /dev/null @@ -1,4 +0,0 @@ -s/.*hid_listener_keycode/kp/p -s/.*mo_keymap_binding/mo/p -s/.*on_hold_tap_binding/ht_binding/p -s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/3b/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/3b/keycode_events.snapshot deleted file mode 100644 index 69b64a9..0000000 --- a/app/tests/hold-tap/hold-preferred/3b/keycode_events.snapshot +++ /dev/null @@ -1,7 +0,0 @@ -kp_pressed: usage_page 0x07 keycode 0xe4 -ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold (hold-preferred event 3) -kp_pressed: usage_page 0x07 keycode 0xe1 -kp_released: usage_page 0x07 keycode 0xe4 -kp_released: usage_page 0x07 keycode 0xe1 -ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/3b/native_posix.keymap b/app/tests/hold-tap/hold-preferred/3b/native_posix.keymap deleted file mode 100644 index 392d328..0000000 --- a/app/tests/hold-tap/hold-preferred/3b/native_posix.keymap +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include -#include -#include "../behavior_keymap.dtsi" - -&kscan { - events = < - ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ - ZMK_MOCK_PRESS(0,0,50) /*mt f-shift */ - ZMK_MOCK_RELEASE(1,1,300) - /*timer*/ - ZMK_MOCK_RELEASE(0,0,10) - >; -}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/3c-kcdn-dn-kcup-up/events.patterns b/app/tests/hold-tap/hold-preferred/3c-kcdn-dn-kcup-up/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/3c-kcdn-dn-kcup-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/3c-kcdn-dn-kcup-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/3c-kcdn-dn-kcup-up/keycode_events.snapshot new file mode 100644 index 0000000..b06a1d7 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/3c-kcdn-dn-kcup-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0x07 +ht_binding_pressed: 0 new undecided hold_tap +kp_released: usage_page 0x07 keycode 0x07 +ht_decide: 0 decided tap (hold-preferred event 0) +kp_pressed: usage_page 0x07 keycode 0x09 +kp_released: usage_page 0x07 keycode 0x09 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/3c-kcdn-dn-kcup-up/native_posix.keymap b/app/tests/hold-tap/hold-preferred/3c-kcdn-dn-kcup-up/native_posix.keymap new file mode 100644 index 0000000..77306cd --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/3c-kcdn-dn-kcup-up/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) /*d*/ + ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/3c/events.patterns b/app/tests/hold-tap/hold-preferred/3c/events.patterns deleted file mode 100644 index fdf2b15..0000000 --- a/app/tests/hold-tap/hold-preferred/3c/events.patterns +++ /dev/null @@ -1,4 +0,0 @@ -s/.*hid_listener_keycode/kp/p -s/.*mo_keymap_binding/mo/p -s/.*on_hold_tap_binding/ht_binding/p -s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/3c/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/3c/keycode_events.snapshot deleted file mode 100644 index b06a1d7..0000000 --- a/app/tests/hold-tap/hold-preferred/3c/keycode_events.snapshot +++ /dev/null @@ -1,7 +0,0 @@ -kp_pressed: usage_page 0x07 keycode 0x07 -ht_binding_pressed: 0 new undecided hold_tap -kp_released: usage_page 0x07 keycode 0x07 -ht_decide: 0 decided tap (hold-preferred event 0) -kp_pressed: usage_page 0x07 keycode 0x09 -kp_released: usage_page 0x07 keycode 0x09 -ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/3c/native_posix.keymap b/app/tests/hold-tap/hold-preferred/3c/native_posix.keymap deleted file mode 100644 index 77306cd..0000000 --- a/app/tests/hold-tap/hold-preferred/3c/native_posix.keymap +++ /dev/null @@ -1,13 +0,0 @@ -#include -#include -#include -#include "../behavior_keymap.dtsi" - -&kscan { - events = < - ZMK_MOCK_PRESS(1,0,10) /*d*/ - ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) - >; -}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/events.patterns b/app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot new file mode 100644 index 0000000..bf31955 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0x07 +ht_binding_pressed: 0 new undecided hold_tap +kp_released: usage_page 0x07 keycode 0x07 +ht_decide: 0 decided hold (hold-preferred event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_released: usage_page 0x07 keycode 0xe1 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/native_posix.keymap b/app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/native_posix.keymap new file mode 100644 index 0000000..1441331 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) /* d */ + ZMK_MOCK_PRESS(0,0,100) /* mt f-shift */ + ZMK_MOCK_RELEASE(1,0,400) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/3d/events.patterns b/app/tests/hold-tap/hold-preferred/3d/events.patterns deleted file mode 100644 index fdf2b15..0000000 --- a/app/tests/hold-tap/hold-preferred/3d/events.patterns +++ /dev/null @@ -1,4 +0,0 @@ -s/.*hid_listener_keycode/kp/p -s/.*mo_keymap_binding/mo/p -s/.*on_hold_tap_binding/ht_binding/p -s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/3d/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/3d/keycode_events.snapshot deleted file mode 100644 index bf31955..0000000 --- a/app/tests/hold-tap/hold-preferred/3d/keycode_events.snapshot +++ /dev/null @@ -1,7 +0,0 @@ -kp_pressed: usage_page 0x07 keycode 0x07 -ht_binding_pressed: 0 new undecided hold_tap -kp_released: usage_page 0x07 keycode 0x07 -ht_decide: 0 decided hold (hold-preferred event 3) -kp_pressed: usage_page 0x07 keycode 0xe1 -kp_released: usage_page 0x07 keycode 0xe1 -ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/3d/native_posix.keymap b/app/tests/hold-tap/hold-preferred/3d/native_posix.keymap deleted file mode 100644 index 1441331..0000000 --- a/app/tests/hold-tap/hold-preferred/3d/native_posix.keymap +++ /dev/null @@ -1,13 +0,0 @@ -#include -#include -#include -#include "../behavior_keymap.dtsi" - -&kscan { - events = < - ZMK_MOCK_PRESS(1,0,10) /* d */ - ZMK_MOCK_PRESS(0,0,100) /* mt f-shift */ - ZMK_MOCK_RELEASE(1,0,400) - ZMK_MOCK_RELEASE(0,0,10) - >; -}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/events.patterns b/app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/keycode_events.snapshot new file mode 100644 index 0000000..3ed7de0 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/keycode_events.snapshot @@ -0,0 +1,10 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (hold-preferred event 1) +kp_pressed: usage_page 0x07 keycode 0xe1 +ht_binding_pressed: 1 new undecided hold_tap +ht_decide: 1 decided tap (hold-preferred event 0) +kp_pressed: usage_page 0x07 keycode 0x0d +kp_released: usage_page 0x07 keycode 0x0d +ht_binding_released: 1 cleaning up hold-tap +kp_released: usage_page 0x07 keycode 0xe1 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/native_posix.keymap b/app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/native_posix.keymap new file mode 100644 index 0000000..c10c6d6 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(0,1,200) + /* timer fires */ + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/events.patterns b/app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot new file mode 100644 index 0000000..e0b57fd --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (hold-preferred event 1) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_pressed: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0xe1 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/native_posix.keymap b/app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/native_posix.keymap new file mode 100644 index 0000000..ce163f5 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(1,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/4a-nested/events.patterns b/app/tests/hold-tap/hold-preferred/4a-nested/events.patterns deleted file mode 100644 index fdf2b15..0000000 --- a/app/tests/hold-tap/hold-preferred/4a-nested/events.patterns +++ /dev/null @@ -1,4 +0,0 @@ -s/.*hid_listener_keycode/kp/p -s/.*mo_keymap_binding/mo/p -s/.*on_hold_tap_binding/ht_binding/p -s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/4a-nested/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/4a-nested/keycode_events.snapshot deleted file mode 100644 index 3ed7de0..0000000 --- a/app/tests/hold-tap/hold-preferred/4a-nested/keycode_events.snapshot +++ /dev/null @@ -1,10 +0,0 @@ -ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold (hold-preferred event 1) -kp_pressed: usage_page 0x07 keycode 0xe1 -ht_binding_pressed: 1 new undecided hold_tap -ht_decide: 1 decided tap (hold-preferred event 0) -kp_pressed: usage_page 0x07 keycode 0x0d -kp_released: usage_page 0x07 keycode 0x0d -ht_binding_released: 1 cleaning up hold-tap -kp_released: usage_page 0x07 keycode 0xe1 -ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/4a-nested/native_posix.keymap b/app/tests/hold-tap/hold-preferred/4a-nested/native_posix.keymap deleted file mode 100644 index c10c6d6..0000000 --- a/app/tests/hold-tap/hold-preferred/4a-nested/native_posix.keymap +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include -#include -#include "../behavior_keymap.dtsi" - -&kscan { - events = < - ZMK_MOCK_PRESS(0,0,200) - ZMK_MOCK_PRESS(0,1,200) - /* timer fires */ - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) - >; -}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/4a/events.patterns b/app/tests/hold-tap/hold-preferred/4a/events.patterns deleted file mode 100644 index fdf2b15..0000000 --- a/app/tests/hold-tap/hold-preferred/4a/events.patterns +++ /dev/null @@ -1,4 +0,0 @@ -s/.*hid_listener_keycode/kp/p -s/.*mo_keymap_binding/mo/p -s/.*on_hold_tap_binding/ht_binding/p -s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/4a/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/4a/keycode_events.snapshot deleted file mode 100644 index e0b57fd..0000000 --- a/app/tests/hold-tap/hold-preferred/4a/keycode_events.snapshot +++ /dev/null @@ -1,7 +0,0 @@ -ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold (hold-preferred event 1) -kp_pressed: usage_page 0x07 keycode 0xe1 -kp_pressed: usage_page 0x07 keycode 0x07 -kp_released: usage_page 0x07 keycode 0x07 -kp_released: usage_page 0x07 keycode 0xe1 -ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/4a/native_posix.keymap b/app/tests/hold-tap/hold-preferred/4a/native_posix.keymap deleted file mode 100644 index ce163f5..0000000 --- a/app/tests/hold-tap/hold-preferred/4a/native_posix.keymap +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include -#include -#include "../behavior_keymap.dtsi" - -&kscan { - events = < - ZMK_MOCK_PRESS(0,0,200) - ZMK_MOCK_PRESS(1,0,200) - /* timer fires */ - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) - >; -}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/events.patterns b/app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot new file mode 100644 index 0000000..e0b57fd --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (hold-preferred event 1) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_pressed: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0xe1 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/native_posix.keymap b/app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/native_posix.keymap new file mode 100644 index 0000000..7abda41 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(1,0,100) + ZMK_MOCK_RELEASE(1,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/4b/events.patterns b/app/tests/hold-tap/hold-preferred/4b/events.patterns deleted file mode 100644 index fdf2b15..0000000 --- a/app/tests/hold-tap/hold-preferred/4b/events.patterns +++ /dev/null @@ -1,4 +0,0 @@ -s/.*hid_listener_keycode/kp/p -s/.*mo_keymap_binding/mo/p -s/.*on_hold_tap_binding/ht_binding/p -s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/4b/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/4b/keycode_events.snapshot deleted file mode 100644 index e0b57fd..0000000 --- a/app/tests/hold-tap/hold-preferred/4b/keycode_events.snapshot +++ /dev/null @@ -1,7 +0,0 @@ -ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold (hold-preferred event 1) -kp_pressed: usage_page 0x07 keycode 0xe1 -kp_pressed: usage_page 0x07 keycode 0x07 -kp_released: usage_page 0x07 keycode 0x07 -kp_released: usage_page 0x07 keycode 0xe1 -ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/4b/native_posix.keymap b/app/tests/hold-tap/hold-preferred/4b/native_posix.keymap deleted file mode 100644 index 7abda41..0000000 --- a/app/tests/hold-tap/hold-preferred/4b/native_posix.keymap +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include -#include -#include "../behavior_keymap.dtsi" - -&kscan { - events = < - ZMK_MOCK_PRESS(0,0,100) - ZMK_MOCK_PRESS(1,0,100) - ZMK_MOCK_RELEASE(1,0,200) - /* timer fires */ - ZMK_MOCK_RELEASE(0,0,10) - >; -}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/events.patterns b/app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/keycode_events.snapshot new file mode 100644 index 0000000..e0b57fd --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (hold-preferred event 1) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_pressed: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0xe1 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/native_posix.keymap b/app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/native_posix.keymap new file mode 100644 index 0000000..ce030af --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* timer */ + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/4c/events.patterns b/app/tests/hold-tap/hold-preferred/4c/events.patterns deleted file mode 100644 index fdf2b15..0000000 --- a/app/tests/hold-tap/hold-preferred/4c/events.patterns +++ /dev/null @@ -1,4 +0,0 @@ -s/.*hid_listener_keycode/kp/p -s/.*mo_keymap_binding/mo/p -s/.*on_hold_tap_binding/ht_binding/p -s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/4c/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/4c/keycode_events.snapshot deleted file mode 100644 index e0b57fd..0000000 --- a/app/tests/hold-tap/hold-preferred/4c/keycode_events.snapshot +++ /dev/null @@ -1,7 +0,0 @@ -ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold (hold-preferred event 1) -kp_pressed: usage_page 0x07 keycode 0xe1 -kp_pressed: usage_page 0x07 keycode 0x07 -kp_released: usage_page 0x07 keycode 0x07 -kp_released: usage_page 0x07 keycode 0xe1 -ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/hold-preferred/4c/native_posix.keymap b/app/tests/hold-tap/hold-preferred/4c/native_posix.keymap deleted file mode 100644 index ce030af..0000000 --- a/app/tests/hold-tap/hold-preferred/4c/native_posix.keymap +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include -#include -#include "../behavior_keymap.dtsi" - -&kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) - /* timer */ - >; -}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/4d-dn-kcdn-timer-up-kcup/events.patterns b/app/tests/hold-tap/hold-preferred/4d-dn-kcdn-timer-up-kcup/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/4d-dn-kcdn-timer-up-kcup/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot new file mode 100644 index 0000000..cac579d --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (hold-preferred event 1) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_pressed: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0xe1 +ht_binding_released: 0 cleaning up hold-tap +kp_released: usage_page 0x07 keycode 0x07 diff --git a/app/tests/hold-tap/hold-preferred/4d-dn-kcdn-timer-up-kcup/native_posix.keymap b/app/tests/hold-tap/hold-preferred/4d-dn-kcdn-timer-up-kcup/native_posix.keymap new file mode 100644 index 0000000..5467660 --- /dev/null +++ b/app/tests/hold-tap/hold-preferred/4d-dn-kcdn-timer-up-kcup/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(1,0,100) + ZMK_MOCK_RELEASE(0,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(1,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/4d/events.patterns b/app/tests/hold-tap/hold-preferred/4d/events.patterns deleted file mode 100644 index fdf2b15..0000000 --- a/app/tests/hold-tap/hold-preferred/4d/events.patterns +++ /dev/null @@ -1,4 +0,0 @@ -s/.*hid_listener_keycode/kp/p -s/.*mo_keymap_binding/mo/p -s/.*on_hold_tap_binding/ht_binding/p -s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/hold-preferred/4d/keycode_events.snapshot b/app/tests/hold-tap/hold-preferred/4d/keycode_events.snapshot deleted file mode 100644 index cac579d..0000000 --- a/app/tests/hold-tap/hold-preferred/4d/keycode_events.snapshot +++ /dev/null @@ -1,7 +0,0 @@ -ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold (hold-preferred event 1) -kp_pressed: usage_page 0x07 keycode 0xe1 -kp_pressed: usage_page 0x07 keycode 0x07 -kp_released: usage_page 0x07 keycode 0xe1 -ht_binding_released: 0 cleaning up hold-tap -kp_released: usage_page 0x07 keycode 0x07 diff --git a/app/tests/hold-tap/hold-preferred/4d/native_posix.keymap b/app/tests/hold-tap/hold-preferred/4d/native_posix.keymap deleted file mode 100644 index 5467660..0000000 --- a/app/tests/hold-tap/hold-preferred/4d/native_posix.keymap +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include -#include -#include "../behavior_keymap.dtsi" - -&kscan { - events = < - ZMK_MOCK_PRESS(0,0,100) - ZMK_MOCK_PRESS(1,0,100) - ZMK_MOCK_RELEASE(0,0,200) - /* timer fires */ - ZMK_MOCK_RELEASE(1,0,10) - >; -}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/1-dn-up/events.patterns b/app/tests/hold-tap/tap-preferred/1-dn-up/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/1-dn-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/1-dn-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/1-dn-up/keycode_events.snapshot new file mode 100644 index 0000000..2a250fb --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/1-dn-up/keycode_events.snapshot @@ -0,0 +1,5 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (tap-preferred event 0) +kp_pressed: usage_page 0x07 keycode 0x09 +kp_released: usage_page 0x07 keycode 0x09 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/1-dn-up/native_posix.keymap b/app/tests/hold-tap/tap-preferred/1-dn-up/native_posix.keymap new file mode 100644 index 0000000..10336ef --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/1-dn-up/native_posix.keymap @@ -0,0 +1,11 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/1/events.patterns b/app/tests/hold-tap/tap-preferred/1/events.patterns deleted file mode 100644 index fdf2b15..0000000 --- a/app/tests/hold-tap/tap-preferred/1/events.patterns +++ /dev/null @@ -1,4 +0,0 @@ -s/.*hid_listener_keycode/kp/p -s/.*mo_keymap_binding/mo/p -s/.*on_hold_tap_binding/ht_binding/p -s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/1/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/1/keycode_events.snapshot deleted file mode 100644 index 2a250fb..0000000 --- a/app/tests/hold-tap/tap-preferred/1/keycode_events.snapshot +++ /dev/null @@ -1,5 +0,0 @@ -ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided tap (tap-preferred event 0) -kp_pressed: usage_page 0x07 keycode 0x09 -kp_released: usage_page 0x07 keycode 0x09 -ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/1/native_posix.keymap b/app/tests/hold-tap/tap-preferred/1/native_posix.keymap deleted file mode 100644 index 10336ef..0000000 --- a/app/tests/hold-tap/tap-preferred/1/native_posix.keymap +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include -#include -#include "../behavior_keymap.dtsi" - -&kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_RELEASE(0,0,10) - >; -}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/2-dn-timer-up/events.patterns b/app/tests/hold-tap/tap-preferred/2-dn-timer-up/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/2-dn-timer-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/2-dn-timer-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/2-dn-timer-up/keycode_events.snapshot new file mode 100644 index 0000000..4f1ee63 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/2-dn-timer-up/keycode_events.snapshot @@ -0,0 +1,5 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (tap-preferred event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_released: usage_page 0x07 keycode 0xe1 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/2-dn-timer-up/native_posix.keymap b/app/tests/hold-tap/tap-preferred/2-dn-timer-up/native_posix.keymap new file mode 100644 index 0000000..aa93b86 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/2-dn-timer-up/native_posix.keymap @@ -0,0 +1,11 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,500) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/2/events.patterns b/app/tests/hold-tap/tap-preferred/2/events.patterns deleted file mode 100644 index fdf2b15..0000000 --- a/app/tests/hold-tap/tap-preferred/2/events.patterns +++ /dev/null @@ -1,4 +0,0 @@ -s/.*hid_listener_keycode/kp/p -s/.*mo_keymap_binding/mo/p -s/.*on_hold_tap_binding/ht_binding/p -s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/2/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/2/keycode_events.snapshot deleted file mode 100644 index 4f1ee63..0000000 --- a/app/tests/hold-tap/tap-preferred/2/keycode_events.snapshot +++ /dev/null @@ -1,5 +0,0 @@ -ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold (tap-preferred event 3) -kp_pressed: usage_page 0x07 keycode 0xe1 -kp_released: usage_page 0x07 keycode 0xe1 -ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/2/native_posix.keymap b/app/tests/hold-tap/tap-preferred/2/native_posix.keymap deleted file mode 100644 index aa93b86..0000000 --- a/app/tests/hold-tap/tap-preferred/2/native_posix.keymap +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include -#include -#include "../behavior_keymap.dtsi" - -&kscan { - events = < - ZMK_MOCK_PRESS(0,0,500) - ZMK_MOCK_RELEASE(0,0,10) - >; -}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/3a-moddn-dn-modup-up/events.patterns b/app/tests/hold-tap/tap-preferred/3a-moddn-dn-modup-up/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/3a-moddn-dn-modup-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/3a-moddn-dn-modup-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/3a-moddn-dn-modup-up/keycode_events.snapshot new file mode 100644 index 0000000..87d1406 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/3a-moddn-dn-modup-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0xe4 +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (tap-preferred event 0) +kp_pressed: usage_page 0x07 keycode 0x09 +kp_released: usage_page 0x07 keycode 0xe4 +kp_released: usage_page 0x07 keycode 0x09 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/3a-moddn-dn-modup-up/native_posix.keymap b/app/tests/hold-tap/tap-preferred/3a-moddn-dn-modup-up/native_posix.keymap new file mode 100644 index 0000000..6f08689 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/3a-moddn-dn-modup-up/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ + ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/3a/events.patterns b/app/tests/hold-tap/tap-preferred/3a/events.patterns deleted file mode 100644 index fdf2b15..0000000 --- a/app/tests/hold-tap/tap-preferred/3a/events.patterns +++ /dev/null @@ -1,4 +0,0 @@ -s/.*hid_listener_keycode/kp/p -s/.*mo_keymap_binding/mo/p -s/.*on_hold_tap_binding/ht_binding/p -s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/3a/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/3a/keycode_events.snapshot deleted file mode 100644 index 87d1406..0000000 --- a/app/tests/hold-tap/tap-preferred/3a/keycode_events.snapshot +++ /dev/null @@ -1,7 +0,0 @@ -kp_pressed: usage_page 0x07 keycode 0xe4 -ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided tap (tap-preferred event 0) -kp_pressed: usage_page 0x07 keycode 0x09 -kp_released: usage_page 0x07 keycode 0xe4 -kp_released: usage_page 0x07 keycode 0x09 -ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/3a/native_posix.keymap b/app/tests/hold-tap/tap-preferred/3a/native_posix.keymap deleted file mode 100644 index 6f08689..0000000 --- a/app/tests/hold-tap/tap-preferred/3a/native_posix.keymap +++ /dev/null @@ -1,13 +0,0 @@ -#include -#include -#include -#include "../behavior_keymap.dtsi" - -&kscan { - events = < - ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ - ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ - ZMK_MOCK_RELEASE(1,1,10) - ZMK_MOCK_RELEASE(0,0,10) - >; -}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/events.patterns b/app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/keycode_events.snapshot new file mode 100644 index 0000000..7455d2a --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0xe4 +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (tap-preferred event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_released: usage_page 0x07 keycode 0xe4 +kp_released: usage_page 0x07 keycode 0xe1 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/native_posix.keymap b/app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/native_posix.keymap new file mode 100644 index 0000000..392d328 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ + ZMK_MOCK_PRESS(0,0,50) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,1,300) + /*timer*/ + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/3b/events.patterns b/app/tests/hold-tap/tap-preferred/3b/events.patterns deleted file mode 100644 index fdf2b15..0000000 --- a/app/tests/hold-tap/tap-preferred/3b/events.patterns +++ /dev/null @@ -1,4 +0,0 @@ -s/.*hid_listener_keycode/kp/p -s/.*mo_keymap_binding/mo/p -s/.*on_hold_tap_binding/ht_binding/p -s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/3b/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/3b/keycode_events.snapshot deleted file mode 100644 index 7455d2a..0000000 --- a/app/tests/hold-tap/tap-preferred/3b/keycode_events.snapshot +++ /dev/null @@ -1,7 +0,0 @@ -kp_pressed: usage_page 0x07 keycode 0xe4 -ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold (tap-preferred event 3) -kp_pressed: usage_page 0x07 keycode 0xe1 -kp_released: usage_page 0x07 keycode 0xe4 -kp_released: usage_page 0x07 keycode 0xe1 -ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/3b/native_posix.keymap b/app/tests/hold-tap/tap-preferred/3b/native_posix.keymap deleted file mode 100644 index 392d328..0000000 --- a/app/tests/hold-tap/tap-preferred/3b/native_posix.keymap +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include -#include -#include "../behavior_keymap.dtsi" - -&kscan { - events = < - ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ - ZMK_MOCK_PRESS(0,0,50) /*mt f-shift */ - ZMK_MOCK_RELEASE(1,1,300) - /*timer*/ - ZMK_MOCK_RELEASE(0,0,10) - >; -}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/3c-kcdn-dn-kcup-up/events.patterns b/app/tests/hold-tap/tap-preferred/3c-kcdn-dn-kcup-up/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/3c-kcdn-dn-kcup-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/3c-kcdn-dn-kcup-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/3c-kcdn-dn-kcup-up/keycode_events.snapshot new file mode 100644 index 0000000..3d7eaf1 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/3c-kcdn-dn-kcup-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0x07 +ht_binding_pressed: 0 new undecided hold_tap +kp_released: usage_page 0x07 keycode 0x07 +ht_decide: 0 decided tap (tap-preferred event 0) +kp_pressed: usage_page 0x07 keycode 0x09 +kp_released: usage_page 0x07 keycode 0x09 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/3c-kcdn-dn-kcup-up/native_posix.keymap b/app/tests/hold-tap/tap-preferred/3c-kcdn-dn-kcup-up/native_posix.keymap new file mode 100644 index 0000000..77306cd --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/3c-kcdn-dn-kcup-up/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) /*d*/ + ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/3c/events.patterns b/app/tests/hold-tap/tap-preferred/3c/events.patterns deleted file mode 100644 index fdf2b15..0000000 --- a/app/tests/hold-tap/tap-preferred/3c/events.patterns +++ /dev/null @@ -1,4 +0,0 @@ -s/.*hid_listener_keycode/kp/p -s/.*mo_keymap_binding/mo/p -s/.*on_hold_tap_binding/ht_binding/p -s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/3c/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/3c/keycode_events.snapshot deleted file mode 100644 index 3d7eaf1..0000000 --- a/app/tests/hold-tap/tap-preferred/3c/keycode_events.snapshot +++ /dev/null @@ -1,7 +0,0 @@ -kp_pressed: usage_page 0x07 keycode 0x07 -ht_binding_pressed: 0 new undecided hold_tap -kp_released: usage_page 0x07 keycode 0x07 -ht_decide: 0 decided tap (tap-preferred event 0) -kp_pressed: usage_page 0x07 keycode 0x09 -kp_released: usage_page 0x07 keycode 0x09 -ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/3c/native_posix.keymap b/app/tests/hold-tap/tap-preferred/3c/native_posix.keymap deleted file mode 100644 index 77306cd..0000000 --- a/app/tests/hold-tap/tap-preferred/3c/native_posix.keymap +++ /dev/null @@ -1,13 +0,0 @@ -#include -#include -#include -#include "../behavior_keymap.dtsi" - -&kscan { - events = < - ZMK_MOCK_PRESS(1,0,10) /*d*/ - ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) - >; -}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/events.patterns b/app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot new file mode 100644 index 0000000..059d99c --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0x07 +ht_binding_pressed: 0 new undecided hold_tap +kp_released: usage_page 0x07 keycode 0x07 +ht_decide: 0 decided hold (tap-preferred event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_released: usage_page 0x07 keycode 0xe1 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/native_posix.keymap b/app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/native_posix.keymap new file mode 100644 index 0000000..1441331 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) /* d */ + ZMK_MOCK_PRESS(0,0,100) /* mt f-shift */ + ZMK_MOCK_RELEASE(1,0,400) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/3d/events.patterns b/app/tests/hold-tap/tap-preferred/3d/events.patterns deleted file mode 100644 index fdf2b15..0000000 --- a/app/tests/hold-tap/tap-preferred/3d/events.patterns +++ /dev/null @@ -1,4 +0,0 @@ -s/.*hid_listener_keycode/kp/p -s/.*mo_keymap_binding/mo/p -s/.*on_hold_tap_binding/ht_binding/p -s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/3d/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/3d/keycode_events.snapshot deleted file mode 100644 index 059d99c..0000000 --- a/app/tests/hold-tap/tap-preferred/3d/keycode_events.snapshot +++ /dev/null @@ -1,7 +0,0 @@ -kp_pressed: usage_page 0x07 keycode 0x07 -ht_binding_pressed: 0 new undecided hold_tap -kp_released: usage_page 0x07 keycode 0x07 -ht_decide: 0 decided hold (tap-preferred event 3) -kp_pressed: usage_page 0x07 keycode 0xe1 -kp_released: usage_page 0x07 keycode 0xe1 -ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/3d/native_posix.keymap b/app/tests/hold-tap/tap-preferred/3d/native_posix.keymap deleted file mode 100644 index 1441331..0000000 --- a/app/tests/hold-tap/tap-preferred/3d/native_posix.keymap +++ /dev/null @@ -1,13 +0,0 @@ -#include -#include -#include -#include "../behavior_keymap.dtsi" - -&kscan { - events = < - ZMK_MOCK_PRESS(1,0,10) /* d */ - ZMK_MOCK_PRESS(0,0,100) /* mt f-shift */ - ZMK_MOCK_RELEASE(1,0,400) - ZMK_MOCK_RELEASE(0,0,10) - >; -}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/events.patterns b/app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/keycode_events.snapshot new file mode 100644 index 0000000..a8cf490 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/keycode_events.snapshot @@ -0,0 +1,10 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (tap-preferred event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 +ht_binding_pressed: 1 new undecided hold_tap +ht_decide: 1 decided tap (tap-preferred event 0) +kp_pressed: usage_page 0x07 keycode 0x0d +kp_released: usage_page 0x07 keycode 0x0d +ht_binding_released: 1 cleaning up hold-tap +kp_released: usage_page 0x07 keycode 0xe1 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/native_posix.keymap b/app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/native_posix.keymap new file mode 100644 index 0000000..c10c6d6 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(0,1,200) + /* timer fires */ + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/events.patterns b/app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot new file mode 100644 index 0000000..92a3569 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (tap-preferred event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_pressed: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0xe1 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/native_posix.keymap b/app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/native_posix.keymap new file mode 100644 index 0000000..ce163f5 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(1,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/4a-nested/events.patterns b/app/tests/hold-tap/tap-preferred/4a-nested/events.patterns deleted file mode 100644 index fdf2b15..0000000 --- a/app/tests/hold-tap/tap-preferred/4a-nested/events.patterns +++ /dev/null @@ -1,4 +0,0 @@ -s/.*hid_listener_keycode/kp/p -s/.*mo_keymap_binding/mo/p -s/.*on_hold_tap_binding/ht_binding/p -s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/4a-nested/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/4a-nested/keycode_events.snapshot deleted file mode 100644 index a8cf490..0000000 --- a/app/tests/hold-tap/tap-preferred/4a-nested/keycode_events.snapshot +++ /dev/null @@ -1,10 +0,0 @@ -ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold (tap-preferred event 3) -kp_pressed: usage_page 0x07 keycode 0xe1 -ht_binding_pressed: 1 new undecided hold_tap -ht_decide: 1 decided tap (tap-preferred event 0) -kp_pressed: usage_page 0x07 keycode 0x0d -kp_released: usage_page 0x07 keycode 0x0d -ht_binding_released: 1 cleaning up hold-tap -kp_released: usage_page 0x07 keycode 0xe1 -ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/4a-nested/native_posix.keymap b/app/tests/hold-tap/tap-preferred/4a-nested/native_posix.keymap deleted file mode 100644 index c10c6d6..0000000 --- a/app/tests/hold-tap/tap-preferred/4a-nested/native_posix.keymap +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include -#include -#include "../behavior_keymap.dtsi" - -&kscan { - events = < - ZMK_MOCK_PRESS(0,0,200) - ZMK_MOCK_PRESS(0,1,200) - /* timer fires */ - ZMK_MOCK_RELEASE(0,1,10) - ZMK_MOCK_RELEASE(0,0,10) - >; -}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/4a/events.patterns b/app/tests/hold-tap/tap-preferred/4a/events.patterns deleted file mode 100644 index fdf2b15..0000000 --- a/app/tests/hold-tap/tap-preferred/4a/events.patterns +++ /dev/null @@ -1,4 +0,0 @@ -s/.*hid_listener_keycode/kp/p -s/.*mo_keymap_binding/mo/p -s/.*on_hold_tap_binding/ht_binding/p -s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/4a/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/4a/keycode_events.snapshot deleted file mode 100644 index 92a3569..0000000 --- a/app/tests/hold-tap/tap-preferred/4a/keycode_events.snapshot +++ /dev/null @@ -1,7 +0,0 @@ -ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold (tap-preferred event 3) -kp_pressed: usage_page 0x07 keycode 0xe1 -kp_pressed: usage_page 0x07 keycode 0x07 -kp_released: usage_page 0x07 keycode 0x07 -kp_released: usage_page 0x07 keycode 0xe1 -ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/4a/native_posix.keymap b/app/tests/hold-tap/tap-preferred/4a/native_posix.keymap deleted file mode 100644 index ce163f5..0000000 --- a/app/tests/hold-tap/tap-preferred/4a/native_posix.keymap +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include -#include -#include "../behavior_keymap.dtsi" - -&kscan { - events = < - ZMK_MOCK_PRESS(0,0,200) - ZMK_MOCK_PRESS(1,0,200) - /* timer fires */ - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) - >; -}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/events.patterns b/app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot new file mode 100644 index 0000000..92a3569 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (tap-preferred event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 +kp_pressed: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0xe1 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/native_posix.keymap b/app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/native_posix.keymap new file mode 100644 index 0000000..7abda41 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(1,0,100) + ZMK_MOCK_RELEASE(1,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/4b/events.patterns b/app/tests/hold-tap/tap-preferred/4b/events.patterns deleted file mode 100644 index fdf2b15..0000000 --- a/app/tests/hold-tap/tap-preferred/4b/events.patterns +++ /dev/null @@ -1,4 +0,0 @@ -s/.*hid_listener_keycode/kp/p -s/.*mo_keymap_binding/mo/p -s/.*on_hold_tap_binding/ht_binding/p -s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/4b/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/4b/keycode_events.snapshot deleted file mode 100644 index 92a3569..0000000 --- a/app/tests/hold-tap/tap-preferred/4b/keycode_events.snapshot +++ /dev/null @@ -1,7 +0,0 @@ -ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided hold (tap-preferred event 3) -kp_pressed: usage_page 0x07 keycode 0xe1 -kp_pressed: usage_page 0x07 keycode 0x07 -kp_released: usage_page 0x07 keycode 0x07 -kp_released: usage_page 0x07 keycode 0xe1 -ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/4b/native_posix.keymap b/app/tests/hold-tap/tap-preferred/4b/native_posix.keymap deleted file mode 100644 index 7abda41..0000000 --- a/app/tests/hold-tap/tap-preferred/4b/native_posix.keymap +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include -#include -#include "../behavior_keymap.dtsi" - -&kscan { - events = < - ZMK_MOCK_PRESS(0,0,100) - ZMK_MOCK_PRESS(1,0,100) - ZMK_MOCK_RELEASE(1,0,200) - /* timer fires */ - ZMK_MOCK_RELEASE(0,0,10) - >; -}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/4c-dn-kcdn-kcup-up/events.patterns b/app/tests/hold-tap/tap-preferred/4c-dn-kcdn-kcup-up/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/4c-dn-kcdn-kcup-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/4c-dn-kcdn-kcup-up/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/4c-dn-kcdn-kcup-up/keycode_events.snapshot new file mode 100644 index 0000000..bc8aa8e --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/4c-dn-kcdn-kcup-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (tap-preferred event 0) +kp_pressed: usage_page 0x07 keycode 0x09 +kp_pressed: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0x09 +ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/4c-dn-kcdn-kcup-up/native_posix.keymap b/app/tests/hold-tap/tap-preferred/4c-dn-kcdn-kcup-up/native_posix.keymap new file mode 100644 index 0000000..ce030af --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/4c-dn-kcdn-kcup-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* timer */ + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/4c/events.patterns b/app/tests/hold-tap/tap-preferred/4c/events.patterns deleted file mode 100644 index fdf2b15..0000000 --- a/app/tests/hold-tap/tap-preferred/4c/events.patterns +++ /dev/null @@ -1,4 +0,0 @@ -s/.*hid_listener_keycode/kp/p -s/.*mo_keymap_binding/mo/p -s/.*on_hold_tap_binding/ht_binding/p -s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/4c/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/4c/keycode_events.snapshot deleted file mode 100644 index bc8aa8e..0000000 --- a/app/tests/hold-tap/tap-preferred/4c/keycode_events.snapshot +++ /dev/null @@ -1,7 +0,0 @@ -ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided tap (tap-preferred event 0) -kp_pressed: usage_page 0x07 keycode 0x09 -kp_pressed: usage_page 0x07 keycode 0x07 -kp_released: usage_page 0x07 keycode 0x07 -kp_released: usage_page 0x07 keycode 0x09 -ht_binding_released: 0 cleaning up hold-tap diff --git a/app/tests/hold-tap/tap-preferred/4c/native_posix.keymap b/app/tests/hold-tap/tap-preferred/4c/native_posix.keymap deleted file mode 100644 index ce030af..0000000 --- a/app/tests/hold-tap/tap-preferred/4c/native_posix.keymap +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include -#include -#include "../behavior_keymap.dtsi" - -&kscan { - events = < - ZMK_MOCK_PRESS(0,0,10) - ZMK_MOCK_PRESS(1,0,10) - ZMK_MOCK_RELEASE(1,0,10) - ZMK_MOCK_RELEASE(0,0,10) - /* timer */ - >; -}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/4d-dn-kcdn-timer-up-kcup/events.patterns b/app/tests/hold-tap/tap-preferred/4d-dn-kcdn-timer-up-kcup/events.patterns new file mode 100644 index 0000000..fdf2b15 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/4d-dn-kcdn-timer-up-kcup/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot new file mode 100644 index 0000000..b106f13 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (tap-preferred event 0) +kp_pressed: usage_page 0x07 keycode 0x09 +kp_pressed: usage_page 0x07 keycode 0x07 +kp_released: usage_page 0x07 keycode 0x09 +ht_binding_released: 0 cleaning up hold-tap +kp_released: usage_page 0x07 keycode 0x07 diff --git a/app/tests/hold-tap/tap-preferred/4d-dn-kcdn-timer-up-kcup/native_posix.keymap b/app/tests/hold-tap/tap-preferred/4d-dn-kcdn-timer-up-kcup/native_posix.keymap new file mode 100644 index 0000000..5467660 --- /dev/null +++ b/app/tests/hold-tap/tap-preferred/4d-dn-kcdn-timer-up-kcup/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(1,0,100) + ZMK_MOCK_RELEASE(0,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(1,0,10) + >; +}; \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/4d/events.patterns b/app/tests/hold-tap/tap-preferred/4d/events.patterns deleted file mode 100644 index fdf2b15..0000000 --- a/app/tests/hold-tap/tap-preferred/4d/events.patterns +++ /dev/null @@ -1,4 +0,0 @@ -s/.*hid_listener_keycode/kp/p -s/.*mo_keymap_binding/mo/p -s/.*on_hold_tap_binding/ht_binding/p -s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/app/tests/hold-tap/tap-preferred/4d/keycode_events.snapshot b/app/tests/hold-tap/tap-preferred/4d/keycode_events.snapshot deleted file mode 100644 index b106f13..0000000 --- a/app/tests/hold-tap/tap-preferred/4d/keycode_events.snapshot +++ /dev/null @@ -1,7 +0,0 @@ -ht_binding_pressed: 0 new undecided hold_tap -ht_decide: 0 decided tap (tap-preferred event 0) -kp_pressed: usage_page 0x07 keycode 0x09 -kp_pressed: usage_page 0x07 keycode 0x07 -kp_released: usage_page 0x07 keycode 0x09 -ht_binding_released: 0 cleaning up hold-tap -kp_released: usage_page 0x07 keycode 0x07 diff --git a/app/tests/hold-tap/tap-preferred/4d/native_posix.keymap b/app/tests/hold-tap/tap-preferred/4d/native_posix.keymap deleted file mode 100644 index 5467660..0000000 --- a/app/tests/hold-tap/tap-preferred/4d/native_posix.keymap +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include -#include -#include "../behavior_keymap.dtsi" - -&kscan { - events = < - ZMK_MOCK_PRESS(0,0,100) - ZMK_MOCK_PRESS(1,0,100) - ZMK_MOCK_RELEASE(0,0,200) - /* timer fires */ - ZMK_MOCK_RELEASE(1,0,10) - >; -}; \ No newline at end of file diff --git a/app/tests/tap-hold/balanced/behavior_keymap.dtsi b/app/tests/tap-hold/balanced/behavior_keymap.dtsi deleted file mode 100644 index df56fb5..0000000 --- a/app/tests/tap-hold/balanced/behavior_keymap.dtsi +++ /dev/null @@ -1,27 +0,0 @@ -#include -#include -#include - -/ { - behaviors { - ht_bal: behavior_hold_tap_balanced { - compatible = "zmk,behavior-hold-tap"; - label = "HOLD_TAP_BALANCED"; - #binding-cells = <2>; - flavor = "balanced"; - tapping_term_ms = <300>; - bindings = <&kp>, <&kp>; - }; - }; - - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; - - default_layer { - bindings = < - &ht_bal LSFT F &ht_bal LCTL J - &kp D &kp RCTL>; - }; - }; -}; diff --git a/app/tests/tap-hold/hold-preferred/behavior_keymap.dtsi b/app/tests/tap-hold/hold-preferred/behavior_keymap.dtsi deleted file mode 100644 index 375ffd9..0000000 --- a/app/tests/tap-hold/hold-preferred/behavior_keymap.dtsi +++ /dev/null @@ -1,29 +0,0 @@ -#include -#include -#include - - - -/ { - behaviors { - ht_hold: behavior_hold_hold_tap { - compatible = "zmk,behavior-hold-tap"; - label = "hold_hold_tap"; - #binding-cells = <2>; - flavor = "hold-preferred"; - tapping_term_ms = <300>; - bindings = <&kp>, <&kp>; - }; - }; - - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; - - default_layer { - bindings = < - &ht_hold LSFT F &ht_hold LCTL J - &kp D &kp RCTL>; - }; - }; -}; diff --git a/app/tests/tap-hold/tap-preferred/behavior_keymap.dtsi b/app/tests/tap-hold/tap-preferred/behavior_keymap.dtsi deleted file mode 100644 index e514fa6..0000000 --- a/app/tests/tap-hold/tap-preferred/behavior_keymap.dtsi +++ /dev/null @@ -1,27 +0,0 @@ -#include -#include -#include - -/ { - behaviors { - tp: behavior_tap_preferred { - compatible = "zmk,behavior-hold-tap"; - label = "MOD_TAP"; - #binding-cells = <2>; - flavor = "tap-preferred"; - tapping_term_ms = <300>; - bindings = <&kp>, <&kp>; - }; - }; - - keymap { - compatible = "zmk,keymap"; - label ="Default keymap"; - - default_layer { - bindings = < - &tp LSFT F &tp LCTL J - &kp D &kp RCTL>; - }; - }; -}; -- cgit v1.2.3 From c5ca66441172114b57ca7f7b27d13d0d342d4fcc Mon Sep 17 00:00:00 2001 From: Okke Formsma Date: Wed, 2 Sep 2020 15:11:56 +0200 Subject: some fixes based on feedback --- app/dts/behaviors/homerow_tap.dtsi | 2 +- .../bindings/behaviors/zmk,behavior-hold-tap.yaml | 23 +++++++++++ .../bindings/behaviors/zmk,behavior-tap-hold.yaml | 23 ----------- app/include/zmk/event-manager.h | 9 +++-- app/run-test-debug.sh | 44 ---------------------- app/src/behaviors/behavior_hold_tap.c | 30 +++++++-------- app/src/event_manager.c | 22 ++++++++--- app/tests/hold-tap/README.md | 1 + docs/docs/behavior/mod-tap.md | 2 +- 9 files changed, 61 insertions(+), 95 deletions(-) create mode 100644 app/dts/bindings/behaviors/zmk,behavior-hold-tap.yaml delete mode 100644 app/dts/bindings/behaviors/zmk,behavior-tap-hold.yaml delete mode 100755 app/run-test-debug.sh create mode 100644 app/tests/hold-tap/README.md diff --git a/app/dts/behaviors/homerow_tap.dtsi b/app/dts/behaviors/homerow_tap.dtsi index 21c1531..4162c28 100644 --- a/app/dts/behaviors/homerow_tap.dtsi +++ b/app/dts/behaviors/homerow_tap.dtsi @@ -2,7 +2,7 @@ behaviors { ht: behavior_homerow_mod { compatible = "zmk,behavior-hold-tap"; - label = "homerow_mod"; + label = "HOMEROW_MOD"; #binding-cells = <2>; flavor = "balanced"; tapping_term_ms = <200>; diff --git a/app/dts/bindings/behaviors/zmk,behavior-hold-tap.yaml b/app/dts/bindings/behaviors/zmk,behavior-hold-tap.yaml new file mode 100644 index 0000000..a20578f --- /dev/null +++ b/app/dts/bindings/behaviors/zmk,behavior-hold-tap.yaml @@ -0,0 +1,23 @@ +# Copyright (c) 2020, Cody McGinnis; Okke Formsma +# SPDX-License-Identifier: MIT + +description: Hold or Tap behavior + +compatible: "zmk,behavior-hold-tap" + +include: two_param.yaml + +properties: + bindings: + type: phandles + required: true + tapping_term_ms: + type: int + flavor: + type: string + required: false + default: "hold-preferred" + enum: + - "hold-preferred" + - "balanced" + - "tap-preferred" \ No newline at end of file diff --git a/app/dts/bindings/behaviors/zmk,behavior-tap-hold.yaml b/app/dts/bindings/behaviors/zmk,behavior-tap-hold.yaml deleted file mode 100644 index a20578f..0000000 --- a/app/dts/bindings/behaviors/zmk,behavior-tap-hold.yaml +++ /dev/null @@ -1,23 +0,0 @@ -# Copyright (c) 2020, Cody McGinnis; Okke Formsma -# SPDX-License-Identifier: MIT - -description: Hold or Tap behavior - -compatible: "zmk,behavior-hold-tap" - -include: two_param.yaml - -properties: - bindings: - type: phandles - required: true - tapping_term_ms: - type: int - flavor: - type: string - required: false - default: "hold-preferred" - enum: - - "hold-preferred" - - "balanced" - - "tap-preferred" \ No newline at end of file diff --git a/app/include/zmk/event-manager.h b/app/include/zmk/event-manager.h index 07c0aa9..d9a56a4 100644 --- a/app/include/zmk/event-manager.h +++ b/app/include/zmk/event-manager.h @@ -75,13 +75,14 @@ struct zmk_event_subscription { #define ZMK_EVENT_RAISE_AFTER(ev, mod) \ zmk_event_manager_raise_after((struct zmk_event_header *)ev, &zmk_listener_##mod); + +#define ZMK_EVENT_RAISE_AT(ev, mod) \ + zmk_event_manager_raise_at((struct zmk_event_header *)ev, &zmk_listener_##mod); + #define ZMK_EVENT_RELEASE(ev) \ zmk_event_manager_release((struct zmk_event_header *)ev); -#define ZMK_EVENT_RELEASE_AGAIN(ev) \ - zmk_event_manager_release_again((struct zmk_event_header *)ev); - int zmk_event_manager_raise(struct zmk_event_header *event); int zmk_event_manager_raise_after(struct zmk_event_header *event, const struct zmk_listener *listener); +int zmk_event_manager_raise_at(struct zmk_event_header *event, const struct zmk_listener *listener); int zmk_event_manager_release(struct zmk_event_header *event); -int zmk_event_manager_release_again(struct zmk_event_header *event); diff --git a/app/run-test-debug.sh b/app/run-test-debug.sh deleted file mode 100755 index f6696a1..0000000 --- a/app/run-test-debug.sh +++ /dev/null @@ -1,44 +0,0 @@ -#!/bin/sh -# -# Copyright (c) 2020 Peter Johanson; Cody McGinnis; Okke Formsma -# -# SPDX-License-Identifier: MIT -# -set -e -set -x - -if [ -z "$1" ]; then - echo "Usage: ./run-test.sh " - exit 1 -elif [ "$1" = "all" ]; then - echo "" > ./build/tests/pass-fail.log - find tests -name native_posix.keymap -exec dirname \{\} \; | xargs -l -P 4 ./run-test.sh - err=$? - sort -k2 ./build/tests/pass-fail.log - exit $err -fi - -testcase="$1" -echo "Running $testcase:" - -west build -d build/$testcase -b native_posix --pristine -- -DZMK_CONFIG=$testcase -if [ $? -gt 0 ]; then - echo "FAIL: $testcase did not build" -else - ./build/$testcase/zephyr/zmk.exe | sed -e "s/.*> //" | tee build/$testcase/keycode_events_full.log | sed -n -f $testcase/events.patterns > build/$testcase/keycode_events.log - cat build/$testcase/keycode_events_full.log - cat build/$testcase/keycode_events.log - diff -au $testcase/keycode_events.snapshot build/$testcase/keycode_events.log - if [ $? -gt 0 ]; then - if [ -f $testcase/pending ]; then - echo "PEND: $testcase" - exit 0 - else - echo "FAIL: $testcase" - exit 1 - fi - else - echo "PASS: $testcase" - exit 0 - fi -fi \ No newline at end of file diff --git a/app/src/behaviors/behavior_hold_tap.c b/app/src/behaviors/behavior_hold_tap.c index 08fa139..cd788f7 100644 --- a/app/src/behaviors/behavior_hold_tap.c +++ b/app/src/behaviors/behavior_hold_tap.c @@ -23,7 +23,6 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #if DT_NODE_EXISTS(DT_DRV_INST(0)) -/************************************************************ DATA SETUP */ #define ZMK_BHV_HOLD_TAP_MAX_HELD 10 #define ZMK_BHV_HOLD_TAP_MAX_CAPTURED_EVENTS 40 @@ -40,7 +39,7 @@ typedef k_timeout_t (*timer_func)(); struct behavior_hold_tap_config { timer_func tapping_term_ms; struct behavior_hold_tap_behaviors *behaviors; - char *flavor; + int flavor; }; // this data is specific for each hold-tap @@ -65,7 +64,6 @@ struct active_hold_tap active_hold_taps[ZMK_BHV_HOLD_TAP_MAX_HELD] = {}; // We capture most position_state_changed events and some modifiers_state_changed events. const struct zmk_event_header *captured_events[ZMK_BHV_HOLD_TAP_MAX_CAPTURED_EVENTS] = {}; -/************************************************************ CAPTURED POSITION HELPER FUNCTIONS */ static int capture_event(const struct zmk_event_header *event) { for (int i = 0; i < ZMK_BHV_HOLD_TAP_MAX_CAPTURED_EVENTS; i++) { @@ -96,6 +94,8 @@ static struct position_state_changed *find_captured_keydown_event(u32_t position return last_match; } +const struct zmk_listener zmk_listener_behavior_hold_tap; + static void release_captured_events() { if (undecided_hold_tap != NULL) { @@ -143,13 +143,10 @@ static void release_captured_events() struct keycode_state_changed *modifier_event = cast_keycode_state_changed(captured_event); LOG_DBG("Releasing mods changed event 0x%02X %s", modifier_event->keycode, (modifier_event->state ? "pressed" : "released")); } - ZMK_EVENT_RELEASE_AGAIN(captured_event); + ZMK_EVENT_RAISE_AT(captured_event, behavior_hold_tap); } } - -/************************************************************ ACTIVE TAP HOLD HELPER FUNCTIONS */ - static struct active_hold_tap *find_hold_tap(u32_t position) { for (int i = 0; i < ZMK_BHV_HOLD_TAP_MAX_HELD; i++) { @@ -256,12 +253,12 @@ static void decide_hold_tap(struct active_hold_tap *hold_tap, enum decision_mome return; } - char *flavor = hold_tap->config->flavor; - if (strcmp(flavor, "balanced") == 0) { + int flavor = hold_tap->config->flavor; + if (flavor == 1) { decide_balanced(hold_tap, event); - } else if (strcmp(flavor, "tap-preferred") == 0) { + } else if (flavor == 2) { decide_tap_preferred(hold_tap, event); - } else if (strcmp(flavor, "hold-preferred") == 0) { + } else if (flavor == 0) { decide_hold_preferred(hold_tap, event); } @@ -269,7 +266,11 @@ static void decide_hold_tap(struct active_hold_tap *hold_tap, enum decision_mome return; } - LOG_DBG("%d decided %s (%s event %d)", hold_tap->position, hold_tap->is_hold ? "hold" : "tap", flavor, event); + LOG_DBG("%d decided %s (%s event %d)", + hold_tap->position, + hold_tap->is_hold ? "hold" : "tap", + flavor == 0 ? "hold-preferred" : flavor == 1 ? "balanced": "tap-preferred", + event); undecided_hold_tap = NULL; struct zmk_behavior_binding *behavior; @@ -285,7 +286,6 @@ static void decide_hold_tap(struct active_hold_tap *hold_tap, enum decision_mome release_captured_events(); } -/************************************************************ hold_tap_binding and key handlers */ static int on_hold_tap_binding_pressed(struct device *dev, u32_t position, u32_t param_hold, u32_t param_tap) { const struct behavior_hold_tap_config *cfg = dev->config_info; @@ -430,7 +430,6 @@ ZMK_SUBSCRIPTION(behavior_hold_tap, position_state_changed); // this should be modifiers_state_changed, but unfrotunately that's not implemented yet. ZMK_SUBSCRIPTION(behavior_hold_tap, keycode_state_changed); -/************************************************************ TIMER FUNCTIONS */ void behavior_hold_tap_timer_work_handler(struct k_work *item) { struct active_hold_tap *hold_tap = CONTAINER_OF(item, struct active_hold_tap, work); @@ -459,7 +458,6 @@ static int behavior_hold_tap_init(struct device *dev) struct behavior_hold_tap_data {}; static struct behavior_hold_tap_data behavior_hold_tap_data; -/************************************************************ NODE CONFIG */ #define _TRANSFORM_ENTRY(idx, node) \ { \ .behavior_dev = DT_LABEL(DT_INST_PHANDLE_BY_IDX(node, bindings, idx)), \ @@ -476,7 +474,7 @@ static struct behavior_hold_tap_data behavior_hold_tap_data; static struct behavior_hold_tap_config behavior_hold_tap_config_##n = { \ .behaviors = &behavior_hold_tap_behaviors_##n, \ .tapping_term_ms = &behavior_hold_tap_config_##n##_gettime, \ - .flavor = DT_INST_PROP(n, flavor), \ + .flavor = DT_ENUM_IDX(DT_DRV_INST(n), flavor), \ }; \ DEVICE_AND_API_INIT( \ behavior_hold_tap_##n, DT_INST_LABEL(n), behavior_hold_tap_init, \ diff --git a/app/src/event_manager.c b/app/src/event_manager.c index 2f423fc..47ad6b7 100644 --- a/app/src/event_manager.c +++ b/app/src/event_manager.c @@ -71,13 +71,23 @@ int zmk_event_manager_raise_after(struct zmk_event_header *event, const struct z return -EINVAL; } -int zmk_event_manager_release(struct zmk_event_header *event) +int zmk_event_manager_raise_at(struct zmk_event_header *event, const struct zmk_listener *listener) { - return zmk_event_manager_handle_from(event, event->last_listener_index + 1); -} + u8_t len = __event_subscriptions_end - __event_subscriptions_start; + for (int i = 0; i < len; i++) { + struct zmk_event_subscription *ev_sub = __event_subscriptions_start + i; + + if (ev_sub->event_type == event->event && ev_sub->listener == listener) { + return zmk_event_manager_handle_from(event, i); + } + } + LOG_WRN("Unable to find where to raise this event"); + + return -EINVAL; +} -int zmk_event_manager_release_again(struct zmk_event_header *event) +int zmk_event_manager_release(struct zmk_event_header *event) { - return zmk_event_manager_handle_from(event, event->last_listener_index); -} \ No newline at end of file + return zmk_event_manager_handle_from(event, event->last_listener_index + 1); +} diff --git a/app/tests/hold-tap/README.md b/app/tests/hold-tap/README.md new file mode 100644 index 0000000..0630132 --- /dev/null +++ b/app/tests/hold-tap/README.md @@ -0,0 +1 @@ +Refer to the pdf/open document "zmk-modtap-proposal.{pdf,odt}" in this directory for a visual representation of the numbered tests for hold-tap. diff --git a/docs/docs/behavior/mod-tap.md b/docs/docs/behavior/mod-tap.md index cbe95e4..dcac492 100644 --- a/docs/docs/behavior/mod-tap.md +++ b/docs/docs/behavior/mod-tap.md @@ -22,7 +22,7 @@ The Mod-Tap behavior either acts as a held modifier, or as a tapped keycode. Example: ``` -&mt MOD_LSFT A +&mt LSFT A ``` ### Configuration -- cgit v1.2.3 From c2ffeb1cf4a27b79c9fcc7cf0c83deab3cd4b84e Mon Sep 17 00:00:00 2001 From: Kurtis Lew Date: Wed, 2 Sep 2020 07:21:45 -0700 Subject: Added Copyright Header to Kconfig.defconfig --- app/boards/shields/iris/Kconfig.defconfig | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/boards/shields/iris/Kconfig.defconfig b/app/boards/shields/iris/Kconfig.defconfig index bf4919a..6439780 100644 --- a/app/boards/shields/iris/Kconfig.defconfig +++ b/app/boards/shields/iris/Kconfig.defconfig @@ -1,3 +1,5 @@ +# Copyright (c) 2020 Pete Johanson, Kurtis Lew +# SPDX-License-Identifier: MIT if SHIELD_IRIS_LEFT @@ -11,4 +13,4 @@ if SHIELD_IRIS_RIGHT config ZMK_KEYBOARD_NAME default "Iris Right" -endif \ No newline at end of file +endif -- cgit v1.2.3 From 6e8f19028a58d5238aa75b3fef3551e2cedaebdc Mon Sep 17 00:00:00 2001 From: Kurtis Lew Date: Wed, 2 Sep 2020 07:22:39 -0700 Subject: Added copyright header to iris.keymap --- app/boards/shields/iris/iris.keymap | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/boards/shields/iris/iris.keymap b/app/boards/shields/iris/iris.keymap index 4607adf..46b0817 100644 --- a/app/boards/shields/iris/iris.keymap +++ b/app/boards/shields/iris/iris.keymap @@ -1,3 +1,6 @@ +# Copyright (c) 2020 Pete Johanson, Kurtis Lew +# SPDX-License-Identifier: MIT + #include #include -- cgit v1.2.3 From c9a82d71d06146dfe706a2e8d223dab593dffffc Mon Sep 17 00:00:00 2001 From: Okke Formsma Date: Wed, 2 Sep 2020 16:41:39 +0200 Subject: fixes for feedback round 2 --- app/dts/behaviors.dtsi | 1 - app/dts/behaviors/homerow_tap.dtsi | 12 ----------- app/src/behaviors/behavior_hold_tap.c | 39 +++++++++++++++++++++++------------ docs/docs/behavior/hold-tap.md | 4 ++-- 4 files changed, 28 insertions(+), 28 deletions(-) delete mode 100644 app/dts/behaviors/homerow_tap.dtsi diff --git a/app/dts/behaviors.dtsi b/app/dts/behaviors.dtsi index fdcf426..ab70bcc 100644 --- a/app/dts/behaviors.dtsi +++ b/app/dts/behaviors.dtsi @@ -3,7 +3,6 @@ #include #include #include -#include #include #include #include diff --git a/app/dts/behaviors/homerow_tap.dtsi b/app/dts/behaviors/homerow_tap.dtsi deleted file mode 100644 index 4162c28..0000000 --- a/app/dts/behaviors/homerow_tap.dtsi +++ /dev/null @@ -1,12 +0,0 @@ -/ { - behaviors { - ht: behavior_homerow_mod { - compatible = "zmk,behavior-hold-tap"; - label = "HOMEROW_MOD"; - #binding-cells = <2>; - flavor = "balanced"; - tapping_term_ms = <200>; - bindings = <&kp>, <&kp>; - }; - }; -}; diff --git a/app/src/behaviors/behavior_hold_tap.c b/app/src/behaviors/behavior_hold_tap.c index cd788f7..2c6d996 100644 --- a/app/src/behaviors/behavior_hold_tap.c +++ b/app/src/behaviors/behavior_hold_tap.c @@ -29,6 +29,13 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); // increase if you have keyboard with more keys. #define ZMK_BHV_HOLD_TAP_POSITION_NOT_USED 9999 + +enum flavor { + ZMK_BHV_HOLD_TAP_FLAVOR_HOLD_PREFERRED = 0, + ZMK_BHV_HOLD_TAP_FLAVOR_BALANCED = 1, + ZMK_BHV_HOLD_TAP_FLAVOR_TAP_PREFERRED = 2, +}; + struct behavior_hold_tap_behaviors { struct zmk_behavior_binding tap; struct zmk_behavior_binding hold; @@ -39,7 +46,7 @@ typedef k_timeout_t (*timer_func)(); struct behavior_hold_tap_config { timer_func tapping_term_ms; struct behavior_hold_tap_behaviors *behaviors; - int flavor; + enum flavor flavor; }; // this data is specific for each hold-tap @@ -197,9 +204,6 @@ static void decide_balanced(struct active_hold_tap *hold_tap, enum decision_mome hold_tap->is_decided = true; break; case HT_OTHER_KEY_UP: - hold_tap->is_hold = 1; - hold_tap->is_decided = true; - break; case HT_TIMER_EVENT: hold_tap->is_hold = 1; hold_tap->is_decided = true; @@ -231,9 +235,6 @@ static void decide_hold_preferred(struct active_hold_tap *hold_tap, enum decisio hold_tap->is_decided = true; break; case HT_OTHER_KEY_DOWN: - hold_tap->is_hold = 1; - hold_tap->is_decided = true; - break; case HT_TIMER_EVENT: hold_tap->is_hold = 1; hold_tap->is_decided = true; @@ -242,6 +243,18 @@ static void decide_hold_preferred(struct active_hold_tap *hold_tap, enum decisio } } +static inline char* flavor_str(enum flavor flavor) { + switch(flavor) { + case ZMK_BHV_HOLD_TAP_FLAVOR_HOLD_PREFERRED: + return "hold-preferred"; + case ZMK_BHV_HOLD_TAP_FLAVOR_BALANCED: + return "balanced"; + case ZMK_BHV_HOLD_TAP_FLAVOR_TAP_PREFERRED: + return "tap-preferred"; + } + return "UNKNOWN FLAVOR"; +} + static void decide_hold_tap(struct active_hold_tap *hold_tap, enum decision_moment event) { if (hold_tap->is_decided) { @@ -253,13 +266,13 @@ static void decide_hold_tap(struct active_hold_tap *hold_tap, enum decision_mome return; } - int flavor = hold_tap->config->flavor; - if (flavor == 1) { + switch(hold_tap->config->flavor) { + case ZMK_BHV_HOLD_TAP_FLAVOR_HOLD_PREFERRED: + decide_hold_preferred(hold_tap, event); + case ZMK_BHV_HOLD_TAP_FLAVOR_BALANCED: decide_balanced(hold_tap, event); - } else if (flavor == 2) { + case ZMK_BHV_HOLD_TAP_FLAVOR_TAP_PREFERRED: decide_tap_preferred(hold_tap, event); - } else if (flavor == 0) { - decide_hold_preferred(hold_tap, event); } if (!hold_tap->is_decided) { @@ -269,7 +282,7 @@ static void decide_hold_tap(struct active_hold_tap *hold_tap, enum decision_mome LOG_DBG("%d decided %s (%s event %d)", hold_tap->position, hold_tap->is_hold ? "hold" : "tap", - flavor == 0 ? "hold-preferred" : flavor == 1 ? "balanced": "tap-preferred", + flavor_str(hold_tap->config->flavor), event); undecided_hold_tap = NULL; diff --git a/docs/docs/behavior/hold-tap.md b/docs/docs/behavior/hold-tap.md index b586b90..fa68538 100644 --- a/docs/docs/behavior/hold-tap.md +++ b/docs/docs/behavior/hold-tap.md @@ -31,9 +31,9 @@ A code example which configures a mod-tap setting that works with homerow mods: / { behaviors { - &hm: homerow_mods { + hm: homerow_mods { compatible = "zmk,behavior-hold-tap"; - label = "homerow_mods"; + label = "HOMEROW_MODS"; #binding-cells = <2>; tapping_term_ms = <175>; flavor = "balanced"; -- cgit v1.2.3 From 6f74e61dd383f7b62280f230dafa66014800bd78 Mon Sep 17 00:00:00 2001 From: Kevin Date: Wed, 2 Sep 2020 18:25:46 -0700 Subject: Added user and dev encoder docs --- docs/docs/dev-guide-new-shield.md | 79 +++++++++++++++++++++++++++++++++++++++ docs/docs/feature/encoders.md | 14 ++++--- docs/sidebars.js | 1 - 3 files changed, 88 insertions(+), 6 deletions(-) diff --git a/docs/docs/dev-guide-new-shield.md b/docs/docs/dev-guide-new-shield.md index 8556623..7825d8b 100644 --- a/docs/docs/dev-guide-new-shield.md +++ b/docs/docs/dev-guide-new-shield.md @@ -3,6 +3,9 @@ id: dev-guide-new-shield title: New Keyboard Shield --- +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + ## Overview This guide will walk through the steps necessary to add ZMK support for a keyboard the uses a (Pro Micro compatible) addon MCU board to provide the microprocessor. @@ -13,6 +16,7 @@ The high level steps are: - Add the shield overlay file to define the [KSCAN driver]() for detecting key press/release. - (Optional) Add the matrix transform for mapping KSCAN row/column values to sane key positions. This is needed for non-rectangular keyboards, or where the underlying row/column pin arrangement does not map one to one with logical locations on the keyboard. - Add a default keymap, which users can override in their own configs as needed. +- Add support for features such as encoders, OLED displays, or RGB underglow. It may be helpful to review the upstream [shields documentation](https://docs.zephyrproject.org/2.3.0/guides/porting/shields.html#shields) to get a proper understanding of the underlying system before continuing. @@ -195,6 +199,81 @@ Further documentation on behaviors and bindings is forthcoming, but a summary of - `trans` is the "transparent" behavior, useful to be place in higher layers above `mo` bindings to be sure the key release is handled by the lower layer. No binding arguments are required. - `mt` is the "mod-tap" behavior, and takes two binding arguments, the modifier to use if held, and the keycode to send if tapped. +## Adding Features + +### Encoders + +EC11 encoder support can be added to your board or shield by adding the appropriate lines to your board/shield's configuration (.conf), device tree (.dtsi), and overlay (.overlay) files. + + + + +In your configuration file you will need to add the following lines so that the encoders can be enabled/disabled: + +``` +# Uncomment to enable encoder +# CONFIG_EC11=y +# CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y +``` + +These should be commented by default for encoders that are optional/can be swapped with switches, but can be uncommented if encoders are part of the default design. + +:::note +If building locally for split boards, you may need to add these lines to the specific half's configuration file as well as the combined configuration file. +::: + + + +In your device tree file you will need to add the following lines to define the encoder sensor: + + +``` +left_encoder: encoder_left { + compatible = "alps,ec11"; + label = "LEFT_ENCODER"; + a-gpios = ; + b-gpios = ; + resolution = <4>; + }; +``` +Here you will have to replace PIN_A and PIN_B with the appropriate pins that your PCB utilizes for the encoder(s). For keyboards that use the Pro Micro or any of the Pro Micro replacements, Sparkfun's [Pro Micro Hookup Guide](https://learn.sparkfun.com/tutorials/pro-micro--fio-v3-hookup-guide/hardware-overview-pro-micro) has a pinout diagram that can be useful to determine the right pins. Reference either the blue numbers labeled "Arduino" (digital pins) or the green numbers labeled "Analog" (analog pins). For pins that are labeled as both digital and analog, refer to your specific board's .dtsi file to determine how you should refer to that pin. + +Add additional encoders as necessary by duplicating the above lines, replacing `left` with whatever you would like to call your encoder, and updating the pins. Note that support for peripheral (right) side sensors over BLE is still in progress. + +Once you have defined the encoder sensors, you will have to add them to the list of sensors: + +``` +sensors { + compatible = "zmk,keymap-sensors"; + sensors = <&left_encoder &right_encoder>; + }; +``` + +In this example, a left_encoder and right_encoder are both added. Additional encoders can be added with spaces separating each, and the order they are added here determines the order in which you define their behavior in your keymap. + + + +Add the following lines to your overlay file(s) to enable the encoder: + +``` +&left_encoder { + status = "okay"; +}; +``` + +:::note +For split keyboards, make sure to add left hand encoders to the left .overlay file and right hand encoders to the right .overlay file. +::: + + + + ## Testing Once you've fully created the new keyboard shield definition, diff --git a/docs/docs/feature/encoders.md b/docs/docs/feature/encoders.md index 9f583cb..a5a796d 100644 --- a/docs/docs/feature/encoders.md +++ b/docs/docs/feature/encoders.md @@ -3,7 +3,7 @@ title: Encoders sidebar_label: Encoders --- -Existing support for encoders in ZMK is focused around the EC11 rotary encoder with push button design used in the majority of current keyboard and macropad designs. +Existing support for encoders in ZMK is focused around the five pin EC11 rotary encoder with push button design used in the majority of current keyboard and macropad designs. ## Enabling EC11 Encoders @@ -19,7 +19,7 @@ Keyboards and macropads with encoder support will typically take the two EC11 pi ### Rotation -Rotation is handled separately as a type of sensor. The behavior for this is set by defining `sensor-bindings` within a layer but below the `bindings` for the regular keys in the following format: +Rotation is handled separately as a type of sensor. The behavior for this is set in `sensor-bindings`, which is defined in each keymap layer in the following format: ``` sensor-bindings = ; @@ -29,12 +29,16 @@ sensor-bindings = ; - `CW_KEY` is the keycode activated by a clockwise turn. - `CCW_KEY` is the keycode activated by a counter-clockwise turn. -Behaviors for additional encoders can be configured by adding more `BINDING CW_KEY CCW_KEY` sets immediately after the first. +Additional encoders can be configured by adding more `BINDING CW_KEY CCW_KEY` sets immediately after the first. -As an example, a complete `sensor-bindings` for a Kyria would look like: +As an example, a complete `sensor-bindings` for a Kyria with two encoders could look like: ``` sensor-bindings = <&inc_dec_cp M_VOLU M_VOLD &inc_dec_kp PGUP PGDN>; ``` -In this example, the left encoder is configured to control volume up and down while the right encoder sends either Page Up or Page Down. +Here, the left encoder is configured to control volume up and down while the right encoder sends either Page Up or Page Down. + +## Adding Encoder Support + +See the [New Keyboard Shield](docs/dev-guide-new-shield) documentation for how to add or modify additional encoders to your shield. diff --git a/docs/sidebars.js b/docs/sidebars.js index 924010e..fb82dfa 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -25,7 +25,6 @@ module.exports = { ], "Dev Guides": [ "dev-guide-new-shield", - "dev-guide-add-encoders", "dev-guide-usb-logging"], }, }; -- cgit v1.2.3 From 2629aa354f3d908e3afc13e3cd12a79974d77234 Mon Sep 17 00:00:00 2001 From: Kevin Date: Wed, 2 Sep 2020 18:28:00 -0700 Subject: Removed old dev encoder page --- docs/docs/dev-guide-add-encoders.md | 53 ------------------------------------- 1 file changed, 53 deletions(-) delete mode 100644 docs/docs/dev-guide-add-encoders.md diff --git a/docs/docs/dev-guide-add-encoders.md b/docs/docs/dev-guide-add-encoders.md deleted file mode 100644 index 79f353f..0000000 --- a/docs/docs/dev-guide-add-encoders.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -id: dev-guide-add-encoders -title: Adding Encoders ---- - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - -EC11 encoder support can be added to your board or shield by adding the appropriate lines to your board/shield's .conf, .dtsi, and .overlay files. - - - - -In your .conf file you will need to add the following lines so that the EC11 drivers can be enabled: - -``` -# Uncomment to enable encoder -# CONFIG_EC11=y -# CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y -``` - -These should be commented by default if encoders are optional, but can be uncommented if encoders are part of the original design. - - - -In your .dtsi file you will need to add the following lines to define the encoder sensor: - - -``` -left_encoder: encoder_left { - compatible = "alps,ec11"; - label = "LEFT_ENCODER"; - a-gpios = ; - b-gpios = ; - resolution = <4>; - }; -``` -Here you will have to replace PIN_A and PIN_B with the appropriate pins that your PCB utilizes for the encoder(s). - -For keyboards that use the Pro Micro or any of the Pro Micro replacements, Sparkfun's [Pro Micro Hookup Guide](https://learn.sparkfun.com/tutorials/pro-micro--fio-v3-hookup-guide/hardware-overview-pro-micro) has a pinout diagram that can be useful to determine the right pins. Reference either the blue numbers labeled "Arduino" (digital pins) or the green numbers labeled "Analog" (analog pins). For pins that are labeled as both digital and analog, refer to your specific board's .dtsi file to determine how you should refer to that pin. - -Replace `left` with `right` to define a right-side encoder, although note that support for peripheral side sensors is still in progress. - - - - - -- cgit v1.2.3 From 5eb50d7b181d2c61099b49f74b1b54c996370914 Mon Sep 17 00:00:00 2001 From: Kevin Date: Wed, 2 Sep 2020 18:36:35 -0700 Subject: Fixed links --- docs/docs/feature/encoders.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docs/feature/encoders.md b/docs/docs/feature/encoders.md index a5a796d..38ff9d3 100644 --- a/docs/docs/feature/encoders.md +++ b/docs/docs/feature/encoders.md @@ -25,7 +25,7 @@ Rotation is handled separately as a type of sensor. The behavior for this is set sensor-bindings = ; ``` -- `BINDING` is one of two rotation bindings that are currently defined, `&inc_dec_cp` for consumer key presses or `&inc_dec_kp` for normal key presses (see [Key Press](<(/docs/behavior/key-press)>) for the difference between the two). +- `BINDING` is one of two rotation bindings that are currently defined, `&inc_dec_cp` for consumer key presses or `&inc_dec_kp` for normal key presses (see [Key Press](/docs/behavior/key-press) for the difference between the two). - `CW_KEY` is the keycode activated by a clockwise turn. - `CCW_KEY` is the keycode activated by a counter-clockwise turn. @@ -41,4 +41,4 @@ Here, the left encoder is configured to control volume up and down while the rig ## Adding Encoder Support -See the [New Keyboard Shield](docs/dev-guide-new-shield) documentation for how to add or modify additional encoders to your shield. +See the [New Keyboard Shield](/docs/dev-guide-new-shield) documentation for how to add or modify additional encoders to your shield. -- cgit v1.2.3 From 9b1fd1323f4fe4a812a08f0d6b762250f54d191f Mon Sep 17 00:00:00 2001 From: kurtis-lew Date: Wed, 2 Sep 2020 20:53:14 -0700 Subject: Update setup.sh --- docs/static/setup.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/static/setup.sh b/docs/static/setup.sh index a32718d..ad5416b 100644 --- a/docs/static/setup.sh +++ b/docs/static/setup.sh @@ -52,6 +52,7 @@ select opt in "${options[@]}" "Quit"; do 3 ) shield_title="Corne" shield="corne"; split="y"; break;; 4 ) shield_title="Splitreus62" shield="splitreus62"; split="y"; break;; 5 ) shield_title="Sofle" shield="sofle"; split="y"; break;; + 6 ) shield_title="Iris" shield="iris"; split="y"; break;; # Add link to docs on adding your own custom shield in your ZMK config! # $(( ${#options[@]}+1 )) ) echo "Other!"; break;; -- cgit v1.2.3 From f738fd7a670994bfbe20601a4de9a64cd98020ad Mon Sep 17 00:00:00 2001 From: Kurtis Lew Date: Wed, 2 Sep 2020 20:57:42 -0700 Subject: Update setup.sh --- docs/static/setup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/static/setup.sh b/docs/static/setup.sh index ad5416b..70defdf 100644 --- a/docs/static/setup.sh +++ b/docs/static/setup.sh @@ -38,7 +38,7 @@ echo "" echo "Keyboard Shield Selection:" prompt="Pick an keyboard:" -options=("Kyria" "Lily58" "Corne" "Splitreus62" "Sofle") +options=("Kyria" "Lily58" "Corne" "Splitreus62" "Sofle" "Iris") PS3="$prompt " # TODO: Add support for "Other" and linking to docs on adding custom shields in user config repos. -- cgit v1.2.3 From e904a098b3ad2af28485e0f79287ac3b04947d1c Mon Sep 17 00:00:00 2001 From: Kevin Date: Wed, 2 Sep 2020 21:12:22 -0700 Subject: Added keymap update to encoder docs --- docs/docs/dev-guide-new-shield.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/docs/docs/dev-guide-new-shield.md b/docs/docs/dev-guide-new-shield.md index 7825d8b..bc5175b 100644 --- a/docs/docs/dev-guide-new-shield.md +++ b/docs/docs/dev-guide-new-shield.md @@ -203,7 +203,7 @@ Further documentation on behaviors and bindings is forthcoming, but a summary of ### Encoders -EC11 encoder support can be added to your board or shield by adding the appropriate lines to your board/shield's configuration (.conf), device tree (.dtsi), and overlay (.overlay) files. +EC11 encoder support can be added to your board or shield by adding the appropriate lines to your board/shield's configuration (.conf), device tree (.dtsi), overlay (.overlay), and keymap (.keymap) files. @@ -271,6 +272,15 @@ Add the following lines to your overlay file(s) to enable the encoder: For split keyboards, make sure to add left hand encoders to the left .overlay file and right hand encoders to the right .overlay file. ::: + + +Add the following line to your keymap file to add default encoder behavior bindings: + +``` +sensor-bindings = <&inc_dec_cp M_VOLU M_VOLD>; +``` +Add additional bindings as necessary to match the default number of encoders on your board. See the [Encoders](/docs/feature/encoders) and [Keymap](/docs/feature/keymaps) feature documentation for more details. + -- cgit v1.2.3 From e559cb2d713b4248697518f6bf3ece2e05b87ab3 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Thu, 3 Sep 2020 10:14:16 -0400 Subject: Add hold-tap to sidebar. --- docs/sidebars.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/docs/sidebars.js b/docs/sidebars.js index 53c5cf3..3df183b 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -1,6 +1,13 @@ module.exports = { someSidebar: { - "Getting Started": ["intro", "hardware", "faq", "user-setup","customization", "bond-reset"], + "Getting Started": [ + "intro", + "hardware", + "faq", + "user-setup", + "customization", + "bond-reset", + ], Features: [ "feature/keymaps", "feature/displays", @@ -11,6 +18,7 @@ module.exports = { "behavior/key-press", "behavior/layers", "behavior/misc", + "behavior/hold-tap", "behavior/mod-tap", "behavior/reset", "behavior/lighting", -- cgit v1.2.3 From 0ede549a13d6f79ef30ef6cb6e056ae94034ea8d Mon Sep 17 00:00:00 2001 From: CrossR Date: Thu, 3 Sep 2020 22:54:06 +0100 Subject: Fix Sofle build, update Intro page. --- app/boards/shields/sofle/sofle.dtsi | 2 ++ docs/docs/feature/keymaps.md | 2 +- docs/docs/intro.md | 6 ++++-- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/app/boards/shields/sofle/sofle.dtsi b/app/boards/shields/sofle/sofle.dtsi index 653a772..bff42f6 100644 --- a/app/boards/shields/sofle/sofle.dtsi +++ b/app/boards/shields/sofle/sofle.dtsi @@ -50,6 +50,7 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) a-gpios = <&pro_micro_a 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&pro_micro_a 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; resolution = <4>; + status = "disabled"; }; right_encoder: encoder_right { @@ -58,6 +59,7 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) a-gpios = <&pro_micro_a 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; b-gpios = <&pro_micro_a 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; resolution = <4>; + status = "disabled"; }; sensors { diff --git a/docs/docs/feature/keymaps.md b/docs/docs/feature/keymaps.md index d991925..56fc2cc 100644 --- a/docs/docs/feature/keymaps.md +++ b/docs/docs/feature/keymaps.md @@ -55,7 +55,7 @@ in the stack _also_ get the event. ## Behavior Bindings Binding a behavior at a certain key position may include up to two extra parameters that are used to -alter the behavior when that specific key position is activated/deactived. For example, when binding +alter the behavior when that specific key position is activated/deactivated. For example, when binding the "key press" (`kp`) behavior at a certain key position, you must specific _which_ keycode should be used for that key position. diff --git a/docs/docs/intro.md b/docs/docs/intro.md index 29045f7..e75ca3c 100644 --- a/docs/docs/intro.md +++ b/docs/docs/intro.md @@ -18,21 +18,23 @@ include: - HID Over GATT (HOG) - This is the official term for BLE HID devices - Keymaps and layers with basic keycodes -- Some initial work on one "behavior", Mod-Tap +- Mod-Tap +- Layer Tap - Basic HID over USB - Basic consumer (media) keycodes. - Basic OLED display logic - Basic Split support +- Basic RGB Underglow - Encoders ## Missing Features - One Shot -- Layer Tap - Complete split support - Battery reporting - Low power mode - Shell over BLE +- Macros ## Code Of Conduct -- cgit v1.2.3 From 89d604b74bb3292af53dba7d67b2ae27edfed420 Mon Sep 17 00:00:00 2001 From: CrossR Date: Fri, 4 Sep 2020 19:31:04 +0100 Subject: Clarify low power mode wording. --- docs/docs/intro.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/intro.md b/docs/docs/intro.md index e75ca3c..e20f053 100644 --- a/docs/docs/intro.md +++ b/docs/docs/intro.md @@ -32,7 +32,7 @@ include: - One Shot - Complete split support - Battery reporting -- Low power mode +- Low power sleep states - Shell over BLE - Macros -- cgit v1.2.3 From df422e0205a63110094bf8bbe1a839ab52c97abb Mon Sep 17 00:00:00 2001 From: CrossR Date: Fri, 4 Sep 2020 20:45:10 +0100 Subject: Revert changes to Intro page. --- docs/docs/intro.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/docs/docs/intro.md b/docs/docs/intro.md index e20f053..29045f7 100644 --- a/docs/docs/intro.md +++ b/docs/docs/intro.md @@ -18,23 +18,21 @@ include: - HID Over GATT (HOG) - This is the official term for BLE HID devices - Keymaps and layers with basic keycodes -- Mod-Tap -- Layer Tap +- Some initial work on one "behavior", Mod-Tap - Basic HID over USB - Basic consumer (media) keycodes. - Basic OLED display logic - Basic Split support -- Basic RGB Underglow - Encoders ## Missing Features - One Shot +- Layer Tap - Complete split support - Battery reporting -- Low power sleep states +- Low power mode - Shell over BLE -- Macros ## Code Of Conduct -- cgit v1.2.3 From 4ce42350e70a7e4f6b9b7ad3b262d0f00f485995 Mon Sep 17 00:00:00 2001 From: kurtis-lew Date: Fri, 4 Sep 2020 20:28:45 -0700 Subject: Update iris_right.overlay --- app/boards/shields/iris/iris_right.overlay | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/boards/shields/iris/iris_right.overlay b/app/boards/shields/iris/iris_right.overlay index 3f3dcb8..2d5dce8 100644 --- a/app/boards/shields/iris/iris_right.overlay +++ b/app/boards/shields/iris/iris_right.overlay @@ -12,12 +12,12 @@ &kscan0 { col-gpios - = <&pro_micro_a 1 GPIO_ACTIVE_HIGH> - , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> + = <&pro_micro_d 10 GPIO_ACTIVE_HIGH> , <&pro_micro_d 16 GPIO_ACTIVE_HIGH> - , <&pro_micro_d 10 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 1 GPIO_ACTIVE_HIGH> ; }; -- cgit v1.2.3 From 0559ec9013c02a878d94b0d7ad37fa2e9b00b58c Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Fri, 4 Sep 2020 23:58:31 -0400 Subject: fix(ci): Only run tests if app/{src,tests} changes --- .github/workflows/test.yml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 3d2c76b..a6af058 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,4 +1,12 @@ -on: [push, pull_request] +on: + push: + paths: + - "app/tests/**" + - "app/src/**" + pull_request: + paths: + - "app/tests/**" + - "app/src/**" name: Test -- cgit v1.2.3 From 80034c007826a026833d85d4fde7fc9be3898229 Mon Sep 17 00:00:00 2001 From: Richard Jones Date: Sun, 6 Sep 2020 15:51:12 +0100 Subject: Add RoMac / non-split template support --- docs/static/setup.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/docs/static/setup.sh b/docs/static/setup.sh index 70defdf..83e7451 100644 --- a/docs/static/setup.sh +++ b/docs/static/setup.sh @@ -38,7 +38,7 @@ echo "" echo "Keyboard Shield Selection:" prompt="Pick an keyboard:" -options=("Kyria" "Lily58" "Corne" "Splitreus62" "Sofle" "Iris") +options=("Kyria" "Lily58" "Corne" "Splitreus62" "Sofle" "Iris" "RoMac") PS3="$prompt " # TODO: Add support for "Other" and linking to docs on adding custom shields in user config repos. @@ -53,6 +53,7 @@ select opt in "${options[@]}" "Quit"; do 4 ) shield_title="Splitreus62" shield="splitreus62"; split="y"; break;; 5 ) shield_title="Sofle" shield="sofle"; split="y"; break;; 6 ) shield_title="Iris" shield="iris"; split="y"; break;; + 7 ) shield_title="RoMac" shield="romac"; split="n"; break;; # Add link to docs on adding your own custom shield in your ZMK config! # $(( ${#options[@]}+1 )) ) echo "Other!"; break;; @@ -62,6 +63,10 @@ select opt in "${options[@]}" "Quit"; do esac done +if [ "$split" == "n" ]; then + repo_path="https://github.com/bmcgavin/zmk-config-template.git" +fi + read -e -p "Copy in the stock keymap for customization? [Yn]: " copy_keymap if [ -z "$copy_keymap" ] || [ "$copy_keymap" == "Y" ] || [ "$copy_keymap" == "y" ]; then copy_keymap="yes"; fi -- cgit v1.2.3 From 01da54aadfe1ed9027e71754f9d897f68da900ea Mon Sep 17 00:00:00 2001 From: Richard Jones Date: Sun, 6 Sep 2020 17:54:45 +0100 Subject: point setup.sh at upstream --- docs/static/setup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/static/setup.sh b/docs/static/setup.sh index 83e7451..5d203a4 100644 --- a/docs/static/setup.sh +++ b/docs/static/setup.sh @@ -64,7 +64,7 @@ select opt in "${options[@]}" "Quit"; do done if [ "$split" == "n" ]; then - repo_path="https://github.com/bmcgavin/zmk-config-template.git" + repo_path="https://github.com/zmkfirmware/zmk-config-template.git" fi read -e -p "Copy in the stock keymap for customization? [Yn]: " copy_keymap -- cgit v1.2.3