aboutsummaryrefslogtreecommitdiffhomepage
path: root/app/src/behaviors
diff options
context:
space:
mode:
authorPeter Johanson <[email protected]>2023-06-28 19:26:33 +0000
committerPete Johanson <[email protected]>2023-08-27 19:52:03 -0700
commita92a4967aa85f4ab19d36bcb81afc0420f2775d2 (patch)
treedf59c38c65c7e8af56ca55a40545c1483b9f312a /app/src/behaviors
parentdcb1f8f13528effc3e2ee3dadf9b385bf2394037 (diff)
downloadzmk-a92a4967aa85f4ab19d36bcb81afc0420f2775d2.tar.gz
zmk-a92a4967aa85f4ab19d36bcb81afc0420f2775d2.zip
fix(sensors): Only accept data once per behavior.
* Don't accept data for the same behavior on multiple layers more than once, to avoid duplicate/extraneous triggers.
Diffstat (limited to 'app/src/behaviors')
-rw-r--r--app/src/behaviors/behavior_sensor_rotate_common.c15
-rw-r--r--app/src/behaviors/behavior_sensor_rotate_common.h5
2 files changed, 11 insertions, 9 deletions
diff --git a/app/src/behaviors/behavior_sensor_rotate_common.c b/app/src/behaviors/behavior_sensor_rotate_common.c
index 586cac3fdf..98b4aec126 100644
--- a/app/src/behaviors/behavior_sensor_rotate_common.c
+++ b/app/src/behaviors/behavior_sensor_rotate_common.c
@@ -28,7 +28,7 @@ int zmk_behavior_sensor_rotate_common_accept_data(
if (value.val1 == 0) {
triggers = value.val2;
} else {
- struct sensor_value remainder = data->remainder[sensor_index];
+ struct sensor_value remainder = data->remainder[sensor_index][event.layer];
remainder.val1 += value.val1;
remainder.val2 += value.val2;
@@ -42,15 +42,16 @@ int zmk_behavior_sensor_rotate_common_accept_data(
triggers = remainder.val1 / trigger_degrees;
remainder.val1 %= trigger_degrees;
- data->remainder[sensor_index] = remainder;
+ data->remainder[sensor_index][event.layer] = remainder;
}
LOG_DBG(
"val1: %d, val2: %d, remainder: %d/%d triggers: %d inc keycode 0x%02X dec keycode 0x%02X",
- value.val1, value.val2, data->remainder[sensor_index].val1,
- data->remainder[sensor_index].val2, triggers, binding->param1, binding->param2);
+ value.val1, value.val2, data->remainder[sensor_index][event.layer].val1,
+ data->remainder[sensor_index][event.layer].val2, triggers, binding->param1,
+ binding->param2);
- data->triggers[sensor_index] = triggers;
+ data->triggers[sensor_index][event.layer] = triggers;
return 0;
}
@@ -64,11 +65,11 @@ int zmk_behavior_sensor_rotate_common_process(struct zmk_behavior_binding *bindi
const int sensor_index = ZMK_SENSOR_POSITION_FROM_VIRTUAL_KEY_POSITION(event.position);
if (mode != BEHAVIOR_SENSOR_BINDING_PROCESS_MODE_TRIGGER) {
- data->triggers[sensor_index] = 0;
+ data->triggers[sensor_index][event.layer] = 0;
return ZMK_BEHAVIOR_TRANSPARENT;
}
- int triggers = data->triggers[sensor_index];
+ int triggers = data->triggers[sensor_index][event.layer];
struct zmk_behavior_binding triggered_binding;
if (triggers > 0) {
diff --git a/app/src/behaviors/behavior_sensor_rotate_common.h b/app/src/behaviors/behavior_sensor_rotate_common.h
index d354b67937..c92ac3d5e5 100644
--- a/app/src/behaviors/behavior_sensor_rotate_common.h
+++ b/app/src/behaviors/behavior_sensor_rotate_common.h
@@ -6,6 +6,7 @@
#include <drivers/behavior.h>
#include <zmk/behavior.h>
+#include <zmk/keymap.h>
#include <zmk/sensors.h>
struct behavior_sensor_rotate_config {
@@ -16,8 +17,8 @@ struct behavior_sensor_rotate_config {
};
struct behavior_sensor_rotate_data {
- struct sensor_value remainder[ZMK_KEYMAP_SENSORS_LEN];
- int triggers[ZMK_KEYMAP_SENSORS_LEN];
+ struct sensor_value remainder[ZMK_KEYMAP_SENSORS_LEN][ZMK_KEYMAP_LAYERS_LEN];
+ int triggers[ZMK_KEYMAP_SENSORS_LEN][ZMK_KEYMAP_LAYERS_LEN];
};
int zmk_behavior_sensor_rotate_common_accept_data(