diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index c06b52f31cbf..d7b725911d33 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -63,6 +63,7 @@ if ((NOT CONFIG_ZMK_SPLIT) OR CONFIG_ZMK_SPLIT_ROLE_CENTRAL) target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_SENSOR_ROTATE_VAR app PRIVATE src/behaviors/behavior_sensor_rotate_var.c) target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_SENSOR_ROTATE_COMMON app PRIVATE src/behaviors/behavior_sensor_rotate_common.c) target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_MOUSE_KEY_PRESS app PRIVATE src/behaviors/behavior_mouse_key_press.c) + target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_STUDIO_UNLOCK app PRIVATE src/behaviors/behavior_studio_unlock.c) target_sources(app PRIVATE src/combo.c) target_sources(app PRIVATE src/behaviors/behavior_tap_dance.c) target_sources(app PRIVATE src/behavior_queue.c) diff --git a/app/Kconfig.behaviors b/app/Kconfig.behaviors index d3f4537ec225..ccecc424f7a1 100644 --- a/app/Kconfig.behaviors +++ b/app/Kconfig.behaviors @@ -71,6 +71,11 @@ config ZMK_BEHAVIOR_SENSOR_ROTATE_VAR depends on DT_HAS_ZMK_BEHAVIOR_SENSOR_ROTATE_VAR_ENABLED select ZMK_BEHAVIOR_SENSOR_ROTATE_COMMON +config ZMK_BEHAVIOR_STUDIO_UNLOCK + bool + default y + depends on DT_HAS_ZMK_BEHAVIOR_STUDIO_UNLOCK_ENABLED && ZMK_STUDIO + config ZMK_BEHAVIOR_MACRO bool default y diff --git a/app/dts/behaviors.dtsi b/app/dts/behaviors.dtsi index fde75271891f..fcb4a63d4502 100644 --- a/app/dts/behaviors.dtsi +++ b/app/dts/behaviors.dtsi @@ -21,3 +21,4 @@ #include #include #include +#include diff --git a/app/dts/behaviors/studio_unlock.dtsi b/app/dts/behaviors/studio_unlock.dtsi new file mode 100644 index 000000000000..4959b864f1d0 --- /dev/null +++ b/app/dts/behaviors/studio_unlock.dtsi @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +/ { + behaviors { + studio_unlock: studio_unlock { + compatible = "zmk,behavior-studio-unlock"; + #binding-cells = <0>; + display-name = "Studio Unlock"; + }; + }; + +}; + diff --git a/app/dts/bindings/behaviors/zmk,behavior-studio-unlock.yaml b/app/dts/bindings/behaviors/zmk,behavior-studio-unlock.yaml new file mode 100644 index 000000000000..390a02540d76 --- /dev/null +++ b/app/dts/bindings/behaviors/zmk,behavior-studio-unlock.yaml @@ -0,0 +1,8 @@ +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +description: Studio Unlock Behavior + +compatible: "zmk,behavior-studio-unlock" + +include: zero_param.yaml diff --git a/app/src/behaviors/behavior_studio_unlock.c b/app/src/behaviors/behavior_studio_unlock.c new file mode 100644 index 000000000000..dc9e2aec17e7 --- /dev/null +++ b/app/src/behaviors/behavior_studio_unlock.c @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#define DT_DRV_COMPAT zmk_behavior_studio_unlock + +#include +#include +#include + +#include +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) + +static int behavior_studio_unlock_init(const struct device *dev) { return 0; }; + +static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event) { + zmk_studio_core_unlock(); + + return ZMK_BEHAVIOR_OPAQUE; +} + +static int on_keymap_binding_released(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event) { + return ZMK_BEHAVIOR_OPAQUE; +} + +static const struct behavior_driver_api behavior_studio_unlock_driver_api = { + .binding_pressed = on_keymap_binding_pressed, + .binding_released = on_keymap_binding_released, +#if IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) + .get_parameter_metadata = zmk_behavior_get_empty_param_metadata, +#endif // IS_ENABLED(CONFIG_ZMK_BEHAVIOR_METADATA) +}; + +BEHAVIOR_DT_INST_DEFINE(0, behavior_studio_unlock_init, NULL, NULL, NULL, POST_KERNEL, + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_studio_unlock_driver_api); + +#endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/docs/docs/behaviors/studio-unlock.md b/docs/docs/behaviors/studio-unlock.md new file mode 100644 index 000000000000..3ddf05f03a92 --- /dev/null +++ b/docs/docs/behaviors/studio-unlock.md @@ -0,0 +1,25 @@ +--- +title: Studio Unlock Behavior +sidebar_label: Studio Lock +--- + +:::warn +ZMK Studio is still in active development. This behavior is documented in preparation for it's general availability. +::: + +## Summary + +## Studio Unlock + +The studio unlock behavior is used to grant ZMK Studio access to make changes to your ZMK device. The device will remain unlocked until a certain amount of time of inactivity in ZMK Studio, or on disconnect. Those trigger events for relocking can be configured with [studio configuration](../config/studio.md). + +### Behavior Binding + +- Reference: `&studio_unlock` +- Parameters: None + +Example: + +```dts +&studio_unlock +```