initial implementation for modifiers
https://github.com/zmkfirmware/zmk/issues/86
This commit is contained in:
parent
a9e729b427
commit
4f258efbf1
77 changed files with 597 additions and 229 deletions
|
@ -3,7 +3,6 @@
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: MIT
|
* SPDX-License-Identifier: MIT
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define USAGE_KEYPAD 0x07
|
#define USAGE_KEYPAD 0x07
|
||||||
|
@ -144,11 +143,24 @@
|
||||||
#define M_VOLU 0xE9
|
#define M_VOLU 0xE9
|
||||||
#define M_VOLD 0xEA
|
#define M_VOLD 0xEA
|
||||||
|
|
||||||
#define MOD_LCTL (1 << 0x00)
|
#define MOD_LCTL 0x01
|
||||||
#define MOD_LSFT (1 << 0x01)
|
#define MOD_LSFT 0x02
|
||||||
#define MOD_LALT (1 << 0x02)
|
#define MOD_LALT 0x04
|
||||||
#define MOD_LGUI (1 << 0x03)
|
#define MOD_LGUI 0x08
|
||||||
#define MOD_RCTL (1 << 0x04)
|
#define MOD_RCTL 0x10
|
||||||
#define MOD_RSFT (1 << 0x05)
|
#define MOD_RSFT 0x20
|
||||||
#define MOD_RALT (1 << 0x06)
|
#define MOD_RALT 0x40
|
||||||
#define MOD_RGUI (1 << 0x07)
|
#define MOD_RGUI 0x80
|
||||||
|
|
||||||
|
#define SELECT_MODS(keycode) (keycode >> 24)
|
||||||
|
#define STRIP_MODS(keycode) (keycode & ~(0xFF << 24))
|
||||||
|
#define APPLY_MODS(mods, keycode) (mods << 24 | keycode)
|
||||||
|
|
||||||
|
#define LC(keycode) APPLY_MODS(MOD_LCTL, keycode)
|
||||||
|
#define LS(keycode) APPLY_MODS(MOD_LSFT, keycode)
|
||||||
|
#define LA(keycode) APPLY_MODS(MOD_LALT, keycode)
|
||||||
|
#define LG(keycode) APPLY_MODS(MOD_LGUI, keycode)
|
||||||
|
#define RC(keycode) APPLY_MODS(MOD_RCTL, keycode)
|
||||||
|
#define RS(keycode) APPLY_MODS(MOD_RSFT, keycode)
|
||||||
|
#define RA(keycode) APPLY_MODS(MOD_RALT, keycode)
|
||||||
|
#define RG(keycode) APPLY_MODS(MOD_RGUI, keycode)
|
||||||
|
|
|
@ -7,22 +7,24 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <zephyr.h>
|
#include <zephyr.h>
|
||||||
|
#include <dt-bindings/zmk/keys.h>
|
||||||
#include <zmk/event-manager.h>
|
#include <zmk/event-manager.h>
|
||||||
|
|
||||||
struct keycode_state_changed {
|
struct keycode_state_changed {
|
||||||
struct zmk_event_header header;
|
struct zmk_event_header header;
|
||||||
u8_t usage_page;
|
u8_t usage_page;
|
||||||
u32_t keycode;
|
u32_t keycode;
|
||||||
|
u8_t implicit_modifiers;
|
||||||
bool state;
|
bool state;
|
||||||
};
|
};
|
||||||
|
|
||||||
ZMK_EVENT_DECLARE(keycode_state_changed);
|
ZMK_EVENT_DECLARE(keycode_state_changed);
|
||||||
|
|
||||||
inline struct keycode_state_changed *create_keycode_state_changed(u8_t usage_page, u32_t keycode,
|
static inline struct keycode_state_changed *create_keycode_state_changed(u8_t usage_page, u32_t keycode, bool state) {
|
||||||
bool state) {
|
|
||||||
struct keycode_state_changed *ev = new_keycode_state_changed();
|
struct keycode_state_changed *ev = new_keycode_state_changed();
|
||||||
ev->usage_page = usage_page;
|
ev->usage_page = usage_page;
|
||||||
ev->keycode = keycode;
|
ev->keycode = STRIP_MODS(keycode);
|
||||||
|
ev->implicit_modifiers = SELECT_MODS(keycode);
|
||||||
ev->state = state;
|
ev->state = state;
|
||||||
return ev;
|
return ev;
|
||||||
}
|
}
|
|
@ -164,8 +164,8 @@ struct zmk_hid_consumer_report {
|
||||||
|
|
||||||
int zmk_hid_register_mod(zmk_mod modifier);
|
int zmk_hid_register_mod(zmk_mod modifier);
|
||||||
int zmk_hid_unregister_mod(zmk_mod modifier);
|
int zmk_hid_unregister_mod(zmk_mod modifier);
|
||||||
int zmk_hid_register_mods(zmk_mod_flags modifiers);
|
int zmk_hid_implicit_modifiers_press(zmk_mod_flags implicit_modifiers);
|
||||||
int zmk_hid_unregister_mods(zmk_mod_flags modifiers);
|
int zmk_hid_implicit_modifiers_release();
|
||||||
int zmk_hid_keypad_press(zmk_key key);
|
int zmk_hid_keypad_press(zmk_key key);
|
||||||
int zmk_hid_keypad_release(zmk_key key);
|
int zmk_hid_keypad_release(zmk_key key);
|
||||||
void zmk_hid_keypad_clear();
|
void zmk_hid_keypad_clear();
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
|
|
||||||
#include <device.h>
|
#include <device.h>
|
||||||
#include <drivers/behavior.h>
|
#include <drivers/behavior.h>
|
||||||
|
#include <dt-bindings/zmk/keys.h>
|
||||||
#include <logging/log.h>
|
#include <logging/log.h>
|
||||||
#include <zmk/behavior.h>
|
#include <zmk/behavior.h>
|
||||||
#include <zmk/matrix.h>
|
#include <zmk/matrix.h>
|
||||||
|
@ -16,7 +17,6 @@
|
||||||
#include <zmk/events/position-state-changed.h>
|
#include <zmk/events/position-state-changed.h>
|
||||||
#include <zmk/events/keycode-state-changed.h>
|
#include <zmk/events/keycode-state-changed.h>
|
||||||
#include <zmk/events/modifiers-state-changed.h>
|
#include <zmk/events/modifiers-state-changed.h>
|
||||||
#include <zmk/hid.h>
|
|
||||||
#include <zmk/behavior.h>
|
#include <zmk/behavior.h>
|
||||||
|
|
||||||
LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL);
|
LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL);
|
||||||
|
@ -427,7 +427,7 @@ static int position_state_changed_listener(const struct zmk_event_header *eh) {
|
||||||
return ZMK_EV_EVENT_CAPTURED;
|
return ZMK_EV_EVENT_CAPTURED;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool is_mod(struct keycode_state_changed *ev) {
|
static inline bool only_mods(struct keycode_state_changed *ev) {
|
||||||
return ev->usage_page == USAGE_KEYPAD && ev->keycode >= LCTL && ev->keycode <= RGUI;
|
return ev->usage_page == USAGE_KEYPAD && ev->keycode >= LCTL && ev->keycode <= RGUI;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -440,7 +440,7 @@ static int keycode_state_changed_listener(const struct zmk_event_header *eh) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!is_mod(ev)) {
|
if (!only_mods(ev)) {
|
||||||
// LOG_DBG("0x%02X bubble (not a mod)", ev->keycode);
|
// LOG_DBG("0x%02X bubble (not a mod)", ev->keycode);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,29 +8,44 @@
|
||||||
LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL);
|
LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL);
|
||||||
|
|
||||||
#include <zmk/hid.h>
|
#include <zmk/hid.h>
|
||||||
|
#include <dt-bindings/zmk/keys.h>
|
||||||
|
|
||||||
static struct zmk_hid_keypad_report kp_report = {
|
static struct zmk_hid_keypad_report kp_report = {
|
||||||
.report_id = 1, .body = {.modifiers = 0, ._reserved = 0, .keys = {0}}};
|
.report_id = 1, .body = {.modifiers = 0, ._reserved = 0, .keys = {0}}};
|
||||||
|
|
||||||
static struct zmk_hid_consumer_report consumer_report = {.report_id = 2, .body = {.keys = {0}}};
|
static struct zmk_hid_consumer_report consumer_report = {.report_id = 2, .body = {.keys = {0}}};
|
||||||
|
|
||||||
#define _TOGGLE_MOD(mod, state) \
|
// Keep track of how often a modifier was pressed.
|
||||||
if (modifier > MOD_RGUI) { \
|
// Only release the modifier if the count is 0.
|
||||||
return -EINVAL; \
|
static int explicit_modifier_counts[8] = {0, 0, 0, 0, 0, 0, 0, 0};
|
||||||
} \
|
static zmk_mod_flags explicit_modifiers = 0;
|
||||||
WRITE_BIT(kp_report.body.modifiers, mod, state); \
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
int zmk_hid_register_mod(zmk_mod modifier) { _TOGGLE_MOD(modifier, true); }
|
#define SET_MODIFIERS(mods) \
|
||||||
int zmk_hid_unregister_mod(zmk_mod modifier) { _TOGGLE_MOD(modifier, false); }
|
{ \
|
||||||
|
kp_report.body.modifiers = mods; \
|
||||||
|
LOG_DBG("Modifiers set to 0x%02X", kp_report.body.modifiers); \
|
||||||
|
}
|
||||||
|
|
||||||
int zmk_hid_register_mods(zmk_mod_flags modifiers) {
|
int zmk_hid_register_mod(zmk_mod modifier) {
|
||||||
kp_report.body.modifiers |= modifiers;
|
explicit_modifier_counts[modifier]++;
|
||||||
|
LOG_DBG("Modifier %d count %d", modifier, explicit_modifier_counts[modifier]);
|
||||||
|
WRITE_BIT(explicit_modifiers, modifier, true);
|
||||||
|
SET_MODIFIERS(explicit_modifiers);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int zmk_hid_unregister_mods(zmk_mod_flags modifiers) {
|
int zmk_hid_unregister_mod(zmk_mod modifier) {
|
||||||
kp_report.body.modifiers &= ~modifiers;
|
if (explicit_modifier_counts[modifier] <= 0) {
|
||||||
|
LOG_ERR("Tried to unregister modifier %d too often", modifier);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
explicit_modifier_counts[modifier]--;
|
||||||
|
LOG_DBG("Modifier %d count: %d", modifier, explicit_modifier_counts[modifier]);
|
||||||
|
if (explicit_modifier_counts[modifier] == 0) {
|
||||||
|
LOG_DBG("Modifier %d released", modifier);
|
||||||
|
WRITE_BIT(explicit_modifiers, modifier, false);
|
||||||
|
}
|
||||||
|
SET_MODIFIERS(explicit_modifiers);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -52,6 +67,16 @@ int zmk_hid_unregister_mods(zmk_mod_flags modifiers) {
|
||||||
break; \
|
break; \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int zmk_hid_implicit_modifiers_press(zmk_mod_flags implicit_modifiers) {
|
||||||
|
SET_MODIFIERS(explicit_modifiers | implicit_modifiers);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int zmk_hid_implicit_modifiers_release() {
|
||||||
|
SET_MODIFIERS(explicit_modifiers);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int zmk_hid_keypad_press(zmk_key code) {
|
int zmk_hid_keypad_press(zmk_key code) {
|
||||||
if (code >= LCTL && code <= RGUI) {
|
if (code >= LCTL && code <= RGUI) {
|
||||||
return zmk_hid_register_mod(code - LCTL);
|
return zmk_hid_register_mod(code - LCTL);
|
||||||
|
|
|
@ -15,10 +15,11 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL);
|
||||||
#include <zmk/hid.h>
|
#include <zmk/hid.h>
|
||||||
#include <zmk/endpoints.h>
|
#include <zmk/endpoints.h>
|
||||||
|
|
||||||
static int hid_listener_keycode_pressed(u8_t usage_page, u32_t keycode) {
|
static int hid_listener_keycode_pressed(u8_t usage_page, u32_t keycode,
|
||||||
|
zmk_mod_flags implicit_modifiers) {
|
||||||
int err;
|
int err;
|
||||||
LOG_DBG("usage_page 0x%02X keycode 0x%02X", usage_page, keycode);
|
LOG_DBG("usage_page 0x%02X keycode 0x%02X mods 0x%02X", usage_page, keycode,
|
||||||
|
implicit_modifiers);
|
||||||
switch (usage_page) {
|
switch (usage_page) {
|
||||||
case USAGE_KEYPAD:
|
case USAGE_KEYPAD:
|
||||||
err = zmk_hid_keypad_press(keycode);
|
err = zmk_hid_keypad_press(keycode);
|
||||||
|
@ -35,14 +36,15 @@ static int hid_listener_keycode_pressed(u8_t usage_page, u32_t keycode) {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
zmk_hid_implicit_modifiers_press(implicit_modifiers);
|
||||||
return zmk_endpoints_send_report(usage_page);
|
return zmk_endpoints_send_report(usage_page);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int hid_listener_keycode_released(u8_t usage_page, u32_t keycode) {
|
static int hid_listener_keycode_released(u8_t usage_page, u32_t keycode,
|
||||||
|
zmk_mod_flags implicit_modifiers) {
|
||||||
int err;
|
int err;
|
||||||
LOG_DBG("usage_page 0x%02X keycode 0x%02X", usage_page, keycode);
|
LOG_DBG("usage_page 0x%02X keycode 0x%02X mods 0x%02X", usage_page, keycode,
|
||||||
|
implicit_modifiers);
|
||||||
switch (usage_page) {
|
switch (usage_page) {
|
||||||
case USAGE_KEYPAD:
|
case USAGE_KEYPAD:
|
||||||
err = zmk_hid_keypad_release(keycode);
|
err = zmk_hid_keypad_release(keycode);
|
||||||
|
@ -57,39 +59,23 @@ static int hid_listener_keycode_released(u8_t usage_page, u32_t keycode) {
|
||||||
LOG_ERR("Unable to release keycode");
|
LOG_ERR("Unable to release keycode");
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
// There is a minor issue with this code.
|
||||||
|
// If LC(A) is pressed, then LS(B), then LC(A) is released, the shift for B will be released
|
||||||
|
// prematurely. This causes if LS(B) to repeat like Bbbbbbbb when pressed for a long time.
|
||||||
|
// Solving this would require keeping track of which key's implicit modifiers are currently
|
||||||
|
// active and only releasing modifiers at that time.
|
||||||
|
zmk_hid_implicit_modifiers_release();
|
||||||
return zmk_endpoints_send_report(usage_page);
|
return zmk_endpoints_send_report(usage_page);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int hid_listener_modifiers_pressed(zmk_mod_flags modifiers) {
|
|
||||||
LOG_DBG("modifiers %d", modifiers);
|
|
||||||
|
|
||||||
zmk_hid_register_mods(modifiers);
|
|
||||||
return zmk_endpoints_send_report(USAGE_KEYPAD);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int hid_listener_modifiers_released(zmk_mod_flags modifiers) {
|
|
||||||
LOG_DBG("modifiers %d", modifiers);
|
|
||||||
|
|
||||||
zmk_hid_unregister_mods(modifiers);
|
|
||||||
return zmk_endpoints_send_report(USAGE_KEYPAD);
|
|
||||||
}
|
|
||||||
|
|
||||||
int hid_listener(const struct zmk_event_header *eh) {
|
int hid_listener(const struct zmk_event_header *eh) {
|
||||||
if (is_keycode_state_changed(eh)) {
|
if (is_keycode_state_changed(eh)) {
|
||||||
const struct keycode_state_changed *ev = cast_keycode_state_changed(eh);
|
const struct keycode_state_changed *ev = cast_keycode_state_changed(eh);
|
||||||
if (ev->state) {
|
if (ev->state) {
|
||||||
hid_listener_keycode_pressed(ev->usage_page, ev->keycode);
|
hid_listener_keycode_pressed(ev->usage_page, ev->keycode, ev->implicit_modifiers);
|
||||||
} else {
|
} else {
|
||||||
hid_listener_keycode_released(ev->usage_page, ev->keycode);
|
hid_listener_keycode_released(ev->usage_page, ev->keycode, ev->implicit_modifiers);
|
||||||
}
|
|
||||||
} else if (is_modifiers_state_changed(eh)) {
|
|
||||||
const struct modifiers_state_changed *ev = cast_modifiers_state_changed(eh);
|
|
||||||
if (ev->state) {
|
|
||||||
hid_listener_modifiers_pressed(ev->modifiers);
|
|
||||||
} else {
|
|
||||||
hid_listener_modifiers_released(ev->modifiers);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -97,4 +83,3 @@ int hid_listener(const struct zmk_event_header *eh) {
|
||||||
|
|
||||||
ZMK_LISTENER(hid_listener, hid_listener);
|
ZMK_LISTENER(hid_listener, hid_listener);
|
||||||
ZMK_SUBSCRIPTION(hid_listener, keycode_state_changed);
|
ZMK_SUBSCRIPTION(hid_listener, keycode_state_changed);
|
||||||
ZMK_SUBSCRIPTION(hid_listener, modifiers_state_changed);
|
|
|
@ -11,7 +11,6 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL);
|
||||||
#include <zmk/matrix.h>
|
#include <zmk/matrix.h>
|
||||||
#include <zmk/sensors.h>
|
#include <zmk/sensors.h>
|
||||||
#include <zmk/keymap.h>
|
#include <zmk/keymap.h>
|
||||||
#include <dt-bindings/zmk/matrix-transform.h>
|
|
||||||
#include <drivers/behavior.h>
|
#include <drivers/behavior.h>
|
||||||
#include <zmk/behavior.h>
|
#include <zmk/behavior.h>
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
ht_binding_pressed: 0 new undecided hold_tap
|
ht_binding_pressed: 0 new undecided hold_tap
|
||||||
ht_decide: 0 decided tap (balanced event 0)
|
ht_decide: 0 decided tap (balanced event 0)
|
||||||
kp_pressed: usage_page 0x07 keycode 0x09
|
kp_pressed: usage_page 0x07 keycode 0x09 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0x09
|
kp_released: usage_page 0x07 keycode 0x09 mods 0x00
|
||||||
ht_binding_released: 0 cleaning up hold-tap
|
ht_binding_released: 0 cleaning up hold-tap
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
ht_binding_pressed: 0 new undecided hold_tap
|
ht_binding_pressed: 0 new undecided hold_tap
|
||||||
ht_decide: 0 decided hold (balanced event 3)
|
ht_decide: 0 decided hold (balanced event 3)
|
||||||
kp_pressed: usage_page 0x07 keycode 0xe1
|
kp_pressed: usage_page 0x07 keycode 0xe1 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0xe1
|
kp_released: usage_page 0x07 keycode 0xe1 mods 0x00
|
||||||
ht_binding_released: 0 cleaning up hold-tap
|
ht_binding_released: 0 cleaning up hold-tap
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
kp_pressed: usage_page 0x07 keycode 0xe4
|
kp_pressed: usage_page 0x07 keycode 0xe4 mods 0x00
|
||||||
ht_binding_pressed: 0 new undecided hold_tap
|
ht_binding_pressed: 0 new undecided hold_tap
|
||||||
ht_decide: 0 decided tap (balanced event 0)
|
ht_decide: 0 decided tap (balanced event 0)
|
||||||
kp_pressed: usage_page 0x07 keycode 0x09
|
kp_pressed: usage_page 0x07 keycode 0x09 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0xe4
|
kp_released: usage_page 0x07 keycode 0xe4 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0x09
|
kp_released: usage_page 0x07 keycode 0x09 mods 0x00
|
||||||
ht_binding_released: 0 cleaning up hold-tap
|
ht_binding_released: 0 cleaning up hold-tap
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
kp_pressed: usage_page 0x07 keycode 0xe4
|
kp_pressed: usage_page 0x07 keycode 0xe4 mods 0x00
|
||||||
ht_binding_pressed: 0 new undecided hold_tap
|
ht_binding_pressed: 0 new undecided hold_tap
|
||||||
ht_decide: 0 decided hold (balanced event 3)
|
ht_decide: 0 decided hold (balanced event 3)
|
||||||
kp_pressed: usage_page 0x07 keycode 0xe1
|
kp_pressed: usage_page 0x07 keycode 0xe1 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0xe4
|
kp_released: usage_page 0x07 keycode 0xe4 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0xe1
|
kp_released: usage_page 0x07 keycode 0xe1 mods 0x00
|
||||||
ht_binding_released: 0 cleaning up hold-tap
|
ht_binding_released: 0 cleaning up hold-tap
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
kp_pressed: usage_page 0x07 keycode 0x07
|
kp_pressed: usage_page 0x07 keycode 0x07 mods 0x00
|
||||||
ht_binding_pressed: 0 new undecided hold_tap
|
ht_binding_pressed: 0 new undecided hold_tap
|
||||||
kp_released: usage_page 0x07 keycode 0x07
|
kp_released: usage_page 0x07 keycode 0x07 mods 0x00
|
||||||
ht_decide: 0 decided tap (balanced event 0)
|
ht_decide: 0 decided tap (balanced event 0)
|
||||||
kp_pressed: usage_page 0x07 keycode 0x09
|
kp_pressed: usage_page 0x07 keycode 0x09 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0x09
|
kp_released: usage_page 0x07 keycode 0x09 mods 0x00
|
||||||
ht_binding_released: 0 cleaning up hold-tap
|
ht_binding_released: 0 cleaning up hold-tap
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
kp_pressed: usage_page 0x07 keycode 0x07
|
kp_pressed: usage_page 0x07 keycode 0x07 mods 0x00
|
||||||
ht_binding_pressed: 0 new undecided hold_tap
|
ht_binding_pressed: 0 new undecided hold_tap
|
||||||
kp_released: usage_page 0x07 keycode 0x07
|
kp_released: usage_page 0x07 keycode 0x07 mods 0x00
|
||||||
ht_decide: 0 decided hold (balanced event 3)
|
ht_decide: 0 decided hold (balanced event 3)
|
||||||
kp_pressed: usage_page 0x07 keycode 0xe1
|
kp_pressed: usage_page 0x07 keycode 0xe1 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0xe1
|
kp_released: usage_page 0x07 keycode 0xe1 mods 0x00
|
||||||
ht_binding_released: 0 cleaning up hold-tap
|
ht_binding_released: 0 cleaning up hold-tap
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
ht_binding_pressed: 0 new undecided hold_tap
|
ht_binding_pressed: 0 new undecided hold_tap
|
||||||
ht_decide: 0 decided hold (balanced event 3)
|
ht_decide: 0 decided hold (balanced event 3)
|
||||||
kp_pressed: usage_page 0x07 keycode 0xe1
|
kp_pressed: usage_page 0x07 keycode 0xe1 mods 0x00
|
||||||
ht_binding_pressed: 1 new undecided hold_tap
|
ht_binding_pressed: 1 new undecided hold_tap
|
||||||
ht_decide: 1 decided tap (balanced event 0)
|
ht_decide: 1 decided tap (balanced event 0)
|
||||||
kp_pressed: usage_page 0x07 keycode 0x0d
|
kp_pressed: usage_page 0x07 keycode 0x0d mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0x0d
|
kp_released: usage_page 0x07 keycode 0x0d mods 0x00
|
||||||
ht_binding_released: 1 cleaning up hold-tap
|
ht_binding_released: 1 cleaning up hold-tap
|
||||||
kp_released: usage_page 0x07 keycode 0xe1
|
kp_released: usage_page 0x07 keycode 0xe1 mods 0x00
|
||||||
ht_binding_released: 0 cleaning up hold-tap
|
ht_binding_released: 0 cleaning up hold-tap
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
ht_binding_pressed: 0 new undecided hold_tap
|
ht_binding_pressed: 0 new undecided hold_tap
|
||||||
ht_decide: 0 decided hold (balanced event 3)
|
ht_decide: 0 decided hold (balanced event 3)
|
||||||
kp_pressed: usage_page 0x07 keycode 0xe1
|
kp_pressed: usage_page 0x07 keycode 0xe1 mods 0x00
|
||||||
kp_pressed: usage_page 0x07 keycode 0x07
|
kp_pressed: usage_page 0x07 keycode 0x07 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0x07
|
kp_released: usage_page 0x07 keycode 0x07 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0xe1
|
kp_released: usage_page 0x07 keycode 0xe1 mods 0x00
|
||||||
ht_binding_released: 0 cleaning up hold-tap
|
ht_binding_released: 0 cleaning up hold-tap
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
ht_binding_pressed: 0 new undecided hold_tap
|
ht_binding_pressed: 0 new undecided hold_tap
|
||||||
ht_decide: 0 decided hold (balanced event 2)
|
ht_decide: 0 decided hold (balanced event 2)
|
||||||
kp_pressed: usage_page 0x07 keycode 0xe1
|
kp_pressed: usage_page 0x07 keycode 0xe1 mods 0x00
|
||||||
kp_pressed: usage_page 0x07 keycode 0x07
|
kp_pressed: usage_page 0x07 keycode 0x07 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0x07
|
kp_released: usage_page 0x07 keycode 0x07 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0xe1
|
kp_released: usage_page 0x07 keycode 0xe1 mods 0x00
|
||||||
ht_binding_released: 0 cleaning up hold-tap
|
ht_binding_released: 0 cleaning up hold-tap
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
ht_binding_pressed: 0 new undecided hold_tap
|
ht_binding_pressed: 0 new undecided hold_tap
|
||||||
ht_decide: 0 decided hold (balanced event 2)
|
ht_decide: 0 decided hold (balanced event 2)
|
||||||
kp_pressed: usage_page 0x07 keycode 0xe1
|
kp_pressed: usage_page 0x07 keycode 0xe1 mods 0x00
|
||||||
kp_pressed: usage_page 0x07 keycode 0x07
|
kp_pressed: usage_page 0x07 keycode 0x07 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0x07
|
kp_released: usage_page 0x07 keycode 0x07 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0xe1
|
kp_released: usage_page 0x07 keycode 0xe1 mods 0x00
|
||||||
ht_binding_released: 0 cleaning up hold-tap
|
ht_binding_released: 0 cleaning up hold-tap
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
ht_binding_pressed: 0 new undecided hold_tap
|
ht_binding_pressed: 0 new undecided hold_tap
|
||||||
ht_decide: 0 decided tap (balanced event 0)
|
ht_decide: 0 decided tap (balanced event 0)
|
||||||
kp_pressed: usage_page 0x07 keycode 0x09
|
kp_pressed: usage_page 0x07 keycode 0x09 mods 0x00
|
||||||
kp_pressed: usage_page 0x07 keycode 0x07
|
kp_pressed: usage_page 0x07 keycode 0x07 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0x09
|
kp_released: usage_page 0x07 keycode 0x09 mods 0x00
|
||||||
ht_binding_released: 0 cleaning up hold-tap
|
ht_binding_released: 0 cleaning up hold-tap
|
||||||
kp_released: usage_page 0x07 keycode 0x07
|
kp_released: usage_page 0x07 keycode 0x07 mods 0x00
|
||||||
|
|
|
@ -1,20 +1,20 @@
|
||||||
ht_binding_pressed: 0 new undecided hold_tap
|
ht_binding_pressed: 0 new undecided hold_tap
|
||||||
ht_decide: 0 decided hold (balanced event 3)
|
ht_decide: 0 decided hold (balanced event 3)
|
||||||
kp_pressed: usage_page 0x07 keycode 0xe1
|
kp_pressed: usage_page 0x07 keycode 0xe1 mods 0x00
|
||||||
ht_binding_pressed: 1 new undecided hold_tap
|
ht_binding_pressed: 1 new undecided hold_tap
|
||||||
ht_decide: 1 decided hold (balanced event 3)
|
ht_decide: 1 decided hold (balanced event 3)
|
||||||
kp_pressed: usage_page 0x07 keycode 0xe0
|
kp_pressed: usage_page 0x07 keycode 0xe0 mods 0x00
|
||||||
ht_binding_pressed: 2 new undecided hold_tap
|
ht_binding_pressed: 2 new undecided hold_tap
|
||||||
ht_binding_released: 0 cleaning up hold-tap
|
ht_binding_released: 0 cleaning up hold-tap
|
||||||
ht_decide: 2 decided hold (balanced event 3)
|
ht_decide: 2 decided hold (balanced event 3)
|
||||||
kp_pressed: usage_page 0x07 keycode 0xe3
|
kp_pressed: usage_page 0x07 keycode 0xe3 mods 0x00
|
||||||
ht_binding_pressed: 3 new undecided hold_tap
|
ht_binding_pressed: 3 new undecided hold_tap
|
||||||
ht_binding_released: 1 cleaning up hold-tap
|
ht_binding_released: 1 cleaning up hold-tap
|
||||||
ht_decide: 3 decided hold (balanced event 3)
|
ht_decide: 3 decided hold (balanced event 3)
|
||||||
kp_pressed: usage_page 0x07 keycode 0xe2
|
kp_pressed: usage_page 0x07 keycode 0xe2 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0xe1
|
kp_released: usage_page 0x07 keycode 0xe1 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0xe0
|
kp_released: usage_page 0x07 keycode 0xe0 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0xe3
|
kp_released: usage_page 0x07 keycode 0xe3 mods 0x00
|
||||||
ht_binding_released: 2 cleaning up hold-tap
|
ht_binding_released: 2 cleaning up hold-tap
|
||||||
kp_released: usage_page 0x07 keycode 0xe2
|
kp_released: usage_page 0x07 keycode 0xe2 mods 0x00
|
||||||
ht_binding_released: 3 cleaning up hold-tap
|
ht_binding_released: 3 cleaning up hold-tap
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
ht_binding_pressed: 0 new undecided hold_tap
|
ht_binding_pressed: 0 new undecided hold_tap
|
||||||
ht_decide: 0 decided tap (hold-preferred event 0)
|
ht_decide: 0 decided tap (hold-preferred event 0)
|
||||||
kp_pressed: usage_page 0x07 keycode 0x09
|
kp_pressed: usage_page 0x07 keycode 0x09 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0x09
|
kp_released: usage_page 0x07 keycode 0x09 mods 0x00
|
||||||
ht_binding_released: 0 cleaning up hold-tap
|
ht_binding_released: 0 cleaning up hold-tap
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
ht_binding_pressed: 0 new undecided hold_tap
|
ht_binding_pressed: 0 new undecided hold_tap
|
||||||
ht_decide: 0 decided hold (hold-preferred event 3)
|
ht_decide: 0 decided hold (hold-preferred event 3)
|
||||||
kp_pressed: usage_page 0x07 keycode 0xe1
|
kp_pressed: usage_page 0x07 keycode 0xe1 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0xe1
|
kp_released: usage_page 0x07 keycode 0xe1 mods 0x00
|
||||||
ht_binding_released: 0 cleaning up hold-tap
|
ht_binding_released: 0 cleaning up hold-tap
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
kp_pressed: usage_page 0x07 keycode 0xe4
|
kp_pressed: usage_page 0x07 keycode 0xe4 mods 0x00
|
||||||
ht_binding_pressed: 0 new undecided hold_tap
|
ht_binding_pressed: 0 new undecided hold_tap
|
||||||
ht_decide: 0 decided tap (hold-preferred event 0)
|
ht_decide: 0 decided tap (hold-preferred event 0)
|
||||||
kp_pressed: usage_page 0x07 keycode 0x09
|
kp_pressed: usage_page 0x07 keycode 0x09 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0xe4
|
kp_released: usage_page 0x07 keycode 0xe4 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0x09
|
kp_released: usage_page 0x07 keycode 0x09 mods 0x00
|
||||||
ht_binding_released: 0 cleaning up hold-tap
|
ht_binding_released: 0 cleaning up hold-tap
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
kp_pressed: usage_page 0x07 keycode 0xe4
|
kp_pressed: usage_page 0x07 keycode 0xe4 mods 0x00
|
||||||
ht_binding_pressed: 0 new undecided hold_tap
|
ht_binding_pressed: 0 new undecided hold_tap
|
||||||
ht_decide: 0 decided hold (hold-preferred event 3)
|
ht_decide: 0 decided hold (hold-preferred event 3)
|
||||||
kp_pressed: usage_page 0x07 keycode 0xe1
|
kp_pressed: usage_page 0x07 keycode 0xe1 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0xe4
|
kp_released: usage_page 0x07 keycode 0xe4 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0xe1
|
kp_released: usage_page 0x07 keycode 0xe1 mods 0x00
|
||||||
ht_binding_released: 0 cleaning up hold-tap
|
ht_binding_released: 0 cleaning up hold-tap
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
kp_pressed: usage_page 0x07 keycode 0x07
|
kp_pressed: usage_page 0x07 keycode 0x07 mods 0x00
|
||||||
ht_binding_pressed: 0 new undecided hold_tap
|
ht_binding_pressed: 0 new undecided hold_tap
|
||||||
kp_released: usage_page 0x07 keycode 0x07
|
kp_released: usage_page 0x07 keycode 0x07 mods 0x00
|
||||||
ht_decide: 0 decided tap (hold-preferred event 0)
|
ht_decide: 0 decided tap (hold-preferred event 0)
|
||||||
kp_pressed: usage_page 0x07 keycode 0x09
|
kp_pressed: usage_page 0x07 keycode 0x09 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0x09
|
kp_released: usage_page 0x07 keycode 0x09 mods 0x00
|
||||||
ht_binding_released: 0 cleaning up hold-tap
|
ht_binding_released: 0 cleaning up hold-tap
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
kp_pressed: usage_page 0x07 keycode 0x07
|
kp_pressed: usage_page 0x07 keycode 0x07 mods 0x00
|
||||||
ht_binding_pressed: 0 new undecided hold_tap
|
ht_binding_pressed: 0 new undecided hold_tap
|
||||||
kp_released: usage_page 0x07 keycode 0x07
|
kp_released: usage_page 0x07 keycode 0x07 mods 0x00
|
||||||
ht_decide: 0 decided hold (hold-preferred event 3)
|
ht_decide: 0 decided hold (hold-preferred event 3)
|
||||||
kp_pressed: usage_page 0x07 keycode 0xe1
|
kp_pressed: usage_page 0x07 keycode 0xe1 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0xe1
|
kp_released: usage_page 0x07 keycode 0xe1 mods 0x00
|
||||||
ht_binding_released: 0 cleaning up hold-tap
|
ht_binding_released: 0 cleaning up hold-tap
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
ht_binding_pressed: 0 new undecided hold_tap
|
ht_binding_pressed: 0 new undecided hold_tap
|
||||||
ht_decide: 0 decided hold (hold-preferred event 1)
|
ht_decide: 0 decided hold (hold-preferred event 1)
|
||||||
kp_pressed: usage_page 0x07 keycode 0xe1
|
kp_pressed: usage_page 0x07 keycode 0xe1 mods 0x00
|
||||||
ht_binding_pressed: 1 new undecided hold_tap
|
ht_binding_pressed: 1 new undecided hold_tap
|
||||||
ht_decide: 1 decided tap (hold-preferred event 0)
|
ht_decide: 1 decided tap (hold-preferred event 0)
|
||||||
kp_pressed: usage_page 0x07 keycode 0x0d
|
kp_pressed: usage_page 0x07 keycode 0x0d mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0x0d
|
kp_released: usage_page 0x07 keycode 0x0d mods 0x00
|
||||||
ht_binding_released: 1 cleaning up hold-tap
|
ht_binding_released: 1 cleaning up hold-tap
|
||||||
kp_released: usage_page 0x07 keycode 0xe1
|
kp_released: usage_page 0x07 keycode 0xe1 mods 0x00
|
||||||
ht_binding_released: 0 cleaning up hold-tap
|
ht_binding_released: 0 cleaning up hold-tap
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
ht_binding_pressed: 0 new undecided hold_tap
|
ht_binding_pressed: 0 new undecided hold_tap
|
||||||
ht_decide: 0 decided hold (hold-preferred event 1)
|
ht_decide: 0 decided hold (hold-preferred event 1)
|
||||||
kp_pressed: usage_page 0x07 keycode 0xe1
|
kp_pressed: usage_page 0x07 keycode 0xe1 mods 0x00
|
||||||
kp_pressed: usage_page 0x07 keycode 0x07
|
kp_pressed: usage_page 0x07 keycode 0x07 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0x07
|
kp_released: usage_page 0x07 keycode 0x07 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0xe1
|
kp_released: usage_page 0x07 keycode 0xe1 mods 0x00
|
||||||
ht_binding_released: 0 cleaning up hold-tap
|
ht_binding_released: 0 cleaning up hold-tap
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
ht_binding_pressed: 0 new undecided hold_tap
|
ht_binding_pressed: 0 new undecided hold_tap
|
||||||
ht_decide: 0 decided hold (hold-preferred event 1)
|
ht_decide: 0 decided hold (hold-preferred event 1)
|
||||||
kp_pressed: usage_page 0x07 keycode 0xe1
|
kp_pressed: usage_page 0x07 keycode 0xe1 mods 0x00
|
||||||
kp_pressed: usage_page 0x07 keycode 0x07
|
kp_pressed: usage_page 0x07 keycode 0x07 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0x07
|
kp_released: usage_page 0x07 keycode 0x07 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0xe1
|
kp_released: usage_page 0x07 keycode 0xe1 mods 0x00
|
||||||
ht_binding_released: 0 cleaning up hold-tap
|
ht_binding_released: 0 cleaning up hold-tap
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
ht_binding_pressed: 0 new undecided hold_tap
|
ht_binding_pressed: 0 new undecided hold_tap
|
||||||
ht_decide: 0 decided hold (hold-preferred event 1)
|
ht_decide: 0 decided hold (hold-preferred event 1)
|
||||||
kp_pressed: usage_page 0x07 keycode 0xe1
|
kp_pressed: usage_page 0x07 keycode 0xe1 mods 0x00
|
||||||
kp_pressed: usage_page 0x07 keycode 0x07
|
kp_pressed: usage_page 0x07 keycode 0x07 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0x07
|
kp_released: usage_page 0x07 keycode 0x07 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0xe1
|
kp_released: usage_page 0x07 keycode 0xe1 mods 0x00
|
||||||
ht_binding_released: 0 cleaning up hold-tap
|
ht_binding_released: 0 cleaning up hold-tap
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
ht_binding_pressed: 0 new undecided hold_tap
|
ht_binding_pressed: 0 new undecided hold_tap
|
||||||
ht_decide: 0 decided hold (hold-preferred event 1)
|
ht_decide: 0 decided hold (hold-preferred event 1)
|
||||||
kp_pressed: usage_page 0x07 keycode 0xe1
|
kp_pressed: usage_page 0x07 keycode 0xe1 mods 0x00
|
||||||
kp_pressed: usage_page 0x07 keycode 0x07
|
kp_pressed: usage_page 0x07 keycode 0x07 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0xe1
|
kp_released: usage_page 0x07 keycode 0xe1 mods 0x00
|
||||||
ht_binding_released: 0 cleaning up hold-tap
|
ht_binding_released: 0 cleaning up hold-tap
|
||||||
kp_released: usage_page 0x07 keycode 0x07
|
kp_released: usage_page 0x07 keycode 0x07 mods 0x00
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
ht_binding_pressed: 0 new undecided hold_tap
|
ht_binding_pressed: 0 new undecided hold_tap
|
||||||
ht_decide: 0 decided tap (tap-preferred event 0)
|
ht_decide: 0 decided tap (tap-preferred event 0)
|
||||||
kp_pressed: usage_page 0x07 keycode 0x09
|
kp_pressed: usage_page 0x07 keycode 0x09 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0x09
|
kp_released: usage_page 0x07 keycode 0x09 mods 0x00
|
||||||
ht_binding_released: 0 cleaning up hold-tap
|
ht_binding_released: 0 cleaning up hold-tap
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
ht_binding_pressed: 0 new undecided hold_tap
|
ht_binding_pressed: 0 new undecided hold_tap
|
||||||
ht_decide: 0 decided hold (tap-preferred event 3)
|
ht_decide: 0 decided hold (tap-preferred event 3)
|
||||||
kp_pressed: usage_page 0x07 keycode 0xe1
|
kp_pressed: usage_page 0x07 keycode 0xe1 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0xe1
|
kp_released: usage_page 0x07 keycode 0xe1 mods 0x00
|
||||||
ht_binding_released: 0 cleaning up hold-tap
|
ht_binding_released: 0 cleaning up hold-tap
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
kp_pressed: usage_page 0x07 keycode 0xe4
|
kp_pressed: usage_page 0x07 keycode 0xe4 mods 0x00
|
||||||
ht_binding_pressed: 0 new undecided hold_tap
|
ht_binding_pressed: 0 new undecided hold_tap
|
||||||
ht_decide: 0 decided tap (tap-preferred event 0)
|
ht_decide: 0 decided tap (tap-preferred event 0)
|
||||||
kp_pressed: usage_page 0x07 keycode 0x09
|
kp_pressed: usage_page 0x07 keycode 0x09 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0xe4
|
kp_released: usage_page 0x07 keycode 0xe4 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0x09
|
kp_released: usage_page 0x07 keycode 0x09 mods 0x00
|
||||||
ht_binding_released: 0 cleaning up hold-tap
|
ht_binding_released: 0 cleaning up hold-tap
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
kp_pressed: usage_page 0x07 keycode 0xe4
|
kp_pressed: usage_page 0x07 keycode 0xe4 mods 0x00
|
||||||
ht_binding_pressed: 0 new undecided hold_tap
|
ht_binding_pressed: 0 new undecided hold_tap
|
||||||
ht_decide: 0 decided hold (tap-preferred event 3)
|
ht_decide: 0 decided hold (tap-preferred event 3)
|
||||||
kp_pressed: usage_page 0x07 keycode 0xe1
|
kp_pressed: usage_page 0x07 keycode 0xe1 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0xe4
|
kp_released: usage_page 0x07 keycode 0xe4 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0xe1
|
kp_released: usage_page 0x07 keycode 0xe1 mods 0x00
|
||||||
ht_binding_released: 0 cleaning up hold-tap
|
ht_binding_released: 0 cleaning up hold-tap
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
kp_pressed: usage_page 0x07 keycode 0x07
|
kp_pressed: usage_page 0x07 keycode 0x07 mods 0x00
|
||||||
ht_binding_pressed: 0 new undecided hold_tap
|
ht_binding_pressed: 0 new undecided hold_tap
|
||||||
kp_released: usage_page 0x07 keycode 0x07
|
kp_released: usage_page 0x07 keycode 0x07 mods 0x00
|
||||||
ht_decide: 0 decided tap (tap-preferred event 0)
|
ht_decide: 0 decided tap (tap-preferred event 0)
|
||||||
kp_pressed: usage_page 0x07 keycode 0x09
|
kp_pressed: usage_page 0x07 keycode 0x09 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0x09
|
kp_released: usage_page 0x07 keycode 0x09 mods 0x00
|
||||||
ht_binding_released: 0 cleaning up hold-tap
|
ht_binding_released: 0 cleaning up hold-tap
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
kp_pressed: usage_page 0x07 keycode 0x07
|
kp_pressed: usage_page 0x07 keycode 0x07 mods 0x00
|
||||||
ht_binding_pressed: 0 new undecided hold_tap
|
ht_binding_pressed: 0 new undecided hold_tap
|
||||||
kp_released: usage_page 0x07 keycode 0x07
|
kp_released: usage_page 0x07 keycode 0x07 mods 0x00
|
||||||
ht_decide: 0 decided hold (tap-preferred event 3)
|
ht_decide: 0 decided hold (tap-preferred event 3)
|
||||||
kp_pressed: usage_page 0x07 keycode 0xe1
|
kp_pressed: usage_page 0x07 keycode 0xe1 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0xe1
|
kp_released: usage_page 0x07 keycode 0xe1 mods 0x00
|
||||||
ht_binding_released: 0 cleaning up hold-tap
|
ht_binding_released: 0 cleaning up hold-tap
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
ht_binding_pressed: 0 new undecided hold_tap
|
ht_binding_pressed: 0 new undecided hold_tap
|
||||||
ht_decide: 0 decided hold (tap-preferred event 3)
|
ht_decide: 0 decided hold (tap-preferred event 3)
|
||||||
kp_pressed: usage_page 0x07 keycode 0xe1
|
kp_pressed: usage_page 0x07 keycode 0xe1 mods 0x00
|
||||||
ht_binding_pressed: 1 new undecided hold_tap
|
ht_binding_pressed: 1 new undecided hold_tap
|
||||||
ht_decide: 1 decided tap (tap-preferred event 0)
|
ht_decide: 1 decided tap (tap-preferred event 0)
|
||||||
kp_pressed: usage_page 0x07 keycode 0x0d
|
kp_pressed: usage_page 0x07 keycode 0x0d mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0x0d
|
kp_released: usage_page 0x07 keycode 0x0d mods 0x00
|
||||||
ht_binding_released: 1 cleaning up hold-tap
|
ht_binding_released: 1 cleaning up hold-tap
|
||||||
kp_released: usage_page 0x07 keycode 0xe1
|
kp_released: usage_page 0x07 keycode 0xe1 mods 0x00
|
||||||
ht_binding_released: 0 cleaning up hold-tap
|
ht_binding_released: 0 cleaning up hold-tap
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
ht_binding_pressed: 0 new undecided hold_tap
|
ht_binding_pressed: 0 new undecided hold_tap
|
||||||
ht_decide: 0 decided hold (tap-preferred event 3)
|
ht_decide: 0 decided hold (tap-preferred event 3)
|
||||||
kp_pressed: usage_page 0x07 keycode 0xe1
|
kp_pressed: usage_page 0x07 keycode 0xe1 mods 0x00
|
||||||
kp_pressed: usage_page 0x07 keycode 0x07
|
kp_pressed: usage_page 0x07 keycode 0x07 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0x07
|
kp_released: usage_page 0x07 keycode 0x07 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0xe1
|
kp_released: usage_page 0x07 keycode 0xe1 mods 0x00
|
||||||
ht_binding_released: 0 cleaning up hold-tap
|
ht_binding_released: 0 cleaning up hold-tap
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
ht_binding_pressed: 0 new undecided hold_tap
|
ht_binding_pressed: 0 new undecided hold_tap
|
||||||
ht_decide: 0 decided hold (tap-preferred event 3)
|
ht_decide: 0 decided hold (tap-preferred event 3)
|
||||||
kp_pressed: usage_page 0x07 keycode 0xe1
|
kp_pressed: usage_page 0x07 keycode 0xe1 mods 0x00
|
||||||
kp_pressed: usage_page 0x07 keycode 0x07
|
kp_pressed: usage_page 0x07 keycode 0x07 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0x07
|
kp_released: usage_page 0x07 keycode 0x07 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0xe1
|
kp_released: usage_page 0x07 keycode 0xe1 mods 0x00
|
||||||
ht_binding_released: 0 cleaning up hold-tap
|
ht_binding_released: 0 cleaning up hold-tap
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
ht_binding_pressed: 0 new undecided hold_tap
|
ht_binding_pressed: 0 new undecided hold_tap
|
||||||
ht_decide: 0 decided tap (tap-preferred event 0)
|
ht_decide: 0 decided tap (tap-preferred event 0)
|
||||||
kp_pressed: usage_page 0x07 keycode 0x09
|
kp_pressed: usage_page 0x07 keycode 0x09 mods 0x00
|
||||||
kp_pressed: usage_page 0x07 keycode 0x07
|
kp_pressed: usage_page 0x07 keycode 0x07 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0x07
|
kp_released: usage_page 0x07 keycode 0x07 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0x09
|
kp_released: usage_page 0x07 keycode 0x09 mods 0x00
|
||||||
ht_binding_released: 0 cleaning up hold-tap
|
ht_binding_released: 0 cleaning up hold-tap
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
ht_binding_pressed: 0 new undecided hold_tap
|
ht_binding_pressed: 0 new undecided hold_tap
|
||||||
ht_decide: 0 decided tap (tap-preferred event 0)
|
ht_decide: 0 decided tap (tap-preferred event 0)
|
||||||
kp_pressed: usage_page 0x07 keycode 0x09
|
kp_pressed: usage_page 0x07 keycode 0x09 mods 0x00
|
||||||
kp_pressed: usage_page 0x07 keycode 0x07
|
kp_pressed: usage_page 0x07 keycode 0x07 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0x09
|
kp_released: usage_page 0x07 keycode 0x09 mods 0x00
|
||||||
ht_binding_released: 0 cleaning up hold-tap
|
ht_binding_released: 0 cleaning up hold-tap
|
||||||
kp_released: usage_page 0x07 keycode 0x07
|
kp_released: usage_page 0x07 keycode 0x07 mods 0x00
|
||||||
|
|
|
@ -9,20 +9,8 @@
|
||||||
|
|
||||||
default_layer {
|
default_layer {
|
||||||
bindings = <
|
bindings = <
|
||||||
&kp B &mo 1
|
&kp B &none
|
||||||
&kp D &kp G>;
|
&cp M_NEXT &none>;
|
||||||
};
|
|
||||||
|
|
||||||
lower_layer {
|
|
||||||
bindings = <
|
|
||||||
&cp M_NEXT &trans
|
|
||||||
&kp L &kp J>;
|
|
||||||
};
|
|
||||||
|
|
||||||
raise_layer {
|
|
||||||
bindings = <
|
|
||||||
&kp W &kp U
|
|
||||||
&kp X &kp M>;
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
pressed: usage_page 0x0c keycode 0xb5
|
pressed: usage_page 0x0c keycode 0xb5 mods 0x00
|
||||||
released: usage_page 0x0c keycode 0xb5
|
pressed: usage_page 0x0c keycode 0xb5 mods 0x00
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#include "../behavior_keymap.dtsi"
|
#include "../behavior_keymap.dtsi"
|
||||||
|
|
||||||
&kscan {
|
&kscan {
|
||||||
events = <ZMK_MOCK_PRESS(0,1,10) ZMK_MOCK_PRESS(0,0,10) ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_RELEASE(0,1,10)>;
|
events = <ZMK_MOCK_PRESS(1,0,10) ZMK_MOCK_PRESS(1,0,10)>;
|
||||||
};
|
};
|
|
@ -1,2 +1,2 @@
|
||||||
pressed: usage_page 0x0c keycode 0xb5
|
pressed: usage_page 0x07 keycode 0x05 mods 0x00
|
||||||
released: usage_page 0x0c keycode 0xb5
|
released: usage_page 0x07 keycode 0x05 mods 0x00
|
||||||
|
|
|
@ -1,8 +1,5 @@
|
||||||
#include <dt-bindings/zmk/keys.h>
|
|
||||||
#include <behaviors.dtsi>
|
|
||||||
#include <dt-bindings/zmk/kscan-mock.h>
|
|
||||||
#include "../behavior_keymap.dtsi"
|
#include "../behavior_keymap.dtsi"
|
||||||
|
|
||||||
&kscan {
|
&kscan {
|
||||||
events = <ZMK_MOCK_PRESS(0,1,10) ZMK_MOCK_PRESS(0,0,10) ZMK_MOCK_RELEASE(0,0,10) ZMK_MOCK_RELEASE(0,1,10)>;
|
events = <ZMK_MOCK_PRESS(0,0,10) ZMK_MOCK_RELEASE(0,0,10)>;
|
||||||
};
|
};
|
|
@ -0,0 +1,4 @@
|
||||||
|
s/.*hid_listener_keycode_//p
|
||||||
|
s/.*hid_register_mod/reg/p
|
||||||
|
s/.*hid_unregister_mod/unreg/p
|
||||||
|
s/.*zmk_hid_.*Modifiers set to /mods: Modifiers set to /p
|
|
@ -0,0 +1,17 @@
|
||||||
|
pressed: usage_page 0x07 keycode 0xe0 mods 0x00
|
||||||
|
reg: Modifier 0 count 1
|
||||||
|
reg: Modifiers set to 0x01
|
||||||
|
mods: Modifiers set to 0x01
|
||||||
|
pressed: usage_page 0x07 keycode 0xe0 mods 0x00
|
||||||
|
reg: Modifier 0 count 2
|
||||||
|
reg: Modifiers set to 0x01
|
||||||
|
mods: Modifiers set to 0x01
|
||||||
|
released: usage_page 0x07 keycode 0xe0 mods 0x00
|
||||||
|
unreg: Modifier 0 count: 1
|
||||||
|
unreg: Modifiers set to 0x01
|
||||||
|
mods: Modifiers set to 0x01
|
||||||
|
released: usage_page 0x07 keycode 0xe0 mods 0x00
|
||||||
|
unreg: Modifier 0 count: 0
|
||||||
|
unreg: Modifier 0 released
|
||||||
|
unreg: Modifiers set to 0x00
|
||||||
|
mods: Modifiers set to 0x00
|
|
@ -0,0 +1,27 @@
|
||||||
|
#include <dt-bindings/zmk/keys.h>
|
||||||
|
#include <behaviors.dtsi>
|
||||||
|
#include <dt-bindings/zmk/kscan-mock.h>
|
||||||
|
|
||||||
|
|
||||||
|
&kscan {
|
||||||
|
events = <
|
||||||
|
ZMK_MOCK_PRESS(0,0,10)
|
||||||
|
ZMK_MOCK_PRESS(0,1,10)
|
||||||
|
ZMK_MOCK_RELEASE(0,0,10)
|
||||||
|
ZMK_MOCK_RELEASE(0,1,10)
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/ {
|
||||||
|
keymap {
|
||||||
|
compatible = "zmk,keymap";
|
||||||
|
label ="Default keymap";
|
||||||
|
|
||||||
|
default_layer {
|
||||||
|
bindings = <
|
||||||
|
&kp LCTL &kp LCTL
|
||||||
|
&kp LSFT &none
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
|
@ -0,0 +1,4 @@
|
||||||
|
s/.*hid_listener_keycode_//p
|
||||||
|
s/.*hid_register_mod/reg/p
|
||||||
|
s/.*hid_unregister_mod/unreg/p
|
||||||
|
s/.*zmk_hid_.*Modifiers set to /mods: Modifiers set to /p
|
|
@ -0,0 +1,9 @@
|
||||||
|
pressed: usage_page 0x07 keycode 0xe0 mods 0x00
|
||||||
|
reg: Modifier 0 count 1
|
||||||
|
reg: Modifiers set to 0x01
|
||||||
|
mods: Modifiers set to 0x01
|
||||||
|
released: usage_page 0x07 keycode 0xe0 mods 0x00
|
||||||
|
unreg: Modifier 0 count: 0
|
||||||
|
unreg: Modifier 0 released
|
||||||
|
unreg: Modifiers set to 0x00
|
||||||
|
mods: Modifiers set to 0x00
|
|
@ -0,0 +1,25 @@
|
||||||
|
#include <dt-bindings/zmk/keys.h>
|
||||||
|
#include <behaviors.dtsi>
|
||||||
|
#include <dt-bindings/zmk/kscan-mock.h>
|
||||||
|
|
||||||
|
|
||||||
|
&kscan {
|
||||||
|
events = <
|
||||||
|
ZMK_MOCK_PRESS(0,0,10)
|
||||||
|
ZMK_MOCK_RELEASE(0,0,10)
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/ {
|
||||||
|
keymap {
|
||||||
|
compatible = "zmk,keymap";
|
||||||
|
label ="Default keymap";
|
||||||
|
|
||||||
|
default_layer {
|
||||||
|
bindings = <
|
||||||
|
&kp LCTL &kp LCTL
|
||||||
|
&kp LSFT &none
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
|
@ -0,0 +1,4 @@
|
||||||
|
s/.*hid_listener_keycode_//p
|
||||||
|
s/.*hid_register_mod/reg/p
|
||||||
|
s/.*hid_unregister_mod/unreg/p
|
||||||
|
s/.*zmk_hid_.*Modifiers set to /mods: Modifiers set to /p
|
|
@ -0,0 +1,18 @@
|
||||||
|
pressed: usage_page 0x07 keycode 0xe0 mods 0x00
|
||||||
|
reg: Modifier 0 count 1
|
||||||
|
reg: Modifiers set to 0x01
|
||||||
|
mods: Modifiers set to 0x01
|
||||||
|
pressed: usage_page 0x07 keycode 0xe1 mods 0x00
|
||||||
|
reg: Modifier 1 count 1
|
||||||
|
reg: Modifiers set to 0x03
|
||||||
|
mods: Modifiers set to 0x03
|
||||||
|
released: usage_page 0x07 keycode 0xe0 mods 0x00
|
||||||
|
unreg: Modifier 0 count: 0
|
||||||
|
unreg: Modifier 0 released
|
||||||
|
unreg: Modifiers set to 0x02
|
||||||
|
mods: Modifiers set to 0x02
|
||||||
|
released: usage_page 0x07 keycode 0xe1 mods 0x00
|
||||||
|
unreg: Modifier 1 count: 0
|
||||||
|
unreg: Modifier 1 released
|
||||||
|
unreg: Modifiers set to 0x00
|
||||||
|
mods: Modifiers set to 0x00
|
|
@ -0,0 +1,27 @@
|
||||||
|
#include <dt-bindings/zmk/keys.h>
|
||||||
|
#include <behaviors.dtsi>
|
||||||
|
#include <dt-bindings/zmk/kscan-mock.h>
|
||||||
|
|
||||||
|
|
||||||
|
&kscan {
|
||||||
|
events = <
|
||||||
|
ZMK_MOCK_PRESS(0,0,10)
|
||||||
|
ZMK_MOCK_PRESS(1,0,10)
|
||||||
|
ZMK_MOCK_RELEASE(0,0,10)
|
||||||
|
ZMK_MOCK_RELEASE(1,0,10)
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/ {
|
||||||
|
keymap {
|
||||||
|
compatible = "zmk,keymap";
|
||||||
|
label ="Default keymap";
|
||||||
|
|
||||||
|
default_layer {
|
||||||
|
bindings = <
|
||||||
|
&kp LCTL &kp LCTL
|
||||||
|
&kp LSFT &none
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
|
@ -0,0 +1,4 @@
|
||||||
|
s/.*hid_listener_keycode_//p
|
||||||
|
s/.*hid_register_mod/reg/p
|
||||||
|
s/.*hid_unregister_mod/unreg/p
|
||||||
|
s/.*zmk_hid_.*Modifiers set to /mods: Modifiers set to /p
|
|
@ -0,0 +1,18 @@
|
||||||
|
pressed: usage_page 0x07 keycode 0xe0 mods 0x00
|
||||||
|
reg: Modifier 0 count 1
|
||||||
|
reg: Modifiers set to 0x01
|
||||||
|
mods: Modifiers set to 0x01
|
||||||
|
pressed: usage_page 0x07 keycode 0xe1 mods 0x00
|
||||||
|
reg: Modifier 1 count 1
|
||||||
|
reg: Modifiers set to 0x03
|
||||||
|
mods: Modifiers set to 0x03
|
||||||
|
released: usage_page 0x07 keycode 0xe1 mods 0x00
|
||||||
|
unreg: Modifier 1 count: 0
|
||||||
|
unreg: Modifier 1 released
|
||||||
|
unreg: Modifiers set to 0x01
|
||||||
|
mods: Modifiers set to 0x01
|
||||||
|
released: usage_page 0x07 keycode 0xe0 mods 0x00
|
||||||
|
unreg: Modifier 0 count: 0
|
||||||
|
unreg: Modifier 0 released
|
||||||
|
unreg: Modifiers set to 0x00
|
||||||
|
mods: Modifiers set to 0x00
|
|
@ -0,0 +1,28 @@
|
||||||
|
#include <dt-bindings/zmk/keys.h>
|
||||||
|
#include <behaviors.dtsi>
|
||||||
|
#include <dt-bindings/zmk/kscan-mock.h>
|
||||||
|
|
||||||
|
|
||||||
|
&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)
|
||||||
|
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/ {
|
||||||
|
keymap {
|
||||||
|
compatible = "zmk,keymap";
|
||||||
|
label ="Default keymap";
|
||||||
|
|
||||||
|
default_layer {
|
||||||
|
bindings = <
|
||||||
|
&kp LCTL &kp LCTL
|
||||||
|
&kp LSFT &none
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
|
@ -0,0 +1,4 @@
|
||||||
|
s/.*hid_listener_keycode_//p
|
||||||
|
s/.*hid_register_mod/reg/p
|
||||||
|
s/.*hid_unregister_mod/unreg/p
|
||||||
|
s/.*zmk_hid_.*Modifiers set to /mods: Modifiers set to /p
|
|
@ -0,0 +1,8 @@
|
||||||
|
pressed: usage_page 0x07 keycode 0x05 mods 0x02
|
||||||
|
mods: Modifiers set to 0x02
|
||||||
|
pressed: usage_page 0x07 keycode 0x04 mods 0x01
|
||||||
|
mods: Modifiers set to 0x01
|
||||||
|
released: usage_page 0x07 keycode 0x05 mods 0x02
|
||||||
|
mods: Modifiers set to 0x01
|
||||||
|
released: usage_page 0x07 keycode 0x04 mods 0x01
|
||||||
|
mods: Modifiers set to 0x00
|
|
@ -0,0 +1,27 @@
|
||||||
|
#include <dt-bindings/zmk/keys.h>
|
||||||
|
#include <behaviors.dtsi>
|
||||||
|
#include <dt-bindings/zmk/kscan-mock.h>
|
||||||
|
|
||||||
|
|
||||||
|
&kscan {
|
||||||
|
events = <
|
||||||
|
ZMK_MOCK_PRESS(0,1,10)
|
||||||
|
ZMK_MOCK_PRESS(0,0,10)
|
||||||
|
ZMK_MOCK_RELEASE(0,1,10)
|
||||||
|
ZMK_MOCK_RELEASE(0,0,10)
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/ {
|
||||||
|
keymap {
|
||||||
|
compatible = "zmk,keymap";
|
||||||
|
label ="Default keymap";
|
||||||
|
|
||||||
|
default_layer {
|
||||||
|
bindings = <
|
||||||
|
&kp LC(A) &kp LS(B)
|
||||||
|
&kp LCTL &none
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
|
@ -0,0 +1,9 @@
|
||||||
|
This test fails because the hid_listener_keycode_released function
|
||||||
|
releases implicit modifiers always, even if they were not set by the
|
||||||
|
key that's going up. Also see the comment in that function:
|
||||||
|
|
||||||
|
If LC(A) is pressed, then LS(B), then LC(A) is released, the shift for B will be released
|
||||||
|
prematurely. This causes if LS(B) to repeat like Bbbbbbbb when pressed for a long time.
|
||||||
|
Solving this would require keeping track of which key's implicit modifiers are currently
|
||||||
|
active and only releasing modifiers at that time.
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
s/.*hid_listener_keycode_//p
|
||||||
|
s/.*hid_register_mod/reg/p
|
||||||
|
s/.*hid_unregister_mod/unreg/p
|
||||||
|
s/.*zmk_hid_.*Modifiers set to /mods: Modifiers set to /p
|
|
@ -0,0 +1,8 @@
|
||||||
|
pressed: usage_page 0x07 keycode 0x04 mods 0x01
|
||||||
|
mods: Modifiers set to 0x01
|
||||||
|
pressed: usage_page 0x07 keycode 0x05 mods 0x02
|
||||||
|
mods: Modifiers set to 0x02
|
||||||
|
released: usage_page 0x07 keycode 0x05 mods 0x02
|
||||||
|
mods: Modifiers set to 0x00
|
||||||
|
released: usage_page 0x07 keycode 0x04 mods 0x01
|
||||||
|
mods: Modifiers set to 0x00
|
|
@ -0,0 +1,27 @@
|
||||||
|
#include <dt-bindings/zmk/keys.h>
|
||||||
|
#include <behaviors.dtsi>
|
||||||
|
#include <dt-bindings/zmk/kscan-mock.h>
|
||||||
|
|
||||||
|
|
||||||
|
&kscan {
|
||||||
|
events = <
|
||||||
|
ZMK_MOCK_PRESS(0,0,10)
|
||||||
|
ZMK_MOCK_PRESS(0,1,10)
|
||||||
|
ZMK_MOCK_RELEASE(0,1,10)
|
||||||
|
ZMK_MOCK_RELEASE(0,0,10)
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/ {
|
||||||
|
keymap {
|
||||||
|
compatible = "zmk,keymap";
|
||||||
|
label ="Default keymap";
|
||||||
|
|
||||||
|
default_layer {
|
||||||
|
bindings = <
|
||||||
|
&kp LC(A) &kp LS(B)
|
||||||
|
&none &none
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
|
@ -0,0 +1,4 @@
|
||||||
|
s/.*hid_listener_keycode_//p
|
||||||
|
s/.*hid_register_mod/reg/p
|
||||||
|
s/.*hid_unregister_mod/unreg/p
|
||||||
|
s/.*zmk_hid_.*Modifiers set to /mods: Modifiers set to /p
|
|
@ -0,0 +1,13 @@
|
||||||
|
pressed: usage_page 0x07 keycode 0xe0 mods 0x00
|
||||||
|
reg: Modifier 0 count 1
|
||||||
|
reg: Modifiers set to 0x01
|
||||||
|
mods: Modifiers set to 0x01
|
||||||
|
pressed: usage_page 0x07 keycode 0x05 mods 0x02
|
||||||
|
mods: Modifiers set to 0x03
|
||||||
|
released: usage_page 0x07 keycode 0xe0 mods 0x00
|
||||||
|
unreg: Modifier 0 count: 0
|
||||||
|
unreg: Modifier 0 released
|
||||||
|
unreg: Modifiers set to 0x00
|
||||||
|
mods: Modifiers set to 0x00
|
||||||
|
released: usage_page 0x07 keycode 0x05 mods 0x02
|
||||||
|
mods: Modifiers set to 0x00
|
|
@ -0,0 +1,27 @@
|
||||||
|
#include <dt-bindings/zmk/keys.h>
|
||||||
|
#include <behaviors.dtsi>
|
||||||
|
#include <dt-bindings/zmk/kscan-mock.h>
|
||||||
|
|
||||||
|
|
||||||
|
&kscan {
|
||||||
|
events = <
|
||||||
|
ZMK_MOCK_PRESS(1,0,10)
|
||||||
|
ZMK_MOCK_PRESS(0,1,10)
|
||||||
|
ZMK_MOCK_RELEASE(1,0,10)
|
||||||
|
ZMK_MOCK_RELEASE(0,1,10)
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/ {
|
||||||
|
keymap {
|
||||||
|
compatible = "zmk,keymap";
|
||||||
|
label ="Default keymap";
|
||||||
|
|
||||||
|
default_layer {
|
||||||
|
bindings = <
|
||||||
|
&kp LC(A) &kp LS(B)
|
||||||
|
&kp LCTL &none
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
|
@ -0,0 +1,4 @@
|
||||||
|
s/.*hid_listener_keycode_//p
|
||||||
|
s/.*hid_register_mod/reg/p
|
||||||
|
s/.*hid_unregister_mod/unreg/p
|
||||||
|
s/.*zmk_hid_.*Modifiers set to /mods: Modifiers set to /p
|
|
@ -0,0 +1,13 @@
|
||||||
|
pressed: usage_page 0x07 keycode 0xe0 mods 0x00
|
||||||
|
reg: Modifier 0 count 1
|
||||||
|
reg: Modifiers set to 0x01
|
||||||
|
mods: Modifiers set to 0x01
|
||||||
|
pressed: usage_page 0x07 keycode 0x05 mods 0x02
|
||||||
|
mods: Modifiers set to 0x03
|
||||||
|
released: usage_page 0x07 keycode 0x05 mods 0x02
|
||||||
|
mods: Modifiers set to 0x01
|
||||||
|
released: usage_page 0x07 keycode 0xe0 mods 0x00
|
||||||
|
unreg: Modifier 0 count: 0
|
||||||
|
unreg: Modifier 0 released
|
||||||
|
unreg: Modifiers set to 0x00
|
||||||
|
mods: Modifiers set to 0x00
|
|
@ -0,0 +1,27 @@
|
||||||
|
#include <dt-bindings/zmk/keys.h>
|
||||||
|
#include <behaviors.dtsi>
|
||||||
|
#include <dt-bindings/zmk/kscan-mock.h>
|
||||||
|
|
||||||
|
|
||||||
|
&kscan {
|
||||||
|
events = <
|
||||||
|
ZMK_MOCK_PRESS(1,0,10)
|
||||||
|
ZMK_MOCK_PRESS(0,1,10)
|
||||||
|
ZMK_MOCK_RELEASE(0,1,10)
|
||||||
|
ZMK_MOCK_RELEASE(1,0,10)
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/ {
|
||||||
|
keymap {
|
||||||
|
compatible = "zmk,keymap";
|
||||||
|
label ="Default keymap";
|
||||||
|
|
||||||
|
default_layer {
|
||||||
|
bindings = <
|
||||||
|
&kp LC(A) &kp LS(B)
|
||||||
|
&kp LCTL &none
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
|
@ -1,4 +1,4 @@
|
||||||
kp_pressed: usage_page 0x07 keycode 0x05
|
kp_pressed: usage_page 0x07 keycode 0x05 mods 0x00
|
||||||
mo_pressed: position 1 layer 1
|
mo_pressed: position 1 layer 1
|
||||||
kp_released: usage_page 0x07 keycode 0x05
|
kp_released: usage_page 0x07 keycode 0x05 mods 0x00
|
||||||
mo_released: position 1 layer 1
|
mo_released: position 1 layer 1
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
mo_pressed: position 1 layer 1
|
mo_pressed: position 1 layer 1
|
||||||
kp_pressed: usage_page 0x0c keycode 0xb5
|
kp_pressed: usage_page 0x0c keycode 0xb5 mods 0x00
|
||||||
kp_released: usage_page 0x0c keycode 0xb5
|
kp_released: usage_page 0x0c keycode 0xb5 mods 0x00
|
||||||
mo_released: position 1 layer 1
|
mo_released: position 1 layer 1
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
kp_pressed: usage_page 0x07 keycode 0x05
|
kp_pressed: usage_page 0x07 keycode 0x05 mods 0x00
|
||||||
tog_pressed: position 1 layer 1
|
tog_pressed: position 1 layer 1
|
||||||
kp_released: usage_page 0x07 keycode 0x05
|
kp_released: usage_page 0x07 keycode 0x05 mods 0x00
|
||||||
tog_released: position 1 layer 1
|
tog_released: position 1 layer 1
|
||||||
kp_pressed: usage_page 0x0c keycode 0xb5
|
kp_pressed: usage_page 0x0c keycode 0xb5 mods 0x00
|
||||||
kp_released: usage_page 0x0c keycode 0xb5
|
kp_released: usage_page 0x0c keycode 0xb5 mods 0x00
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
tog_pressed: position 1 layer 1
|
tog_pressed: position 1 layer 1
|
||||||
tog_released: position 1 layer 1
|
tog_released: position 1 layer 1
|
||||||
kp_pressed: usage_page 0x0c keycode 0xb5
|
kp_pressed: usage_page 0x0c keycode 0xb5 mods 0x00
|
||||||
kp_released: usage_page 0x0c keycode 0xb5
|
kp_released: usage_page 0x0c keycode 0xb5 mods 0x00
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
kp_pressed: usage_page 0x07 keycode 0x04
|
kp_pressed: usage_page 0x07 keycode 0x04 mods 0x00
|
||||||
kp_released: usage_page 0x07 keycode 0x04
|
kp_released: usage_page 0x07 keycode 0x04 mods 0x00
|
||||||
|
|
|
@ -68,7 +68,7 @@ In this case, the `A` is actually a define for the raw HID keycode, to make keym
|
||||||
For example of a binding that uses two parameters, you can see how "mod-tap" (`mt`) is bound:
|
For example of a binding that uses two parameters, you can see how "mod-tap" (`mt`) is bound:
|
||||||
|
|
||||||
```
|
```
|
||||||
&mt MOD_LSFT D
|
&mt LSFT D
|
||||||
```
|
```
|
||||||
|
|
||||||
Here, the first parameter is the set of modifiers that should be used for the "hold" behavior, and the second
|
Here, the first parameter is the set of modifiers that should be used for the "hold" behavior, and the second
|
||||||
|
@ -92,7 +92,7 @@ The top two lines of most keymaps should 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 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.
|
The second include brings in the defines for all the keycodes (e.g. `A`, `NUM_1`, `M_PLAY`) and the modifiers (e.g. `LSFT`) used for various behavior bindings.
|
||||||
|
|
||||||
### Root devicetree Node
|
### Root devicetree Node
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue