mirror of
https://gitlab.freedesktop.org/libinput/libinput.git
synced 2026-02-04 22:10:25 +01:00
tools: allow limiting the axes in libinput analyse recording
Use --ignore ABS_X,ABS_Y or --only ABS_X,ABS_Y to ignore or limit to only a specific axis set. Especially for tablet devices with their multitudes of axes this makes analysing a particular set easier. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
e0813f4825
commit
509747c01b
1 changed files with 32 additions and 5 deletions
|
|
@ -52,7 +52,7 @@ def format_value(code, value):
|
|||
|
||||
|
||||
# The list of axes we want to track
|
||||
def is_tracked_axis(code):
|
||||
def is_tracked_axis(code, allowlist, denylist):
|
||||
if code.type in (libevdev.EV_KEY, libevdev.EV_SW, libevdev.EV_SYN):
|
||||
return False
|
||||
|
||||
|
|
@ -61,7 +61,10 @@ def is_tracked_axis(code):
|
|||
if libevdev.EV_ABS.ABS_MT_SLOT <= code <= libevdev.EV_ABS.ABS_MAX:
|
||||
return False
|
||||
|
||||
return True
|
||||
if allowlist:
|
||||
return code in allowlist
|
||||
else:
|
||||
return code not in denylist
|
||||
|
||||
|
||||
def main(argv):
|
||||
|
|
@ -71,7 +74,26 @@ def main(argv):
|
|||
parser.add_argument(
|
||||
"path", metavar="recording", nargs=1, help="Path to libinput-record YAML file"
|
||||
)
|
||||
parser.add_argument(
|
||||
"--ignore",
|
||||
metavar="ABS_X,ABS_Y,...",
|
||||
default="",
|
||||
help="A comma-separated list of axis names to ignore",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--only",
|
||||
metavar="ABS_X,ABS_Y,...",
|
||||
default="",
|
||||
help="A comma-separated list of axis names to print, ignoring all others",
|
||||
)
|
||||
|
||||
args = parser.parse_args()
|
||||
if args.ignore and args.only:
|
||||
print("Only one of --ignore and --only may be given", file=sys.stderr)
|
||||
sys.exit(2)
|
||||
|
||||
ignored_axes = [libevdev.evbit(axis) for axis in args.ignore.split(",") if axis]
|
||||
only_axes = [libevdev.evbit(axis) for axis in args.only.split(",") if axis]
|
||||
|
||||
yml = yaml.safe_load(open(args.path[0]))
|
||||
if yml["ndevices"] > 1:
|
||||
|
|
@ -101,7 +123,9 @@ def main(argv):
|
|||
"""
|
||||
used_axes = []
|
||||
for e in events:
|
||||
if e.code not in used_axes and is_tracked_axis(e.code):
|
||||
if e.code not in used_axes and is_tracked_axis(
|
||||
e.code, only_axes, ignored_axes
|
||||
):
|
||||
yield e.code
|
||||
used_axes.append(e.code)
|
||||
|
||||
|
|
@ -135,7 +159,7 @@ def main(argv):
|
|||
if e.code.type == libevdev.EV_KEY:
|
||||
keystate[e.code] = e.value
|
||||
keystate_changed = True
|
||||
elif is_tracked_axis(e.code):
|
||||
elif is_tracked_axis(e.code, only_axes, ignored_axes):
|
||||
current_frame[e.code] = e.value
|
||||
elif e.code == libevdev.EV_SYN.SYN_REPORT:
|
||||
fields = []
|
||||
|
|
@ -166,7 +190,10 @@ def main(argv):
|
|||
for evtype, evcodes in device["evdev"]["codes"].items():
|
||||
for c in evcodes:
|
||||
code = libevdev.evbit(int(evtype), int(c))
|
||||
if is_tracked_axis(code) and code not in axes_in_use:
|
||||
if (
|
||||
is_tracked_axis(code, only_axes, ignored_axes)
|
||||
and code not in axes_in_use
|
||||
):
|
||||
unused_axes.append(code)
|
||||
|
||||
if unused_axes:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue