From 776b118d951f99cc1e86073c18e1f8f7d110c6b6 Mon Sep 17 00:00:00 2001 From: Sophie Tyalie Date: Tue, 15 Nov 2022 16:30:52 +0100 Subject: [PATCH] CustomLock: add basic file structure This is the first commit introducing custom lock behavior. Currently does nothing, except existing and that one can reference it in the keyboard layout not dissimilar to e.g. `&none`. The code is also orientated along the latter for right now, ready to be extended. Signed-off-by: Sophie Tyalie --- app/CMakeLists.txt | 1 + app/dts/behaviors.dtsi | 3 +- app/dts/behaviors/custom_lock.dtsi | 15 +++++++ .../behaviors/zmk,behavior-custom-lock.yaml | 8 ++++ app/src/behaviors/behavior_custom_lock.c | 39 +++++++++++++++++++ 5 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 app/dts/behaviors/custom_lock.dtsi create mode 100644 app/dts/bindings/behaviors/zmk,behavior-custom-lock.yaml create mode 100644 app/src/behaviors/behavior_custom_lock.c diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 3da50b57..e611f772 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -52,6 +52,7 @@ if ((NOT CONFIG_ZMK_SPLIT) OR CONFIG_ZMK_SPLIT_ROLE_CENTRAL) 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/behaviors/behavior_custom_lock.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/dts/behaviors.dtsi b/app/dts/behaviors.dtsi index b3502cbb..8fa30b34 100644 --- a/app/dts/behaviors.dtsi +++ b/app/dts/behaviors.dtsi @@ -18,4 +18,5 @@ #include #include #include -#include \ No newline at end of file +#include +#include diff --git a/app/dts/behaviors/custom_lock.dtsi b/app/dts/behaviors/custom_lock.dtsi new file mode 100644 index 00000000..aa791813 --- /dev/null +++ b/app/dts/behaviors/custom_lock.dtsi @@ -0,0 +1,15 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +/ { + behaviors { + /omit-if-no-ref/ lock: behavior_custom_lock { + compatible = "zmk,behavior-custom-lock"; + label = "CUSTOM LOCK"; + #binding-cells = <0>; + }; + }; +}; diff --git a/app/dts/bindings/behaviors/zmk,behavior-custom-lock.yaml b/app/dts/bindings/behaviors/zmk,behavior-custom-lock.yaml new file mode 100644 index 00000000..7ea9c5dc --- /dev/null +++ b/app/dts/bindings/behaviors/zmk,behavior-custom-lock.yaml @@ -0,0 +1,8 @@ +# Copyright (c) 2022 The ZMK Contributors +# SPDX-License-Identifier: MIT + +description: Custom Lock Behavior + +compatible: "zmk,behavior-custom-lock" + +include: zero_param.yaml diff --git a/app/src/behaviors/behavior_custom_lock.c b/app/src/behaviors/behavior_custom_lock.c new file mode 100644 index 00000000..c2b82c93 --- /dev/null +++ b/app/src/behaviors/behavior_custom_lock.c @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2022 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#define DT_DRV_COMPAT zmk_behavior_custom_lock + +#include +#include +#include + +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) + +static int behavior_lock_init(const struct device *dev) { return 0; }; + +static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event) { + return 0; +} + +static int on_keymap_binding_released(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event) { + return 0; +} + +static const struct behavior_driver_api behavior_lock_driver_api = { + .binding_pressed = on_keymap_binding_pressed, + .binding_released = on_keymap_binding_released +}; + +DEVICE_DT_INST_DEFINE(0, behavior_lock_init, NULL, NULL, NULL, APPLICATION, + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_lock_driver_api); + +#endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */