From b1ce8a0d3346be78301637a9861e4b70587aa2bb Mon Sep 17 00:00:00 2001 From: "byran.tech" <61983584+Hello9999901@users.noreply.github.com> Date: Tue, 12 Jul 2022 03:47:19 -0400 Subject: [PATCH 1/3] fix(docs): typo fixes --- docs/docs/config/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/config/index.md b/docs/docs/config/index.md index 9e35df83..51fd45b7 100644 --- a/docs/docs/config/index.md +++ b/docs/docs/config/index.md @@ -134,7 +134,7 @@ See [Zephyr's Devicetree guide](https://docs.zephyrproject.org/latest/build/dts/ ### Changing Devicetree Properties Since Devicetree properties are set for specific nodes in the tree, you will first need to find the node you want to configure. You will typically need to -search through the `.dts` file for you board, `.overlay` file for your shield, or a `.dtsi` file included in by of those files using an `#include` statement. +search through the `.dts` file for your board, `.overlay` file for your shield, or a `.dtsi` file included by those files using an `#include` statement. A Devicetree node looks like this: From 08c43feaaff548b4ba7d32a26e72313024a989bc Mon Sep 17 00:00:00 2001 From: Peter Johanson Date: Tue, 19 Apr 2022 03:02:00 -0400 Subject: [PATCH 2/3] feat(kscan): Kconfig for optional scan delay. Add optional Kconfig setting to delay scanning after each output column is set, and inputs are read, to allow inputs to "settle" after the last column is set back to inactive. --- app/drivers/kscan/Kconfig | 14 ++++++++++++++ app/drivers/kscan/kscan_gpio_matrix.c | 4 ++++ 2 files changed, 18 insertions(+) diff --git a/app/drivers/kscan/Kconfig b/app/drivers/kscan/Kconfig index c9ace0a3..b76a27b4 100644 --- a/app/drivers/kscan/Kconfig +++ b/app/drivers/kscan/Kconfig @@ -30,6 +30,20 @@ config ZMK_KSCAN_GPIO_MATRIX default $(dt_compat_enabled,$(DT_COMPAT_ZMK_KSCAN_GPIO_MATRIX)) select ZMK_KSCAN_GPIO_DRIVER +if ZMK_KSCAN_GPIO_MATRIX + +config ZMK_KSCAN_MATRIX_WAIT_BETWEEN_OUTPUTS + int "Ticks to wait between each output when scanning" + default 0 + help + When iterating over each output to drive it active, read inputs, then set + inactive again, some boards may take time for the previous output to + "settle" before reading inputs for the next active output column. In that + scenario, set this value to a positive value to configure the number of + usecs to wait after reading each column of keys. + +endif # ZMK_KSCAN_GPIO_MATRIX + config ZMK_KSCAN_MOCK_DRIVER bool default $(dt_compat_enabled,$(DT_COMPAT_ZMK_KSCAN_MOCK)) diff --git a/app/drivers/kscan/kscan_gpio_matrix.c b/app/drivers/kscan/kscan_gpio_matrix.c index fc355ca2..1ab4d442 100644 --- a/app/drivers/kscan/kscan_gpio_matrix.c +++ b/app/drivers/kscan/kscan_gpio_matrix.c @@ -250,6 +250,10 @@ static int kscan_matrix_read(const struct device *dev) { LOG_ERR("Failed to set output %i inactive: %i", o, err); return err; } + +#if CONFIG_ZMK_KSCAN_MATRIX_WAIT_BETWEEN_OUTPUTS > 0 + k_busy_wait(CONFIG_ZMK_KSCAN_MATRIX_WAIT_BETWEEN_OUTPUTS); +#endif } // Process the new state. From f68692effd96a75627d0b3e96d77f47f37d9f5f7 Mon Sep 17 00:00:00 2001 From: GreenAirplane Date: Wed, 20 Jul 2022 11:17:19 -0400 Subject: [PATCH 3/3] feat(docs): Document behavior queue limit for Macros (#1384) Co-authored-by: Cem Aksoylar Co-authored-by: Dom H --- docs/docs/behaviors/macros.md | 6 ++++++ docs/docs/config/behaviors.md | 8 ++++++++ 2 files changed, 14 insertions(+) diff --git a/docs/docs/behaviors/macros.md b/docs/docs/behaviors/macros.md index aca9eb7a..1648892e 100644 --- a/docs/docs/behaviors/macros.md +++ b/docs/docs/behaviors/macros.md @@ -134,6 +134,12 @@ bindings ; ``` +### Behavior Queue Limit + +Macros use an internal queue to invoke each behavior in the bindings list when triggered, which has a size of 64 by default. Bindings in "press" and "release" modes correspond to one event in the queue, whereas "tap" mode bindings correspond to two (one for press and one for release). As a result, the effective number of actions processed might be less than 64 and this can cause problems for long macros. + +To prevent issues with longer macros, you can change the size of this queue via the `CONFIG_ZMK_BEHAVIORS_QUEUE_SIZE` setting in your configuration, [typically through your `.conf` file](../config/index.md). For example, `CONFIG_ZMK_BEHAVIORS_QUEUE_SIZE=512` would allow your macro to type about 256 characters. + ## Common Patterns Below are some examples of how the macro behavior can be used for various useful functionality. diff --git a/docs/docs/config/behaviors.md b/docs/docs/config/behaviors.md index a4e847dc..67f5ce74 100644 --- a/docs/docs/config/behaviors.md +++ b/docs/docs/config/behaviors.md @@ -9,6 +9,14 @@ See [Configuration Overview](index.md) for instructions on how to change these s See the [zmk/app/dts/behaviors/](https://github.com/zmkfirmware/zmk/tree/main/app/dts/behaviors) folder for all default behaviors. +## Common + +### Kconfig + +| Config | Type | Description | Default | +| --------------------------------- | ---- | ------------------------------------------------------------------------------------ | ------- | +| `CONFIG_ZMK_BEHAVIORS_QUEUE_SIZE` | int | Maximum number of behaviors to allow queueing from a macro or other complex behavior | 64 | + ## Caps Word Creates a custom behavior that behaves similar to a caps lock but deactivates when any key not in a continue list is pressed.