mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-06 05:02:31 +00:00
selftests: hid: import hid-tools hid-ite tests
These tests have been developed in the hid-tools[0] tree for a while. Now that we have a proper selftests/hid kernel entry and that the tests are more reliable, it is time to directly include those in the kernel tree. [0] https://gitlab.freedesktop.org/libevdev/hid-tools Cc: Peter Hutterer <peter.hutterer@who-t.net> Cc: Roderick Colenbrander <roderick.colenbrander@sony.com> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Signed-off-by: Roderick Colenbrander <roderick.colenbrander@sony.com> Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
This commit is contained in:
parent
9898fa5665
commit
ff3b2228e3
@ -8,6 +8,7 @@ include ../../../scripts/Makefile.include
|
||||
TEST_PROGS := hid-core.sh
|
||||
TEST_PROGS += hid-apple.sh
|
||||
TEST_PROGS += hid-gamepad.sh
|
||||
TEST_PROGS += hid-ite.sh
|
||||
TEST_PROGS += hid-keyboard.sh
|
||||
TEST_PROGS += hid-mouse.sh
|
||||
TEST_PROGS += hid-multitouch.sh
|
||||
|
@ -23,5 +23,6 @@ CONFIG_UHID=y
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_HID=y
|
||||
CONFIG_HID_APPLE=y
|
||||
CONFIG_HID_ITE=y
|
||||
CONFIG_HID_MULTITOUCH=y
|
||||
CONFIG_HID_WACOM=y
|
||||
|
7
tools/testing/selftests/hid/hid-ite.sh
Executable file
7
tools/testing/selftests/hid/hid-ite.sh
Executable file
@ -0,0 +1,7 @@
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# Runs tests for the HID subsystem
|
||||
|
||||
export TARGET=test_ite_keyboard.py
|
||||
|
||||
bash ./run-hid-tools-tests.sh
|
166
tools/testing/selftests/hid/tests/test_ite_keyboard.py
Normal file
166
tools/testing/selftests/hid/tests/test_ite_keyboard.py
Normal file
@ -0,0 +1,166 @@
|
||||
#!/bin/env python3
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Copyright (c) 2020 Benjamin Tissoires <benjamin.tissoires@gmail.com>
|
||||
# Copyright (c) 2020 Red Hat, Inc.
|
||||
#
|
||||
|
||||
from .test_keyboard import ArrayKeyboard, TestArrayKeyboard
|
||||
from hidtools.util import BusType
|
||||
|
||||
import libevdev
|
||||
import logging
|
||||
|
||||
logger = logging.getLogger("hidtools.test.ite-keyboard")
|
||||
|
||||
KERNEL_MODULE = ("itetech", "hid_ite")
|
||||
|
||||
|
||||
class KbdData(object):
|
||||
pass
|
||||
|
||||
|
||||
# The ITE keyboards have an issue regarding the Wifi key:
|
||||
# nothing comes in when pressing the key, but we get a null
|
||||
# event on the key release.
|
||||
# This test covers this case.
|
||||
class ITEKeyboard(ArrayKeyboard):
|
||||
# fmt: off
|
||||
report_descriptor = [
|
||||
0x06, 0x85, 0xff, # Usage Page (Vendor Usage Page 0xff85)
|
||||
0x09, 0x95, # Usage (Vendor Usage 0x95) 3
|
||||
0xa1, 0x01, # Collection (Application) 5
|
||||
0x85, 0x5a, # .Report ID (90) 7
|
||||
0x09, 0x01, # .Usage (Vendor Usage 0x01) 9
|
||||
0x15, 0x00, # .Logical Minimum (0) 11
|
||||
0x26, 0xff, 0x00, # .Logical Maximum (255) 13
|
||||
0x75, 0x08, # .Report Size (8) 16
|
||||
0x95, 0x10, # .Report Count (16) 18
|
||||
0xb1, 0x00, # .Feature (Data,Arr,Abs) 20
|
||||
0xc0, # End Collection 22
|
||||
0x05, 0x01, # Usage Page (Generic Desktop) 23
|
||||
0x09, 0x06, # Usage (Keyboard) 25
|
||||
0xa1, 0x01, # Collection (Application) 27
|
||||
0x85, 0x01, # .Report ID (1) 29
|
||||
0x75, 0x01, # .Report Size (1) 31
|
||||
0x95, 0x08, # .Report Count (8) 33
|
||||
0x05, 0x07, # .Usage Page (Keyboard) 35
|
||||
0x19, 0xe0, # .Usage Minimum (224) 37
|
||||
0x29, 0xe7, # .Usage Maximum (231) 39
|
||||
0x15, 0x00, # .Logical Minimum (0) 41
|
||||
0x25, 0x01, # .Logical Maximum (1) 43
|
||||
0x81, 0x02, # .Input (Data,Var,Abs) 45
|
||||
0x95, 0x01, # .Report Count (1) 47
|
||||
0x75, 0x08, # .Report Size (8) 49
|
||||
0x81, 0x03, # .Input (Cnst,Var,Abs) 51
|
||||
0x95, 0x05, # .Report Count (5) 53
|
||||
0x75, 0x01, # .Report Size (1) 55
|
||||
0x05, 0x08, # .Usage Page (LEDs) 57
|
||||
0x19, 0x01, # .Usage Minimum (1) 59
|
||||
0x29, 0x05, # .Usage Maximum (5) 61
|
||||
0x91, 0x02, # .Output (Data,Var,Abs) 63
|
||||
0x95, 0x01, # .Report Count (1) 65
|
||||
0x75, 0x03, # .Report Size (3) 67
|
||||
0x91, 0x03, # .Output (Cnst,Var,Abs) 69
|
||||
0x95, 0x06, # .Report Count (6) 71
|
||||
0x75, 0x08, # .Report Size (8) 73
|
||||
0x15, 0x00, # .Logical Minimum (0) 75
|
||||
0x26, 0xff, 0x00, # .Logical Maximum (255) 77
|
||||
0x05, 0x07, # .Usage Page (Keyboard) 80
|
||||
0x19, 0x00, # .Usage Minimum (0) 82
|
||||
0x2a, 0xff, 0x00, # .Usage Maximum (255) 84
|
||||
0x81, 0x00, # .Input (Data,Arr,Abs) 87
|
||||
0xc0, # End Collection 89
|
||||
0x05, 0x0c, # Usage Page (Consumer Devices) 90
|
||||
0x09, 0x01, # Usage (Consumer Control) 92
|
||||
0xa1, 0x01, # Collection (Application) 94
|
||||
0x85, 0x02, # .Report ID (2) 96
|
||||
0x19, 0x00, # .Usage Minimum (0) 98
|
||||
0x2a, 0x3c, 0x02, # .Usage Maximum (572) 100
|
||||
0x15, 0x00, # .Logical Minimum (0) 103
|
||||
0x26, 0x3c, 0x02, # .Logical Maximum (572) 105
|
||||
0x75, 0x10, # .Report Size (16) 108
|
||||
0x95, 0x01, # .Report Count (1) 110
|
||||
0x81, 0x00, # .Input (Data,Arr,Abs) 112
|
||||
0xc0, # End Collection 114
|
||||
0x05, 0x01, # Usage Page (Generic Desktop) 115
|
||||
0x09, 0x0c, # Usage (Wireless Radio Controls) 117
|
||||
0xa1, 0x01, # Collection (Application) 119
|
||||
0x85, 0x03, # .Report ID (3) 121
|
||||
0x15, 0x00, # .Logical Minimum (0) 123
|
||||
0x25, 0x01, # .Logical Maximum (1) 125
|
||||
0x09, 0xc6, # .Usage (Wireless Radio Button) 127
|
||||
0x95, 0x01, # .Report Count (1) 129
|
||||
0x75, 0x01, # .Report Size (1) 131
|
||||
0x81, 0x06, # .Input (Data,Var,Rel) 133
|
||||
0x75, 0x07, # .Report Size (7) 135
|
||||
0x81, 0x03, # .Input (Cnst,Var,Abs) 137
|
||||
0xc0, # End Collection 139
|
||||
0x05, 0x88, # Usage Page (Vendor Usage Page 0x88) 140
|
||||
0x09, 0x01, # Usage (Vendor Usage 0x01) 142
|
||||
0xa1, 0x01, # Collection (Application) 144
|
||||
0x85, 0x04, # .Report ID (4) 146
|
||||
0x19, 0x00, # .Usage Minimum (0) 148
|
||||
0x2a, 0xff, 0xff, # .Usage Maximum (65535) 150
|
||||
0x15, 0x00, # .Logical Minimum (0) 153
|
||||
0x26, 0xff, 0xff, # .Logical Maximum (65535) 155
|
||||
0x75, 0x08, # .Report Size (8) 158
|
||||
0x95, 0x02, # .Report Count (2) 160
|
||||
0x81, 0x02, # .Input (Data,Var,Abs) 162
|
||||
0xc0, # End Collection 164
|
||||
0x05, 0x01, # Usage Page (Generic Desktop) 165
|
||||
0x09, 0x80, # Usage (System Control) 167
|
||||
0xa1, 0x01, # Collection (Application) 169
|
||||
0x85, 0x05, # .Report ID (5) 171
|
||||
0x19, 0x81, # .Usage Minimum (129) 173
|
||||
0x29, 0x83, # .Usage Maximum (131) 175
|
||||
0x15, 0x00, # .Logical Minimum (0) 177
|
||||
0x25, 0x01, # .Logical Maximum (1) 179
|
||||
0x95, 0x08, # .Report Count (8) 181
|
||||
0x75, 0x01, # .Report Size (1) 183
|
||||
0x81, 0x02, # .Input (Data,Var,Abs) 185
|
||||
0xc0, # End Collection 187
|
||||
]
|
||||
# fmt: on
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
rdesc=report_descriptor,
|
||||
name=None,
|
||||
input_info=(BusType.USB, 0x06CB, 0x2968),
|
||||
):
|
||||
super().__init__(rdesc, name, input_info)
|
||||
|
||||
def event(self, keys, reportID=None, application=None):
|
||||
application = application or "Keyboard"
|
||||
return super().event(keys, reportID, application)
|
||||
|
||||
|
||||
class TestITEKeyboard(TestArrayKeyboard):
|
||||
kernel_modules = [KERNEL_MODULE]
|
||||
|
||||
def create_device(self):
|
||||
return ITEKeyboard()
|
||||
|
||||
def test_wifi_key(self):
|
||||
uhdev = self.uhdev
|
||||
syn_event = self.syn_event
|
||||
|
||||
# the following sends a 'release' event on the Wifi key.
|
||||
# the kernel is supposed to translate this into Wifi key
|
||||
# down and up
|
||||
r = [0x03, 0x00]
|
||||
uhdev.call_input_event(r)
|
||||
expected = [syn_event]
|
||||
expected.append(libevdev.InputEvent(libevdev.EV_KEY.KEY_RFKILL, 1))
|
||||
events = uhdev.next_sync_events()
|
||||
self.debug_reports([r], uhdev, events)
|
||||
self.assertInputEventsIn(expected, events)
|
||||
|
||||
expected = [syn_event]
|
||||
expected.append(libevdev.InputEvent(libevdev.EV_KEY.KEY_RFKILL, 0))
|
||||
# the kernel sends the two down/up key events in a batch, no need to
|
||||
# call events = uhdev.next_sync_events()
|
||||
self.debug_reports([], uhdev, events)
|
||||
self.assertInputEventsIn(expected, events)
|
Loading…
Reference in New Issue
Block a user