Re: [PATCH v3 5/7] HID: hid-lenovo-go: normalize calibration failure status
From: Aditya Dash
Date: Sat Sep 05 2026 - 02:12:38 EST
Hi Derek,
The Stop reply changes based on calibration state. Its status appears to be
the current failure_mask + 1. However, this mask does not always match the
failure mask returned when calibration times out.
Here are some requests and responses from the experiments done:
Joystick calibration:
Left Start:
05 00 0c 04 03 01 ...
Left Stop:
05 00 0c 04 03 02 ...
No movement:
Without Stop:
04 00 a0 02 03 02 02 07 00 ...
With Stop:
04 00 a0 02 03 02 06 00 00 ...
The timeout error contains deflection 0x01, center 0x02, and turns 0x04.
Stop does not set the center bit, giving mask 0x05 and status 0x06.
One full outer turn, returned to center:
Without Stop:
04 00 a0 02 03 02 02 06 00 ...
With Stop:
04 00 a0 02 03 02 05 00 00 ...
The timeout error contains center 0x02 and turns 0x04. Stop does not set the
center bit, giving mask 0x04 and status 0x05.
One full outer turn, then held away from center (right controller):
Without Stop:
04 00 a0 02 04 02 02 06 00 ...
With Stop:
04 00 a0 02 04 02 07 00 00 ...
Two full outer turns, then held away from center:
Without Stop:
04 00 a0 02 03 02 02 02 00 ...
With Stop:
04 00 a0 02 03 02 03 00 00 ...
Stop with no calibration running:
04 00 a0 02 03 02 08 00 00 ...
Trigger calibration:
Start:
05 00 0a 04 03 01 ...
Stop:
05 00 0a 04 03 02 ...
One full press and release:
Without Stop:
04 00 a0 02 03 03 02 00 06 ...
With Stop:
04 00 a0 02 03 03 05 00 00 ...
The nonzero timeout reason byte is 0x06: return 0x02 and press count 0x04.
Stop does not set the return bit, giving mask 0x04 and status 0x05.
Gyroscope calibration:
Start:
05 00 0e 06 03 01 ...
Stop:
05 00 0e 06 03 02 ...
Continuous movement:
Without Stop:
04 00 a0 02 03 01 02 01 00 ...
With Stop:
04 00 a0 02 03 01 02 02 00 ...
The reason changes from 0x0001 to 0x0002 although no connection change was
made. The cause of this discrepancy is not known.
Successful calibration responses were as expected. The corresponding cases
produced the same outcomes on the other controller where repeated.
Connection-change cases are not yet tested.
Thanks,
Aditya