From d081ac7a76864a7b6979576cdb69c5e73f75691a Mon Sep 17 00:00:00 2001 From: Cedric VINCENT Date: Sun, 14 Nov 2021 18:55:22 +0100 Subject: [PATCH] feat(behaviors): Add &pim447_to and &pim447_mo behaviors. --- app/CMakeLists.txt | 1 + app/dts/behaviors.dtsi | 1 + app/dts/behaviors/trackball_pim447.dtsi | 56 +++++++++++++++++ .../zmk,behavior-trackball_pim447.yaml | 15 +++++ app/src/behaviors/behavior_trackball_pim447.c | 61 +++++++++++++++++++ 5 files changed, 134 insertions(+) create mode 100644 app/dts/behaviors/trackball_pim447.dtsi create mode 100644 app/dts/bindings/behaviors/zmk,behavior-trackball_pim447.yaml create mode 100644 app/src/behaviors/behavior_trackball_pim447.c diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index f7c5e963..bb615b2c 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -66,6 +66,7 @@ if ((NOT CONFIG_ZMK_SPLIT) OR CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL) target_sources(app PRIVATE src/behaviors/behavior_mouse_key_press.c) target_sources(app PRIVATE src/behaviors/behavior_mouse_move.c) target_sources(app PRIVATE src/behaviors/behavior_mouse_scroll.c) + target_sources(app PRIVATE src/behaviors/behavior_trackball_pim447.c) target_sources_ifdef(CONFIG_ZMK_EXT_POWER app PRIVATE src/behaviors/behavior_ext_power.c) target_sources(app PRIVATE src/combo.c) target_sources(app PRIVATE src/keymap.c) diff --git a/app/dts/behaviors.dtsi b/app/dts/behaviors.dtsi index 3edaa1c1..878d5cbb 100644 --- a/app/dts/behaviors.dtsi +++ b/app/dts/behaviors.dtsi @@ -17,3 +17,4 @@ #include #include #include +#include diff --git a/app/dts/behaviors/trackball_pim447.dtsi b/app/dts/behaviors/trackball_pim447.dtsi new file mode 100644 index 00000000..dc95c692 --- /dev/null +++ b/app/dts/behaviors/trackball_pim447.dtsi @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + behaviors { + /omit-if-no-ref/ pim447_move: behavior_trackball_pim447_move { + compatible = "zmk,behavior-trackball-pim447"; + label = "PIM447_MOVE"; + mode = ; + #binding-cells = <0>; + }; + + /omit-if-no-ref/ pim447_scroll: behavior_trackball_pim447_scroll { + compatible = "zmk,behavior-trackball-pim447"; + label = "PIM447_SCROLL"; + mode = ; + #binding-cells = <0>; + }; + + /omit-if-no-ref/ pim447_toggle: behavior_trackball_pim447_toggle { + compatible = "zmk,behavior-trackball-pim447"; + label = "PIM447_TOGGLE"; + mode = ; + #binding-cells = <0>; + }; + + /omit-if-no-ref/ pim447_move_scroll: behavior_trackball_pim447_move_scroll { + compatible = "zmk,behavior-trackball-pim447"; + label = "PIM447_MOVE_SCROLL"; + mode = ; + momentary; + #binding-cells = <0>; + }; + + /omit-if-no-ref/ pim447_scroll_move: behavior_trackball_pim447_scroll_move { + compatible = "zmk,behavior-trackball-pim447"; + label = "PIM447_SCROLL_MOVE"; + mode = ; + momentary; + #binding-cells = <0>; + }; + + /omit-if-no-ref/ pim447_toggle_toggle: behavior_trackball_pim447_toggle_toggle { + compatible = "zmk,behavior-trackball-pim447"; + label = "PIM447_TOGGLE_TOGGLE"; + mode = ; + momentary; + #binding-cells = <0>; + }; + }; +}; diff --git a/app/dts/bindings/behaviors/zmk,behavior-trackball_pim447.yaml b/app/dts/bindings/behaviors/zmk,behavior-trackball_pim447.yaml new file mode 100644 index 00000000..0c34117b --- /dev/null +++ b/app/dts/bindings/behaviors/zmk,behavior-trackball_pim447.yaml @@ -0,0 +1,15 @@ +# Copyright (c) 2021 The ZMK Contributors +# SPDX-License-Identifier: MIT + +description: Trackball PIM447 behavior + +compatible: "zmk,behavior-trackball-pim447" + +include: zero_param.yaml + +properties: + mode: + type: int + required: true + momentary: + type: boolean diff --git a/app/src/behaviors/behavior_trackball_pim447.c b/app/src/behaviors/behavior_trackball_pim447.c new file mode 100644 index 00000000..d2eec9bc --- /dev/null +++ b/app/src/behaviors/behavior_trackball_pim447.c @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2021 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#define DT_DRV_COMPAT zmk_behavior_trackball_pim447 + +#include +#include +#include + +#if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) + +struct config { + int mode; + bool momentary; +}; + +static int behavior_trackball_pim447_init(const struct device *dev) { return 0; }; + +static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event) { + const struct device *device = device_get_binding(binding->behavior_dev); + const struct config *config = device->config; + + zmk_trackball_pim447_set_mode(config->mode); + + return ZMK_BEHAVIOR_OPAQUE; +} + +static int on_keymap_binding_released(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event) { + const struct device *device = device_get_binding(binding->behavior_dev); + const struct config *config = device->config; + + if (config->momentary) { + zmk_trackball_pim447_set_mode(PIM447_TOGGLE); + } + + return ZMK_BEHAVIOR_OPAQUE; +} + +static const struct behavior_driver_api behavior_trackball_pim447_driver_api = { + .binding_pressed = on_keymap_binding_pressed, + .binding_released = on_keymap_binding_released, +}; + +#define PIM447_INST(n) \ + static const struct config config_##n = { \ + .mode = DT_INST_PROP(n, mode), \ + .momentary = DT_INST_PROP(n, momentary) \ + }; \ + \ + DEVICE_DT_INST_DEFINE(n, behavior_trackball_pim447_init, device_pm_control_nop, \ + NULL, &config_##n, APPLICATION, \ + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_trackball_pim447_driver_api); + +DT_INST_FOREACH_STATUS_OKAY(PIM447_INST) + +#endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */