From 71caa3769c2203fea7f2fcb0c12d99efeba11ec8 Mon Sep 17 00:00:00 2001 From: Bryan Forbes Date: Tue, 9 Jan 2024 13:21:52 -0600 Subject: [PATCH 1/4] refactor: Use Kconfig to conditionally compile behaviors --- app/CMakeLists.txt | 36 ++++---- app/Kconfig.behaviors | 97 +++++++++++++++++++++- app/dts/behaviors/ext_power.dtsi | 2 +- app/dts/behaviors/reset.dtsi | 4 +- app/dts/behaviors/rgb_underglow.dtsi | 2 +- app/run-test.sh | 1 + app/src/behaviors/behavior_backlight.c | 4 - app/src/behaviors/behavior_bt.c | 4 - app/src/behaviors/behavior_caps_word.c | 4 - app/src/behaviors/behavior_ext_power.c | 4 - app/src/behaviors/behavior_hold_tap.c | 4 - app/src/behaviors/behavior_key_repeat.c | 4 - app/src/behaviors/behavior_mod_morph.c | 4 - app/src/behaviors/behavior_none.c | 4 - app/src/behaviors/behavior_outputs.c | 4 - app/src/behaviors/behavior_reset.c | 3 - app/src/behaviors/behavior_rgb_underglow.c | 4 - app/src/behaviors/behavior_sticky_key.c | 4 - app/src/behaviors/behavior_tap_dance.c | 4 - app/src/behaviors/behavior_to_layer.c | 4 - app/src/behaviors/behavior_toggle_layer.c | 4 - app/src/behaviors/behavior_transparent.c | 4 - 22 files changed, 118 insertions(+), 87 deletions(-) diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 6ef00311..c3f08dda 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -36,31 +36,31 @@ target_sources(app PRIVATE src/events/sensor_event.c) target_sources(app PRIVATE src/events/mouse_button_state_changed.c) target_sources_ifdef(CONFIG_ZMK_WPM app PRIVATE src/events/wpm_state_changed.c) target_sources_ifdef(CONFIG_USB_DEVICE_STACK app PRIVATE src/events/usb_conn_state_changed.c) -target_sources(app PRIVATE src/behaviors/behavior_reset.c) -target_sources_ifdef(CONFIG_ZMK_EXT_POWER app PRIVATE src/behaviors/behavior_ext_power.c) +target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_RESET app PRIVATE src/behaviors/behavior_reset.c) +target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_EXT_POWER app PRIVATE src/behaviors/behavior_ext_power.c) if ((NOT CONFIG_ZMK_SPLIT) OR CONFIG_ZMK_SPLIT_ROLE_CENTRAL) target_sources(app PRIVATE src/hid.c) target_sources_ifdef(CONFIG_ZMK_MOUSE app PRIVATE src/mouse.c) - target_sources(app PRIVATE src/behaviors/behavior_key_press.c) + target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_KEY_PRESS app PRIVATE src/behaviors/behavior_key_press.c) target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_KEY_TOGGLE app PRIVATE src/behaviors/behavior_key_toggle.c) - target_sources(app PRIVATE src/behaviors/behavior_hold_tap.c) - target_sources(app PRIVATE src/behaviors/behavior_sticky_key.c) - target_sources(app PRIVATE src/behaviors/behavior_caps_word.c) - target_sources(app PRIVATE src/behaviors/behavior_key_repeat.c) + target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_HOLD_TAP app PRIVATE src/behaviors/behavior_hold_tap.c) + target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_STICKY_KEY app PRIVATE src/behaviors/behavior_sticky_key.c) + target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_CAPS_WORD app PRIVATE src/behaviors/behavior_caps_word.c) + target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_KEY_REPEAT app PRIVATE src/behaviors/behavior_key_repeat.c) target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_MACRO app PRIVATE src/behaviors/behavior_macro.c) - target_sources(app PRIVATE src/behaviors/behavior_momentary_layer.c) - target_sources(app PRIVATE src/behaviors/behavior_mod_morph.c) - target_sources(app PRIVATE src/behaviors/behavior_outputs.c) - target_sources(app PRIVATE src/behaviors/behavior_toggle_layer.c) - target_sources(app PRIVATE src/behaviors/behavior_to_layer.c) - target_sources(app PRIVATE src/behaviors/behavior_transparent.c) - target_sources(app PRIVATE src/behaviors/behavior_none.c) + target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_MOMENTARY_LAYER app PRIVATE src/behaviors/behavior_momentary_layer.c) + target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_MOD_MORPH app PRIVATE src/behaviors/behavior_mod_morph.c) + target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_OUTPUTS app PRIVATE src/behaviors/behavior_outputs.c) + target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_TOGGLE_LAYER app PRIVATE src/behaviors/behavior_toggle_layer.c) + target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_TO_LAYER app PRIVATE src/behaviors/behavior_to_layer.c) + target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_TRANSPARENT app PRIVATE src/behaviors/behavior_transparent.c) + target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_NONE app PRIVATE src/behaviors/behavior_none.c) target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_SENSOR_ROTATE app PRIVATE src/behaviors/behavior_sensor_rotate.c) 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(app PRIVATE src/combo.c) - target_sources(app PRIVATE src/behaviors/behavior_tap_dance.c) + target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_TAP_DANCE app PRIVATE src/behaviors/behavior_tap_dance.c) target_sources(app PRIVATE src/behavior_queue.c) target_sources(app PRIVATE src/conditional_layer.c) target_sources(app PRIVATE src/endpoints.c) @@ -74,14 +74,14 @@ if ((NOT CONFIG_ZMK_SPLIT) OR CONFIG_ZMK_SPLIT_ROLE_CENTRAL) if (CONFIG_ZMK_BLE) target_sources(app PRIVATE src/events/ble_active_profile_changed.c) - target_sources(app PRIVATE src/behaviors/behavior_bt.c) + target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_BLUETOOTH app PRIVATE src/behaviors/behavior_bt.c) target_sources(app PRIVATE src/ble.c) target_sources(app PRIVATE src/hog.c) endif() endif() -target_sources_ifdef(CONFIG_ZMK_RGB_UNDERGLOW app PRIVATE src/behaviors/behavior_rgb_underglow.c) -target_sources_ifdef(CONFIG_ZMK_BACKLIGHT app PRIVATE src/behaviors/behavior_backlight.c) +target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_RGB_UNDERGLOW app PRIVATE src/behaviors/behavior_rgb_underglow.c) +target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_BACKLIGHT app PRIVATE src/behaviors/behavior_backlight.c) target_sources_ifdef(CONFIG_ZMK_BATTERY_REPORTING app PRIVATE src/events/battery_state_changed.c) target_sources_ifdef(CONFIG_ZMK_BATTERY_REPORTING app PRIVATE src/battery.c) diff --git a/app/Kconfig.behaviors b/app/Kconfig.behaviors index 7a1e44f6..289c7e91 100644 --- a/app/Kconfig.behaviors +++ b/app/Kconfig.behaviors @@ -1,17 +1,90 @@ # Copyright (c) 2023 The ZMK Contributors # SPDX-License-Identifier: MIT +config ZMK_BEHAVIOR_BACKLIGHT + bool + default y + depends on DT_HAS_ZMK_BEHAVIOR_BACKLIGHT_ENABLED + imply ZMK_BACKLIGHT + +config ZMK_BEHAVIOR_BLUETOOTH + bool + default y + depends on DT_HAS_ZMK_BEHAVIOR_BLUETOOTH_ENABLED + +config ZMK_BEHAVIOR_CAPS_WORD + bool + default y + depends on DT_HAS_ZMK_BEHAVIOR_CAPS_WORD_ENABLED + +config ZMK_BEHAVIOR_EXT_POWER + bool + default y + depends on DT_HAS_ZMK_BEHAVIOR_EXT_POWER_ENABLED + imply ZMK_EXT_POWER + +config ZMK_BEHAVIOR_HOLD_TAP + bool + default y + depends on DT_HAS_ZMK_BEHAVIOR_HOLD_TAP_ENABLED + +config ZMK_BEHAVIOR_KEY_PRESS + bool + default y + depends on DT_HAS_ZMK_BEHAVIOR_KEY_PRESS_ENABLED + +config ZMK_BEHAVIOR_KEY_REPEAT + bool + default y + depends on DT_HAS_ZMK_BEHAVIOR_KEY_REPEAT_ENABLED + config ZMK_BEHAVIOR_KEY_TOGGLE bool default y depends on DT_HAS_ZMK_BEHAVIOR_KEY_TOGGLE_ENABLED +config ZMK_BEHAVIOR_MACRO + bool + default y + depends on DT_HAS_ZMK_BEHAVIOR_MACRO_ENABLED || DT_HAS_ZMK_BEHAVIOR_MACRO_ONE_PARAM_ENABLED || DT_HAS_ZMK_BEHAVIOR_MACRO_TWO_PARAM_ENABLED + +config ZMK_BEHAVIOR_MOD_MORPH + bool + default y + depends on DT_HAS_ZMK_BEHAVIOR_MOD_MORPH_ENABLED + +config ZMK_BEHAVIOR_MOMENTARY_LAYER + bool + default y + depends on DT_HAS_ZMK_BEHAVIOR_MOMENTARY_LAYER_ENABLED + config ZMK_BEHAVIOR_MOUSE_KEY_PRESS bool default y depends on DT_HAS_ZMK_BEHAVIOR_MOUSE_KEY_PRESS_ENABLED imply ZMK_MOUSE +config ZMK_BEHAVIOR_NONE + bool + default y + depends on DT_HAS_ZMK_BEHAVIOR_NONE_ENABLED + +config ZMK_BEHAVIOR_OUTPUTS + bool + default y + depends on DT_HAS_ZMK_BEHAVIOR_OUTPUTS_ENABLED + +config ZMK_BEHAVIOR_RESET + bool + default y + depends on DT_HAS_ZMK_BEHAVIOR_RESET_ENABLED + +config ZMK_BEHAVIOR_RGB_UNDERGLOW + bool + default y + depends on DT_HAS_ZMK_BEHAVIOR_RGB_UNDERGLOW_ENABLED + imply ZMK_RGB_UNDERGLOW + config ZMK_BEHAVIOR_SENSOR_ROTATE_COMMON bool @@ -27,7 +100,27 @@ 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_MACRO +config ZMK_BEHAVIOR_STICKY_KEY bool default y - depends on DT_HAS_ZMK_BEHAVIOR_MACRO_ENABLED || DT_HAS_ZMK_BEHAVIOR_MACRO_ONE_PARAM_ENABLED || DT_HAS_ZMK_BEHAVIOR_MACRO_TWO_PARAM_ENABLED \ No newline at end of file + depends on DT_HAS_ZMK_BEHAVIOR_STICKY_KEY_ENABLED + +config ZMK_BEHAVIOR_TAP_DANCE + bool + default y + depends on DT_HAS_ZMK_BEHAVIOR_TAP_DANCE_ENABLED + +config ZMK_BEHAVIOR_TO_LAYER + bool + default y + depends on DT_HAS_ZMK_BEHAVIOR_TO_LAYER_ENABLED + +config ZMK_BEHAVIOR_TOGGLE_LAYER + bool + default y + depends on DT_HAS_ZMK_BEHAVIOR_TOGGLE_LAYER_ENABLED + +config ZMK_BEHAVIOR_TRANSPARENT + bool + default y + depends on DT_HAS_ZMK_BEHAVIOR_TRANSPARENT_ENABLED diff --git a/app/dts/behaviors/ext_power.dtsi b/app/dts/behaviors/ext_power.dtsi index 2ae1daf8..d28ff966 100644 --- a/app/dts/behaviors/ext_power.dtsi +++ b/app/dts/behaviors/ext_power.dtsi @@ -7,7 +7,7 @@ / { behaviors { // Behavior can be invoked on peripherals, so name must be <= 8 characters. - ext_power: extpower { + /omit-if-no-ref/ ext_power: extpower { compatible = "zmk,behavior-ext-power"; #binding-cells = <1>; }; diff --git a/app/dts/behaviors/reset.dtsi b/app/dts/behaviors/reset.dtsi index e407b107..3f2ee934 100644 --- a/app/dts/behaviors/reset.dtsi +++ b/app/dts/behaviors/reset.dtsi @@ -9,13 +9,13 @@ / { behaviors { // Behavior can be invoked on peripherals, so name must be <= 8 characters. - sys_reset: sysreset { + /omit-if-no-ref/ sys_reset: sysreset { compatible = "zmk,behavior-reset"; #binding-cells = <0>; }; // Behavior can be invoked on peripherals, so name must be <= 8 characters. - bootloader: bootload { + /omit-if-no-ref/ bootloader: bootload { compatible = "zmk,behavior-reset"; type = ; #binding-cells = <0>; diff --git a/app/dts/behaviors/rgb_underglow.dtsi b/app/dts/behaviors/rgb_underglow.dtsi index 969518a6..a10df4f8 100644 --- a/app/dts/behaviors/rgb_underglow.dtsi +++ b/app/dts/behaviors/rgb_underglow.dtsi @@ -7,7 +7,7 @@ / { behaviors { // Behavior can be invoked on peripherals, so name must be <= 8 characters. - rgb_ug: rgb_ug { + /omit-if-no-ref/ rgb_ug: rgb_ug { compatible = "zmk,behavior-rgb-underglow"; #binding-cells = <2>; }; diff --git a/app/run-test.sh b/app/run-test.sh index b0b6f73b..6d39a911 100755 --- a/app/run-test.sh +++ b/app/run-test.sh @@ -16,6 +16,7 @@ fi testcases=$(find $path -name native_posix_64.keymap -exec dirname \{\} \;) num_cases=$(echo "$testcases" | wc -l) if [ $num_cases -gt 1 ] || [ "$testcases" != "$path" ]; then + mkdir -p ./build/tests echo "" > ./build/tests/pass-fail.log echo "$testcases" | xargs -L 1 -P ${J:-4} ./run-test.sh err=$? diff --git a/app/src/behaviors/behavior_backlight.c b/app/src/behaviors/behavior_backlight.c index 3f836b73..5477298c 100644 --- a/app/src/behaviors/behavior_backlight.c +++ b/app/src/behaviors/behavior_backlight.c @@ -16,8 +16,6 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); -#if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) - static int behavior_backlight_init(const struct device *dev) { return 0; } static int @@ -93,5 +91,3 @@ static const struct behavior_driver_api behavior_backlight_driver_api = { BEHAVIOR_DT_INST_DEFINE(0, behavior_backlight_init, NULL, NULL, NULL, POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_backlight_driver_api); - -#endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/app/src/behaviors/behavior_bt.c b/app/src/behaviors/behavior_bt.c index 03bb7d8c..9a1410bf 100644 --- a/app/src/behaviors/behavior_bt.c +++ b/app/src/behaviors/behavior_bt.c @@ -18,8 +18,6 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include -#if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) - static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event) { switch (binding->param1) { @@ -58,5 +56,3 @@ static const struct behavior_driver_api behavior_bt_driver_api = { BEHAVIOR_DT_INST_DEFINE(0, behavior_bt_init, NULL, NULL, NULL, POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_bt_driver_api); - -#endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/app/src/behaviors/behavior_caps_word.c b/app/src/behaviors/behavior_caps_word.c index d9b3f24e..ffdad89d 100644 --- a/app/src/behaviors/behavior_caps_word.c +++ b/app/src/behaviors/behavior_caps_word.c @@ -22,8 +22,6 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); -#if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) - struct caps_word_continue_item { uint16_t page; uint32_t id; @@ -186,5 +184,3 @@ static int behavior_caps_word_init(const struct device *dev) { CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_caps_word_driver_api); DT_INST_FOREACH_STATUS_OKAY(KP_INST) - -#endif diff --git a/app/src/behaviors/behavior_ext_power.c b/app/src/behaviors/behavior_ext_power.c index b2aff3c8..0dec78e8 100644 --- a/app/src/behaviors/behavior_ext_power.c +++ b/app/src/behaviors/behavior_ext_power.c @@ -16,8 +16,6 @@ #include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); -#if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) - static int on_keymap_binding_convert_central_state_dependent_params(struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event) { @@ -76,5 +74,3 @@ static const struct behavior_driver_api behavior_ext_power_driver_api = { BEHAVIOR_DT_INST_DEFINE(0, behavior_ext_power_init, NULL, NULL, NULL, POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_ext_power_driver_api); - -#endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/app/src/behaviors/behavior_hold_tap.c b/app/src/behaviors/behavior_hold_tap.c index 204e50f4..70146c28 100644 --- a/app/src/behaviors/behavior_hold_tap.c +++ b/app/src/behaviors/behavior_hold_tap.c @@ -22,8 +22,6 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); -#if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) - #define ZMK_BHV_HOLD_TAP_MAX_HELD 10 #define ZMK_BHV_HOLD_TAP_MAX_CAPTURED_EVENTS 40 @@ -812,5 +810,3 @@ static int behavior_hold_tap_init(const struct device *dev) { &behavior_hold_tap_driver_api); DT_INST_FOREACH_STATUS_OKAY(KP_INST) - -#endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/app/src/behaviors/behavior_key_repeat.c b/app/src/behaviors/behavior_key_repeat.c index c93fa722..9c4da44d 100644 --- a/app/src/behaviors/behavior_key_repeat.c +++ b/app/src/behaviors/behavior_key_repeat.c @@ -17,8 +17,6 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); -#if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) - struct behavior_key_repeat_config { uint8_t index; uint8_t usage_pages_count; @@ -121,5 +119,3 @@ static int behavior_key_repeat_init(const struct device *dev) { CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_key_repeat_driver_api); DT_INST_FOREACH_STATUS_OKAY(KR_INST) - -#endif diff --git a/app/src/behaviors/behavior_mod_morph.c b/app/src/behaviors/behavior_mod_morph.c index 3a8bf08c..2209b8b1 100644 --- a/app/src/behaviors/behavior_mod_morph.c +++ b/app/src/behaviors/behavior_mod_morph.c @@ -21,8 +21,6 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); -#if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) - struct behavior_mod_morph_config { struct zmk_behavior_binding normal_binding; struct zmk_behavior_binding morph_binding; @@ -102,5 +100,3 @@ static int behavior_mod_morph_init(const struct device *dev) { return 0; } CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_mod_morph_driver_api); DT_INST_FOREACH_STATUS_OKAY(KP_INST) - -#endif diff --git a/app/src/behaviors/behavior_none.c b/app/src/behaviors/behavior_none.c index 0137622a..c4615fe6 100644 --- a/app/src/behaviors/behavior_none.c +++ b/app/src/behaviors/behavior_none.c @@ -14,8 +14,6 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); -#if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) - static int behavior_none_init(const struct device *dev) { return 0; }; static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding, @@ -35,5 +33,3 @@ static const struct behavior_driver_api behavior_none_driver_api = { BEHAVIOR_DT_INST_DEFINE(0, behavior_none_init, NULL, NULL, NULL, POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_none_driver_api); - -#endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/app/src/behaviors/behavior_outputs.c b/app/src/behaviors/behavior_outputs.c index d172c3a1..f06e08b6 100644 --- a/app/src/behaviors/behavior_outputs.c +++ b/app/src/behaviors/behavior_outputs.c @@ -18,8 +18,6 @@ #include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); -#if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) - static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event) { switch (binding->param1) { @@ -44,5 +42,3 @@ static const struct behavior_driver_api behavior_outputs_driver_api = { BEHAVIOR_DT_INST_DEFINE(0, behavior_out_init, NULL, NULL, NULL, POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_outputs_driver_api); - -#endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/app/src/behaviors/behavior_reset.c b/app/src/behaviors/behavior_reset.c index c559f17f..eeb96c1b 100644 --- a/app/src/behaviors/behavior_reset.c +++ b/app/src/behaviors/behavior_reset.c @@ -16,7 +16,6 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); -#if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) struct behavior_reset_config { int type; }; @@ -48,5 +47,3 @@ static const struct behavior_driver_api behavior_reset_driver_api = { &behavior_reset_driver_api); DT_INST_FOREACH_STATUS_OKAY(RST_INST) - -#endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/app/src/behaviors/behavior_rgb_underglow.c b/app/src/behaviors/behavior_rgb_underglow.c index a16ee591..672a4b4a 100644 --- a/app/src/behaviors/behavior_rgb_underglow.c +++ b/app/src/behaviors/behavior_rgb_underglow.c @@ -16,8 +16,6 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); -#if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) - static int behavior_rgb_underglow_init(const struct device *dev) { return 0; } static int @@ -151,5 +149,3 @@ static const struct behavior_driver_api behavior_rgb_underglow_driver_api = { BEHAVIOR_DT_INST_DEFINE(0, behavior_rgb_underglow_init, NULL, NULL, NULL, POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_rgb_underglow_driver_api); - -#endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/app/src/behaviors/behavior_sticky_key.c b/app/src/behaviors/behavior_sticky_key.c index 05f6846b..8c6f4e36 100644 --- a/app/src/behaviors/behavior_sticky_key.c +++ b/app/src/behaviors/behavior_sticky_key.c @@ -22,8 +22,6 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); -#if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) - #define KEY_PRESS DEVICE_DT_NAME(DT_INST(0, zmk_behavior_key_press)) #define ZMK_BHV_STICKY_KEY_MAX_HELD 10 @@ -303,5 +301,3 @@ static struct behavior_sticky_key_data behavior_sticky_key_data; CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_sticky_key_driver_api); DT_INST_FOREACH_STATUS_OKAY(KP_INST) - -#endif diff --git a/app/src/behaviors/behavior_tap_dance.c b/app/src/behaviors/behavior_tap_dance.c index 4f6fa1a1..e769bb07 100644 --- a/app/src/behaviors/behavior_tap_dance.c +++ b/app/src/behaviors/behavior_tap_dance.c @@ -19,8 +19,6 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); -#if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) - #define ZMK_BHV_TAP_DANCE_MAX_HELD 10 #define ZMK_BHV_TAP_DANCE_POSITION_FREE UINT32_MAX @@ -257,5 +255,3 @@ static int behavior_tap_dance_init(const struct device *dev) { CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_tap_dance_driver_api); DT_INST_FOREACH_STATUS_OKAY(KP_INST) - -#endif \ No newline at end of file diff --git a/app/src/behaviors/behavior_to_layer.c b/app/src/behaviors/behavior_to_layer.c index 1c87a925..2e5223b1 100644 --- a/app/src/behaviors/behavior_to_layer.c +++ b/app/src/behaviors/behavior_to_layer.c @@ -15,8 +15,6 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); -#if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) - static int behavior_to_init(const struct device *dev) { return 0; }; static int to_keymap_binding_pressed(struct zmk_behavior_binding *binding, @@ -39,5 +37,3 @@ static const struct behavior_driver_api behavior_to_driver_api = { BEHAVIOR_DT_INST_DEFINE(0, behavior_to_init, NULL, NULL, NULL, POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_to_driver_api); - -#endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/app/src/behaviors/behavior_toggle_layer.c b/app/src/behaviors/behavior_toggle_layer.c index 817462df..10e543d8 100644 --- a/app/src/behaviors/behavior_toggle_layer.c +++ b/app/src/behaviors/behavior_toggle_layer.c @@ -15,8 +15,6 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); -#if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) - struct behavior_tog_config {}; struct behavior_tog_data {}; @@ -45,5 +43,3 @@ static struct behavior_tog_data behavior_tog_data; BEHAVIOR_DT_INST_DEFINE(0, behavior_tog_init, NULL, &behavior_tog_data, &behavior_tog_config, POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_tog_driver_api); - -#endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/app/src/behaviors/behavior_transparent.c b/app/src/behaviors/behavior_transparent.c index c7bf802b..ab8ba285 100644 --- a/app/src/behaviors/behavior_transparent.c +++ b/app/src/behaviors/behavior_transparent.c @@ -14,8 +14,6 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); -#if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) - static int behavior_transparent_init(const struct device *dev) { return 0; }; static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding, @@ -35,5 +33,3 @@ static const struct behavior_driver_api behavior_transparent_driver_api = { BEHAVIOR_DT_INST_DEFINE(0, behavior_transparent_init, NULL, NULL, NULL, POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_transparent_driver_api); - -#endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ From b3c482e8453b95553c8c67f0d81a8e582a644c2b Mon Sep 17 00:00:00 2001 From: Bryan Forbes Date: Tue, 9 Jan 2024 17:46:30 -0600 Subject: [PATCH 2/4] Tweaks and update docs --- app/Kconfig.behaviors | 11 ++-- app/src/behaviors/behavior_mouse_key_press.c | 4 -- docs/docs/development/new-behavior.mdx | 58 +++++++++++--------- 3 files changed, 36 insertions(+), 37 deletions(-) diff --git a/app/Kconfig.behaviors b/app/Kconfig.behaviors index 289c7e91..9e55f977 100644 --- a/app/Kconfig.behaviors +++ b/app/Kconfig.behaviors @@ -4,13 +4,12 @@ config ZMK_BEHAVIOR_BACKLIGHT bool default y - depends on DT_HAS_ZMK_BEHAVIOR_BACKLIGHT_ENABLED - imply ZMK_BACKLIGHT + depends on DT_HAS_ZMK_BEHAVIOR_BACKLIGHT_ENABLED && ZMK_BACKLIGHT config ZMK_BEHAVIOR_BLUETOOTH bool default y - depends on DT_HAS_ZMK_BEHAVIOR_BLUETOOTH_ENABLED + depends on DT_HAS_ZMK_BEHAVIOR_BLUETOOTH_ENABLED && ZMK_BLE config ZMK_BEHAVIOR_CAPS_WORD bool @@ -20,8 +19,7 @@ config ZMK_BEHAVIOR_CAPS_WORD config ZMK_BEHAVIOR_EXT_POWER bool default y - depends on DT_HAS_ZMK_BEHAVIOR_EXT_POWER_ENABLED - imply ZMK_EXT_POWER + depends on DT_HAS_ZMK_BEHAVIOR_EXT_POWER_ENABLED && ZMK_EXT_POWER config ZMK_BEHAVIOR_HOLD_TAP bool @@ -82,8 +80,7 @@ config ZMK_BEHAVIOR_RESET config ZMK_BEHAVIOR_RGB_UNDERGLOW bool default y - depends on DT_HAS_ZMK_BEHAVIOR_RGB_UNDERGLOW_ENABLED - imply ZMK_RGB_UNDERGLOW + depends on DT_HAS_ZMK_BEHAVIOR_RGB_UNDERGLOW_ENABLED && ZMK_RGB_UNDERGLOW config ZMK_BEHAVIOR_SENSOR_ROTATE_COMMON bool diff --git a/app/src/behaviors/behavior_mouse_key_press.c b/app/src/behaviors/behavior_mouse_key_press.c index 9064a1aa..fb15eaf1 100644 --- a/app/src/behaviors/behavior_mouse_key_press.c +++ b/app/src/behaviors/behavior_mouse_key_press.c @@ -16,8 +16,6 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); -#if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) - static int behavior_mouse_key_press_init(const struct device *dev) { return 0; }; static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding, @@ -44,5 +42,3 @@ static const struct behavior_driver_api behavior_mouse_key_press_driver_api = { &behavior_mouse_key_press_driver_api); DT_INST_FOREACH_STATUS_OKAY(MKP_INST) - -#endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/docs/docs/development/new-behavior.mdx b/docs/docs/development/new-behavior.mdx index cabc417f..6f5d0b12 100644 --- a/docs/docs/development/new-behavior.mdx +++ b/docs/docs/development/new-behavior.mdx @@ -17,6 +17,7 @@ The general process for developing behaviors is: 1. [Create the behavior](#creating-the-behavior) 1. [Create the devicetree binding (`.yaml`)](#creating-the-devicetree-binding-yaml) 1. [Create the driver (`.c`)](#creating-the-driver-c) + 1. [Update `app/Kconfig.behavior`](#updating-appkconfigbehavior) 1. [Update `app/CmakeLists.txt` to include the new driver](#updating-appcmakeliststxt-to-include-the-new-driver) 1. [Define common use-cases for the behavior (`.dtsi`) (Optional)](#defining-common-use-cases-for-the-behavior-dtsi-optional) 1. [Test changes locally](#testing-changes-locally) @@ -145,8 +146,6 @@ The code snippet below shows the essential components of a new driver. LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); -#if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) - // Instance-Unique Data Struct (Optional) struct behavior__data { bool example_data_param1; @@ -178,8 +177,6 @@ BEHAVIOR_DT_INST_DEFINE(0, // POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, // Initialization Level, Device Priority &_driver_api); // API Structure -#endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ - ``` #### `DT_DRV_COMPAT` @@ -320,38 +317,47 @@ The fifth cell of `BEHAVIOR_DT_INST_DEFINE` can be set to `NULL` instead if inst Remember that `.c` files should be formatted according to `clang-format` to ensure that checks run smoothly once the pull request is submitted. ::: +### Updating `app/Kconfig.behaviors` + +In order to compile the behavior only when a user includes it in their keymap, an entry needs to be added to `app/Kconfig.behaviors` similar to the entry for hold-tap, which is shown below as a reference: + +```txt title="app/Kconfig.behaviors" +config ZMK_BEHAVIOR_HOLD_TAP + bool + default y + depends on DT_HAS_ZMK_BEHAVIOR_HOLD_TAP_ENABLED +``` + +In the case of a new behavior, replace `HOLD_TAP` with the upper-snake-cased name. If the inclusion of the behavior in a keyboard's keymap should enable a Kconfig option, append `imply ZMK_` to the entry. If the behavior requires a certain condition in a keyboard's `.conf` file to be met, append `&& ZMK_` to the `depends on` line. + ### Updating `app/CmakeLists.txt` to include the new driver -Most behavior drivers' are invoked according to the central half's [locality](#api-structure), and are therefore stored after the line `if ((NOT CONFIG_ZMK_SPLIT) OR CONFIG_ZMK_SPLIT_ROLE_CENTRAL)` in the form, `target_sources(app PRIVATE src/behaviors/.c)`, as shown below. +Most behavior drivers are invoked according to the central half's [locality](#api-structure), and are therefore stored after the line `if ((NOT CONFIG_ZMK_SPLIT) OR CONFIG_ZMK_SPLIT_ROLE_CENTRAL)` in the form, `target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_ app PRIVATE src/behaviors/.c)`, as shown below. ```txt title="app/CmakeLists.txt" if ((NOT CONFIG_ZMK_SPLIT) OR CONFIG_ZMK_SPLIT_ROLE_CENTRAL) - target_sources(app PRIVATE src/behaviors/behavior_key_press.c) - target_sources(app PRIVATE src/behaviors/behavior_hold_tap.c) - target_sources(app PRIVATE src/behaviors/behavior_sticky_key.c) - target_sources(app PRIVATE src/behaviors/behavior_caps_word.c) - target_sources(app PRIVATE src/behaviors/behavior_key_repeat.c) - target_sources(app PRIVATE src/behaviors/behavior_momentary_layer.c) - target_sources(app PRIVATE src/behaviors/behavior_mod_morph.c) - target_sources(app PRIVATE src/behaviors/behavior_outputs.c) - target_sources(app PRIVATE src/behaviors/behavior_tap_dance.c) - target_sources(app PRIVATE src/behaviors/behavior_toggle_layer.c) - target_sources(app PRIVATE src/behaviors/behavior_to_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/combo.c) - target_sources(app PRIVATE src/conditional_layer.c) - target_sources(app PRIVATE src/keymap.c) + target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_KEY_PRESS app PRIVATE src/behaviors/behavior_key_press.c) + target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_KEY_TOGGLE app PRIVATE src/behaviors/behavior_key_toggle.c) + target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_HOLD_TAP app PRIVATE src/behaviors/behavior_hold_tap.c) + target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_STICKY_KEY app PRIVATE src/behaviors/behavior_sticky_key.c) + target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_CAPS_WORD app PRIVATE src/behaviors/behavior_caps_word.c) + target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_KEY_REPEAT app PRIVATE src/behaviors/behavior_key_repeat.c) + target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_MACRO app PRIVATE src/behaviors/behavior_macro.c) + target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_MOMENTARY_LAYER app PRIVATE src/behaviors/behavior_momentary_layer.c) + target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_MOD_MORPH app PRIVATE src/behaviors/behavior_mod_morph.c) + target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_OUTPUTS app PRIVATE src/behaviors/behavior_outputs.c) + target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_TOGGLE_LAYER app PRIVATE src/behaviors/behavior_toggle_layer.c) + target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_TO_LAYER app PRIVATE src/behaviors/behavior_to_layer.c) + target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_TRANSPARENT app PRIVATE src/behaviors/behavior_transparent.c) + target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_NONE app PRIVATE src/behaviors/behavior_none.c) endif() ``` For behaviors that do not require central locality, the following options for updating `app/CmakeLists.txt` also exist: -- Behavior applies to unibody, or central or peripheral half of keyboard: place `target_sources(app PRIVATE .c)` line _before_ `if ((NOT CONFIG_ZMK_SPLIT) OR CONFIG_ZMK_SPLIT_ROLE_CENTRAL)` -- Behavior applies to _only_ central half of split keyboard: place `target_sources(app PRIVATE .c)` after `if (CONFIG_ZMK_SPLIT AND CONFIG_ZMK_SPLIT_ROLE_CENTRAL)` -- Behavior applies to _only_ peripheral half of split keyboard: place `target_sources(app PRIVATE .c)` after `if (CONFIG_ZMK_SPLIT AND (NOT CONFIG_ZMK_SPLIT_ROLE_CENTRAL))` -- Behavior requires certain condition in a keyboard's `.conf` file to be met: use `target_sources_ifdef(CONFIG_ app PRIVATE .c)` instead of `target_sources(.c)` +- Behavior applies to unibody, or central or peripheral half of keyboard: place `target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_ app PRIVATE src/behaviors/.c)` line _before_ `if ((NOT CONFIG_ZMK_SPLIT) OR CONFIG_ZMK_SPLIT_ROLE_CENTRAL)` +- Behavior applies to _only_ central half of split keyboard: place `target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_ app PRIVATE src/behaviors/.c)` after `if (CONFIG_ZMK_SPLIT AND CONFIG_ZMK_SPLIT_ROLE_CENTRAL)` +- Behavior applies to _only_ peripheral half of split keyboard: place `target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_ app PRIVATE src/behaviors/.c)` after `if (CONFIG_ZMK_SPLIT AND (NOT CONFIG_ZMK_SPLIT_ROLE_CENTRAL))` ### Defining common use-cases for the behavior (`.dtsi`) (Optional) From 1ce7670e57a2627d19c877629859ff839b1cd365 Mon Sep 17 00:00:00 2001 From: Bryan Forbes Date: Wed, 10 Jan 2024 13:17:57 -0600 Subject: [PATCH 3/4] Only include a limited number of behaviors in the CMakeFiles.txt example --- docs/docs/development/new-behavior.mdx | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/docs/docs/development/new-behavior.mdx b/docs/docs/development/new-behavior.mdx index 6f5d0b12..541a81a3 100644 --- a/docs/docs/development/new-behavior.mdx +++ b/docs/docs/development/new-behavior.mdx @@ -336,20 +336,11 @@ Most behavior drivers are invoked according to the central half's [locality](#ap ```txt title="app/CmakeLists.txt" if ((NOT CONFIG_ZMK_SPLIT) OR CONFIG_ZMK_SPLIT_ROLE_CENTRAL) + /* ... */ target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_KEY_PRESS app PRIVATE src/behaviors/behavior_key_press.c) target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_KEY_TOGGLE app PRIVATE src/behaviors/behavior_key_toggle.c) target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_HOLD_TAP app PRIVATE src/behaviors/behavior_hold_tap.c) - target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_STICKY_KEY app PRIVATE src/behaviors/behavior_sticky_key.c) - target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_CAPS_WORD app PRIVATE src/behaviors/behavior_caps_word.c) - target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_KEY_REPEAT app PRIVATE src/behaviors/behavior_key_repeat.c) - target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_MACRO app PRIVATE src/behaviors/behavior_macro.c) - target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_MOMENTARY_LAYER app PRIVATE src/behaviors/behavior_momentary_layer.c) - target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_MOD_MORPH app PRIVATE src/behaviors/behavior_mod_morph.c) - target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_OUTPUTS app PRIVATE src/behaviors/behavior_outputs.c) - target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_TOGGLE_LAYER app PRIVATE src/behaviors/behavior_toggle_layer.c) - target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_TO_LAYER app PRIVATE src/behaviors/behavior_to_layer.c) - target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_TRANSPARENT app PRIVATE src/behaviors/behavior_transparent.c) - target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_NONE app PRIVATE src/behaviors/behavior_none.c) + /* ... */ endif() ``` From 72f8c5072e0cdccda14721e9a9c42c8528985511 Mon Sep 17 00:00:00 2001 From: Bryan Forbes Date: Wed, 6 Mar 2024 11:40:49 -0600 Subject: [PATCH 4/4] Update global behaviors to be compiled in based on their Kconfig option Because global behaviors have to exist on both the central and split regardless if the user references them in their keymap, we can't omit the behavior declaration if the user doen't reference it and decide to compile it later based on the existence of the behavior declaration. The best option seems to be to decide whether to compile those behaviors based on the feature Kconfig flag. This also means that the two reset behaviors will always be compiled into both sides. --- app/CMakeLists.txt | 8 ++++---- app/Kconfig.behaviors | 20 -------------------- app/dts/behaviors/backlight.dtsi | 5 +++-- app/dts/behaviors/ext_power.dtsi | 5 +++-- app/dts/behaviors/reset.dtsi | 10 ++++++---- app/dts/behaviors/rgb_underglow.dtsi | 5 +++-- 6 files changed, 19 insertions(+), 34 deletions(-) diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index c3f08dda..ee144253 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -36,8 +36,8 @@ target_sources(app PRIVATE src/events/sensor_event.c) target_sources(app PRIVATE src/events/mouse_button_state_changed.c) target_sources_ifdef(CONFIG_ZMK_WPM app PRIVATE src/events/wpm_state_changed.c) target_sources_ifdef(CONFIG_USB_DEVICE_STACK app PRIVATE src/events/usb_conn_state_changed.c) -target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_RESET app PRIVATE src/behaviors/behavior_reset.c) -target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_EXT_POWER app PRIVATE src/behaviors/behavior_ext_power.c) +target_sources(app PRIVATE src/behaviors/behavior_reset.c) +target_sources_ifdef(CONFIG_ZMK_EXT_POWER app PRIVATE src/behaviors/behavior_ext_power.c) if ((NOT CONFIG_ZMK_SPLIT) OR CONFIG_ZMK_SPLIT_ROLE_CENTRAL) target_sources(app PRIVATE src/hid.c) target_sources_ifdef(CONFIG_ZMK_MOUSE app PRIVATE src/mouse.c) @@ -80,8 +80,8 @@ if ((NOT CONFIG_ZMK_SPLIT) OR CONFIG_ZMK_SPLIT_ROLE_CENTRAL) endif() endif() -target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_RGB_UNDERGLOW app PRIVATE src/behaviors/behavior_rgb_underglow.c) -target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_BACKLIGHT app PRIVATE src/behaviors/behavior_backlight.c) +target_sources_ifdef(CONFIG_ZMK_RGB_UNDERGLOW app PRIVATE src/behaviors/behavior_rgb_underglow.c) +target_sources_ifdef(CONFIG_ZMK_BACKLIGHT app PRIVATE src/behaviors/behavior_backlight.c) target_sources_ifdef(CONFIG_ZMK_BATTERY_REPORTING app PRIVATE src/events/battery_state_changed.c) target_sources_ifdef(CONFIG_ZMK_BATTERY_REPORTING app PRIVATE src/battery.c) diff --git a/app/Kconfig.behaviors b/app/Kconfig.behaviors index 9e55f977..03f26efa 100644 --- a/app/Kconfig.behaviors +++ b/app/Kconfig.behaviors @@ -1,11 +1,6 @@ # Copyright (c) 2023 The ZMK Contributors # SPDX-License-Identifier: MIT -config ZMK_BEHAVIOR_BACKLIGHT - bool - default y - depends on DT_HAS_ZMK_BEHAVIOR_BACKLIGHT_ENABLED && ZMK_BACKLIGHT - config ZMK_BEHAVIOR_BLUETOOTH bool default y @@ -16,11 +11,6 @@ config ZMK_BEHAVIOR_CAPS_WORD default y depends on DT_HAS_ZMK_BEHAVIOR_CAPS_WORD_ENABLED -config ZMK_BEHAVIOR_EXT_POWER - bool - default y - depends on DT_HAS_ZMK_BEHAVIOR_EXT_POWER_ENABLED && ZMK_EXT_POWER - config ZMK_BEHAVIOR_HOLD_TAP bool default y @@ -72,16 +62,6 @@ config ZMK_BEHAVIOR_OUTPUTS default y depends on DT_HAS_ZMK_BEHAVIOR_OUTPUTS_ENABLED -config ZMK_BEHAVIOR_RESET - bool - default y - depends on DT_HAS_ZMK_BEHAVIOR_RESET_ENABLED - -config ZMK_BEHAVIOR_RGB_UNDERGLOW - bool - default y - depends on DT_HAS_ZMK_BEHAVIOR_RGB_UNDERGLOW_ENABLED && ZMK_RGB_UNDERGLOW - config ZMK_BEHAVIOR_SENSOR_ROTATE_COMMON bool diff --git a/app/dts/behaviors/backlight.dtsi b/app/dts/behaviors/backlight.dtsi index 54c83ff4..355bac79 100644 --- a/app/dts/behaviors/backlight.dtsi +++ b/app/dts/behaviors/backlight.dtsi @@ -6,8 +6,9 @@ / { behaviors { - // Behavior can be invoked on peripherals, so name must be <= 8 characters. - /omit-if-no-ref/ bl: bcklight { + // Behavior can be invoked on peripherals, so name must be <= 8 characters + // and cannot be /omit-if-no-ref/ + bl: bcklight { compatible = "zmk,behavior-backlight"; #binding-cells = <2>; }; diff --git a/app/dts/behaviors/ext_power.dtsi b/app/dts/behaviors/ext_power.dtsi index d28ff966..d6b253de 100644 --- a/app/dts/behaviors/ext_power.dtsi +++ b/app/dts/behaviors/ext_power.dtsi @@ -6,8 +6,9 @@ / { behaviors { - // Behavior can be invoked on peripherals, so name must be <= 8 characters. - /omit-if-no-ref/ ext_power: extpower { + // Behavior can be invoked on peripherals, so name must be <= 8 characters + // and cannot be /omit-if-no-ref/ + ext_power: extpower { compatible = "zmk,behavior-ext-power"; #binding-cells = <1>; }; diff --git a/app/dts/behaviors/reset.dtsi b/app/dts/behaviors/reset.dtsi index 3f2ee934..a4882be4 100644 --- a/app/dts/behaviors/reset.dtsi +++ b/app/dts/behaviors/reset.dtsi @@ -8,14 +8,16 @@ / { behaviors { - // Behavior can be invoked on peripherals, so name must be <= 8 characters. - /omit-if-no-ref/ sys_reset: sysreset { + // Behavior can be invoked on peripherals, so name must be <= 8 characters + // and cannot be /omit-if-no-ref/ + sys_reset: sysreset { compatible = "zmk,behavior-reset"; #binding-cells = <0>; }; - // Behavior can be invoked on peripherals, so name must be <= 8 characters. - /omit-if-no-ref/ bootloader: bootload { + // Behavior can be invoked on peripherals, so name must be <= 8 characters + // and cannot be /omit-if-no-ref/ + bootloader: bootload { compatible = "zmk,behavior-reset"; type = ; #binding-cells = <0>; diff --git a/app/dts/behaviors/rgb_underglow.dtsi b/app/dts/behaviors/rgb_underglow.dtsi index a10df4f8..17f93a0d 100644 --- a/app/dts/behaviors/rgb_underglow.dtsi +++ b/app/dts/behaviors/rgb_underglow.dtsi @@ -6,8 +6,9 @@ / { behaviors { - // Behavior can be invoked on peripherals, so name must be <= 8 characters. - /omit-if-no-ref/ rgb_ug: rgb_ug { + // Behavior can be invoked on peripherals, so name must be <= 8 characters + // and cannot be /omit-if-no-ref/ + rgb_ug: rgb_ug { compatible = "zmk,behavior-rgb-underglow"; #binding-cells = <2>; };