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.
This commit is contained in:
parent
dcb1f8f135
commit
a92a4967aa
4 changed files with 15 additions and 13 deletions
|
@ -8,6 +8,10 @@
|
|||
|
||||
#include <zmk/events/position_state_changed.h>
|
||||
|
||||
#define ZMK_LAYER_CHILD_LEN_PLUS_ONE(node) 1 +
|
||||
#define ZMK_KEYMAP_LAYERS_LEN \
|
||||
(DT_FOREACH_CHILD(DT_INST(0, zmk_keymap), ZMK_LAYER_CHILD_LEN_PLUS_ONE) 0)
|
||||
|
||||
typedef uint32_t zmk_keymap_layers_state_t;
|
||||
|
||||
uint8_t zmk_keymap_layer_default();
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -31,10 +31,6 @@ static uint8_t _zmk_keymap_layer_default = 0;
|
|||
|
||||
#define DT_DRV_COMPAT zmk_keymap
|
||||
|
||||
#define LAYER_CHILD_LEN(node) 1 +
|
||||
#define ZMK_KEYMAP_NODE DT_DRV_INST(0)
|
||||
#define ZMK_KEYMAP_LAYERS_LEN (DT_INST_FOREACH_CHILD(0, LAYER_CHILD_LEN) 0)
|
||||
|
||||
#define BINDING_WITH_COMMA(idx, drv_inst) ZMK_KEYMAP_EXTRACT_BINDING(idx, drv_inst)
|
||||
|
||||
#define TRANSFORMED_LAYER(node) \
|
||||
|
|
Loading…
Add table
Reference in a new issue