hid-tools: how to reply to output report?
Silvan Jegen
me at sillymon.ch
Sat Apr 9 14:19:56 UTC 2022
Hi
Not sure this is the right list to ask but I have a question regarding
the hid-tools code at https://gitlab.freedesktop.org/libevdev/hid-tools.
To familiarise myself with USB HID development (out of personal interest)
I thought I would try add tests for the hid-nintendo kernel driver there. You
can find the (non-working) code at the link below.
https://git.sr.ht/~shugyousha/hid-tools
I am currently stuck trying to get the uhid device setup for testing. Here
is the relevant error:
______ ERROR at setup of TestNintendoSwitchProControllerUSB.test_buttons _______
self = <tests.test_nintendo.TestNintendoSwitchProControllerUSB object at 0x7f02dc730970>
new_uhdev = <hidtools.device.nintendo_gamepad.NintendoSwitchProControllerUSB object at 0x7f02dc785f90>
request = <SubRequest 'context' for <Function test_buttons>>
@pytest.fixture(autouse=True)
def context(self, new_uhdev, request):
try:
with HIDTestUdevRule.instance():
with new_uhdev as self.uhdev:
skip_cond = request.node.get_closest_marker('skip_if_uhdev')
if skip_cond:
test, message, *rest = skip_cond.args
if test(self.uhdev):
pytest.skip(message)
self.uhdev.create_kernel_device()
now = time.time()
while not self.uhdev.is_ready() and time.time() - now < 5:
self.uhdev.dispatch(10)
> assert self.uhdev.get_evdev() is not None
E AssertionError
My current assumption is that this is due to the hid-nintendo driver
failing to initialise the uhid "nintendo switch pro controller" I am
creating for testing. I get the following errors from the driver.
[ 211.681416] nintendo 0003:057E:2009.0006: failed reading SPI flash; ret=-110
[ 211.681423] nintendo 0003:057E:2009.0006: Failed to read left stick cal, using dflts; e=-110
[ 213.707716] nintendo 0003:057E:2009.0006: failed reading SPI flash; ret=-110
[ 213.707723] nintendo 0003:057E:2009.0006: Failed to read right stick cal, using dflts; e=-110
[ 215.734417] nintendo 0003:057E:2009.0006: failed reading SPI flash; ret=-110
[ 215.734424] nintendo 0003:057E:2009.0006: using factory cal for IMU
[ 217.761734] nintendo 0003:057E:2009.0006: failed reading SPI flash; ret=-110
[ 217.761741] nintendo 0003:057E:2009.0006: Failed to read IMU cal, using defaults; ret=-110
[ 217.761743] nintendo 0003:057E:2009.0006: Unable to read IMU calibration data
[ 219.787994] nintendo 0003:057E:2009.0006: Failed to set report mode; ret=-110
[ 219.788161] nintendo 0003:057E:2009.0006: probe - fail = -110
[ 219.788172] nintendo: probe of 0003:057E:2009.0006 failed with error -110
From what I can tell, the hid-nintendo driver is sending an USB HID
output report[0] to the uhid driver and then expects to get a certain
input report back that never arrives, resulting in the timeout error
-110[1]. The reason for the timeout (I think) is that my uhid device
doesn't send the report back that the hid-nintendo driver expects. The
timeout causes a failure in probe, which I assume results in the input
nodes not being created for my uhid device (this is the reason for the
AssertionError above).
Does somebody know how can I send the expected reply to the output report
from my uhid device back to the hid-nintendo driver?
Any pointers are highly appreciated!
Cheers,
Silvan
[0] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/hid/hid-nintendo.c?h=v5.17#n2216
[1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/hid/hid-nintendo.c?h=v5.17#n591
More information about the Input-tools
mailing list