2019-08-12 12:34:37 +00:00
|
|
|
To create a new umockdev test, you should:
|
|
|
|
|
|
|
|
1. Decide on what to test, the easiest case is just using the existing
|
|
|
|
capture test case.
|
|
|
|
2. Find the USB device you are testing with lsusb, e.g.:
|
|
|
|
Bus 001 Device 005: ID 138a:0090 Validity Sensors, Inc. VFS7500 Touch Fingerprint Sensor
|
|
|
|
This means we need to record USB device /dev/bus/usb/001/005
|
|
|
|
3. Run "umockdev-record /dev/bus/usb/001/005 >device"
|
|
|
|
This records the information about device, it should be placed into test/DRIVER/device
|
|
|
|
4. Run the test, for a capture test this would be:
|
|
|
|
umockdev-record -i /dev/bus/usb/001/005=capture.ioctl -- ./capture.py capture.png
|
|
|
|
This will create a capture.ioctl and capture.png file.
|
2019-08-12 14:30:40 +00:00
|
|
|
Please set the FP_DEVICE_EMULATION=1 environment variable. You may need
|
|
|
|
to adjust the driver to adapt to the emulated environment (mainly if it
|
|
|
|
uses random numbers, see synaptics.c for an example).
|
2019-08-12 12:34:37 +00:00
|
|
|
5. Place all files into the driver subdirectory test/DRIVER,
|
|
|
|
i.e. device, capture.ioctl, capture.png
|
|
|
|
6. Add glue to meson.build
|
|
|
|
7. Test whether everything works as expected
|
|
|
|
|
|
|
|
Please note, there is no need to use a real finger print in this case. If
|
|
|
|
you would like to avoid submitting your own fingerprint then please just
|
|
|
|
use e.g. the side of your finger, arm, or anything else that will produce
|
2020-01-07 12:45:33 +00:00
|
|
|
an image with the device.
|
|
|
|
|
|
|
|
|
|
|
|
Note that umockdev-record groups URBs aggressively. In most cases, manual
|
|
|
|
intervention is unfortunately required. In most cases, drivers do a chain
|
|
|
|
of commands like e.g. A then B each with a different reply. Umockdev will
|
|
|
|
create a file like:
|
|
|
|
|
|
|
|
A
|
|
|
|
reply 1
|
|
|
|
reply 2
|
|
|
|
B
|
|
|
|
reply 1
|
|
|
|
reply 2
|
|
|
|
|
|
|
|
which then needs to be re-ordered to be:
|
|
|
|
|
|
|
|
A
|
|
|
|
reply 1
|
|
|
|
B
|
|
|
|
reply 1
|
|
|
|
A
|
|
|
|
reply 2
|
|
|
|
B
|
|
|
|
reply 2
|
|
|
|
|
|
|
|
Other changes may be needed to get everything working. For example the elan
|
|
|
|
driver relies on a timeout that is not reported correctly. In this case the
|
|
|
|
driver works around it by interpreting the protocol error differently in
|
|
|
|
the virtual environment.
|