From: Benjamin Tissoires <bentiss@kernel.org>
To: Jiri Kosina <jikos@kernel.org>,
Benjamin Tissoires <benjamin.tissoires@redhat.com>,
Shuah Khan <shuah@kernel.org>,
Peter Hutterer <peter.hutterer@who-t.net>
Cc: linux-input@vger.kernel.org, linux-kselftest@vger.kernel.org,
linux-kernel@vger.kernel.org,
Benjamin Tissoires <bentiss@kernel.org>
Subject: [PATCH v2 12/15] selftests/hid: tablets: add a secondary barrel switch test
Date: Wed, 06 Dec 2023 11:46:03 +0100 [thread overview]
Message-ID: <20231206-wip-selftests-v2-12-c0350c2f5986@kernel.org> (raw)
In-Reply-To: <20231206-wip-selftests-v2-0-c0350c2f5986@kernel.org>
Some tablets report 2 barrel switches. We better test those too.
Use the same transistions description from the primary button tests.
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
Signed-off-by: Benjamin Tissoires <bentiss@kernel.org>
---
no changes in v2
---
tools/testing/selftests/hid/tests/test_tablet.py | 67 ++++++++++++++++++++++++
1 file changed, 67 insertions(+)
diff --git a/tools/testing/selftests/hid/tests/test_tablet.py b/tools/testing/selftests/hid/tests/test_tablet.py
index 20a7a7fdcd9d..a82db66264c5 100644
--- a/tools/testing/selftests/hid/tests/test_tablet.py
+++ b/tools/testing/selftests/hid/tests/test_tablet.py
@@ -366,6 +366,56 @@ class PenState(Enum):
),
}
+ @staticmethod
+ def legal_transitions_with_secondary_button() -> Dict[str, Tuple["PenState", ...]]:
+ """We revisit the Windows Pen Implementation state machine:
+ we now have a secondary button.
+ Note: we don't looks for 2 buttons interactions.
+ """
+ return {
+ "hover-button": (PenState.PEN_IS_IN_RANGE_WITH_SECOND_BUTTON,),
+ "hover-button -> out-of-range": (
+ PenState.PEN_IS_IN_RANGE_WITH_SECOND_BUTTON,
+ PenState.PEN_IS_OUT_OF_RANGE,
+ ),
+ "in-range -> button-press": (
+ PenState.PEN_IS_IN_RANGE,
+ PenState.PEN_IS_IN_RANGE_WITH_SECOND_BUTTON,
+ ),
+ "in-range -> button-press -> button-release": (
+ PenState.PEN_IS_IN_RANGE,
+ PenState.PEN_IS_IN_RANGE_WITH_SECOND_BUTTON,
+ PenState.PEN_IS_IN_RANGE,
+ ),
+ "in-range -> touch -> button-press -> button-release": (
+ PenState.PEN_IS_IN_RANGE,
+ PenState.PEN_IS_IN_CONTACT,
+ PenState.PEN_IS_IN_CONTACT_WITH_SECOND_BUTTON,
+ PenState.PEN_IS_IN_CONTACT,
+ ),
+ "in-range -> touch -> button-press -> release -> button-release": (
+ PenState.PEN_IS_IN_RANGE,
+ PenState.PEN_IS_IN_CONTACT,
+ PenState.PEN_IS_IN_CONTACT_WITH_SECOND_BUTTON,
+ PenState.PEN_IS_IN_RANGE_WITH_SECOND_BUTTON,
+ PenState.PEN_IS_IN_RANGE,
+ ),
+ "in-range -> button-press -> touch -> release -> button-release": (
+ PenState.PEN_IS_IN_RANGE,
+ PenState.PEN_IS_IN_RANGE_WITH_SECOND_BUTTON,
+ PenState.PEN_IS_IN_CONTACT_WITH_SECOND_BUTTON,
+ PenState.PEN_IS_IN_RANGE_WITH_SECOND_BUTTON,
+ PenState.PEN_IS_IN_RANGE,
+ ),
+ "in-range -> button-press -> touch -> button-release -> release": (
+ PenState.PEN_IS_IN_RANGE,
+ PenState.PEN_IS_IN_RANGE_WITH_SECOND_BUTTON,
+ PenState.PEN_IS_IN_CONTACT_WITH_SECOND_BUTTON,
+ PenState.PEN_IS_IN_CONTACT,
+ PenState.PEN_IS_IN_RANGE,
+ ),
+ }
+
@staticmethod
def tolerated_transitions() -> Dict[str, Tuple["PenState", ...]]:
"""This is not adhering to the Windows Pen Implementation state machine
@@ -444,6 +494,7 @@ class Pen(object):
self.width = 10
self.height = 10
self.barrelswitch = False
+ self.secondarybarrelswitch = False
self.invert = False
self.eraser = False
self.xtilt = 1
@@ -736,6 +787,22 @@ class BaseTest:
"""Rework the transition state machine by adding the primary button."""
self._test_states(state_list, scribble)
+ @pytest.mark.skip_if_uhdev(
+ lambda uhdev: "Secondary Barrel Switch" not in uhdev.fields,
+ "Device not compatible, missing Secondary Barrel Switch usage",
+ )
+ @pytest.mark.parametrize("scribble", [True, False], ids=["scribble", "static"])
+ @pytest.mark.parametrize(
+ "state_list",
+ [
+ pytest.param(v, id=k)
+ for k, v in PenState.legal_transitions_with_secondary_button().items()
+ ],
+ )
+ def test_valid_secondary_button_pen_states(self, state_list, scribble):
+ """Rework the transition state machine by adding the secondary button."""
+ self._test_states(state_list, scribble)
+
@pytest.mark.skip_if_uhdev(
lambda uhdev: "Invert" not in uhdev.fields,
"Device not compatible, missing Invert usage",
--
2.41.0
next prev parent reply other threads:[~2023-12-06 10:46 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-12-06 10:45 [PATCH v2 00/15] selftests/hid: tablets fixes Benjamin Tissoires
2023-12-06 10:45 ` [PATCH v2 01/15] selftests/hid: vmtest.sh: update vm2c and container Benjamin Tissoires
2023-12-06 10:45 ` [PATCH v2 02/15] selftests/hid: vmtest.sh: allow finer control on the build steps Benjamin Tissoires
2023-12-06 10:45 ` [PATCH v2 03/15] selftests/hid: base: allow for multiple skip_if_uhdev Benjamin Tissoires
2023-12-06 10:45 ` [PATCH v2 04/15] selftests/hid: tablets: remove unused class Benjamin Tissoires
2023-12-06 10:45 ` [PATCH v2 05/15] selftests/hid: tablets: move the transitions to PenState Benjamin Tissoires
2023-12-06 10:45 ` [PATCH v2 06/15] selftests/hid: tablets: move move_to function to PenDigitizer Benjamin Tissoires
2023-12-06 10:45 ` [PATCH v2 07/15] selftests/hid: tablets: do not set invert when the eraser is used Benjamin Tissoires
2023-12-06 10:45 ` [PATCH v2 08/15] selftests/hid: tablets: set initial data for tilt/twist Benjamin Tissoires
2023-12-06 10:46 ` [PATCH v2 09/15] selftests/hid: tablets: define the elements of PenState Benjamin Tissoires
2023-12-06 10:46 ` [PATCH v2 10/15] selftests/hid: tablets: add variants of states with buttons Benjamin Tissoires
2023-12-06 10:46 ` [PATCH v2 11/15] selftests/hid: tablets: convert the primary button tests Benjamin Tissoires
2023-12-06 10:46 ` Benjamin Tissoires [this message]
2023-12-06 10:46 ` [PATCH v2 13/15] selftests/hid: tablets: be stricter for some transitions Benjamin Tissoires
2023-12-06 10:46 ` [PATCH v2 14/15] selftests/hid: fix mypy complains Benjamin Tissoires
2023-12-06 10:46 ` [PATCH v2 15/15] selftests/hid: fix ruff linter complains Benjamin Tissoires
2023-12-06 23:32 ` [PATCH v2 00/15] selftests/hid: tablets fixes Jiri Kosina
2023-12-07 8:53 ` Benjamin Tissoires
2023-12-07 8:56 ` Benjamin Tissoires
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20231206-wip-selftests-v2-12-c0350c2f5986@kernel.org \
--to=bentiss@kernel.org \
--cc=benjamin.tissoires@redhat.com \
--cc=jikos@kernel.org \
--cc=linux-input@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=peter.hutterer@who-t.net \
--cc=shuah@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).