219 lines
3.9 KiB
INI
219 lines
3.9 KiB
INI
constants = {
|
|
my_modifier = 9;
|
|
};
|
|
|
|
enums = {
|
|
namespaces: ["stdin", "clickpad", "variable"];
|
|
variables: ["num_touches"];
|
|
};
|
|
|
|
predicates = {
|
|
is_evdev = {
|
|
type = "code_ns";
|
|
min = "namespaces.clickpad";
|
|
max = "namespaces.clickpad";
|
|
};
|
|
key_event = {
|
|
type = "and";
|
|
args = (
|
|
"is_evdev",
|
|
{
|
|
type = "code_major";
|
|
min = "event_type.KEY";
|
|
max = "event_type.KEY";
|
|
}
|
|
);
|
|
};
|
|
abs_event = {
|
|
type = "and";
|
|
args = (
|
|
"is_evdev",
|
|
{
|
|
type = "code_major";
|
|
min = "event_type.ABS";
|
|
max = "event_type.ABS";
|
|
}
|
|
);
|
|
};
|
|
btn_touch_event = {
|
|
type = "and";
|
|
args = (
|
|
"key_event",
|
|
{
|
|
type = "code_minor";
|
|
min = "button_event.TOUCH";
|
|
max = "button_event.TOUCH";
|
|
}
|
|
);
|
|
};
|
|
touch_tracking_id = {
|
|
type = "and";
|
|
args = (
|
|
"abs_event",
|
|
{
|
|
type = "code_minor";
|
|
min = "absolute_axis.MT_TRACKING_ID";
|
|
max = "absolute_axis.MT_TRACKING_ID";
|
|
}
|
|
);
|
|
};
|
|
payload_zero = {
|
|
type = "payload";
|
|
min = 0;
|
|
max = 0;
|
|
};
|
|
payload_one = {
|
|
type = "payload";
|
|
min = 1;
|
|
max = 1;
|
|
};
|
|
payload_negative = {
|
|
type = "payload";
|
|
max = -1;
|
|
};
|
|
payload_nonnegative = {
|
|
type = "payload";
|
|
min = 0;
|
|
};
|
|
touch_start = {
|
|
type = "and";
|
|
args = ["touch_tracking_id", "payload_nonnegative"];
|
|
};
|
|
touch_end = {
|
|
type = "and";
|
|
args = ["touch_tracking_id", "payload_negative"];
|
|
};
|
|
touch_held = {
|
|
type = "accept";
|
|
inverted = 1;
|
|
};
|
|
};
|
|
|
|
nodes = {
|
|
stdin = {
|
|
type = "getchar";
|
|
options = {
|
|
namespace = "namespaces.stdin";
|
|
};
|
|
};
|
|
print = {
|
|
type = "print";
|
|
options = {};
|
|
};
|
|
clickpad = {
|
|
type = "evdev";
|
|
options = {
|
|
file = "/dev/input/event7";
|
|
namespace = "namespaces.clickpad";
|
|
// grab = 1;
|
|
};
|
|
};
|
|
select_key_events = {
|
|
type = "router";
|
|
options = {
|
|
predicates = (
|
|
"key_event",
|
|
{
|
|
type = "or";
|
|
inverted = 1;
|
|
args = ["key_event"];
|
|
},
|
|
"touch_start",
|
|
"touch_end"
|
|
);
|
|
};
|
|
};
|
|
set_modifier = {
|
|
type = "modifiers";
|
|
options = {
|
|
operation = "set";
|
|
modifiers = ["my_modifier"];
|
|
};
|
|
};
|
|
update_touch_held = {
|
|
type = "modify_predicate";
|
|
options = {
|
|
target = "touch_held";
|
|
uninvert_on = {type: "and", args: ["btn_touch_event", "payload_one"]};
|
|
invert_on = {type: "and", args: ["btn_touch_event", "payload_zero"]};
|
|
};
|
|
};
|
|
while_touch_held = {
|
|
type = "router";
|
|
options = {
|
|
predicates = ["touch_held"];
|
|
};
|
|
};
|
|
uinput_output = {
|
|
type = "uinput";
|
|
options = {
|
|
name = "Resulting device";
|
|
enabled_codes = (
|
|
{major: "event_type.KEY"; minor: "button_event.LEFT"}
|
|
,
|
|
{major: "event_type.KEY"; minor: "button_event.RIGHT"}
|
|
,
|
|
{major: "event_type.ABS"; minor: "absolute_axis.X"; data: {minimum: 0; maximum: 3200; resolution: 0}}
|
|
);
|
|
};
|
|
};
|
|
set_one = {
|
|
type = "assign";
|
|
options = {
|
|
payload = 1;
|
|
};
|
|
};
|
|
count_touches = {
|
|
// This exact usecase may be implemented using events like button_event.TOOL_DOUBLETAP, button_event.TOOL_TRIPLETAP, button_event.TOOL_QUADTAP, button_event.TOOL_QUINTTAP
|
|
type = "integrate";
|
|
};
|
|
set_variable_num_touches = {
|
|
type = "assign";
|
|
options = {
|
|
namespace = "namespaces.variable";
|
|
major = "variables.num_touches";
|
|
minor = 0;
|
|
};
|
|
};
|
|
};
|
|
|
|
channels = ({
|
|
from: ("stdin", 0);
|
|
to: ("select_key_events", 0);
|
|
}, {
|
|
from: ("clickpad", 0);
|
|
to: ("select_key_events", 1);
|
|
}, {
|
|
from: ("select_key_events", 0);
|
|
to: ("set_modifier", 0);
|
|
}, {
|
|
from: ("set_modifier", 0);
|
|
to: ("print", 0);
|
|
}, {
|
|
from: ("select_key_events", 1);
|
|
to: ("while_touch_held", 0);
|
|
}, {
|
|
from: ("while_touch_held", 0);
|
|
to: ("print", 1);
|
|
}, {
|
|
from: ("clickpad", 1);
|
|
to: ("update_touch_held", 0);
|
|
}, {
|
|
from: ("select_key_events", 2); // touch_start
|
|
to: ("set_one", 0);
|
|
}, {
|
|
from: ("set_one", 0);
|
|
to: ("count_touches", 0);
|
|
}, {
|
|
from: ("select_key_events", 3); // touch_end
|
|
to: ("count_touches", 1);
|
|
}, {
|
|
from: ("count_touches", 0);
|
|
to: ("set_variable_num_touches", 0);
|
|
}, {
|
|
from: ("set_variable_num_touches", 0);
|
|
to: ("print", 2);
|
|
});
|
|
|
|
// vim: ft=libconfig
|