Add support for the SecuGen Hamster Pro 20 (1162:2200), a 500 DPI press-type optical scanner built around the SIDO020A sensor. The protocol was reverse-engineered from USB packet captures. The sensor is configured over I2C-tunneled vendor control transfers and streams 956x688 raw frames over the bulk endpoint, read in 64KB chunks so the standard pcap-based test tooling can record full frames (the kernel usbmon interface truncates single URBs at ring_size/5). Frames are processed with band compensation, an edge-aware unsharp mask, a fixed-point bilinear downsample to 300x400, flat-field blending and directional sharpening, driven by per-device factory calibration data read from the device firmware. The fixed-point pipeline keeps the output bit-identical across compilers and architectures for the image comparison test. The sensor has no proximity hardware and its GET_STATUS request always returns zeros, so finger presence is detected by polling preview frames and comparing the mean brightness of the central region against a calibration background frame. Includes a umockdev capture/replay test with a reference image. Closes: https://gitlab.freedesktop.org/libfprint/libfprint/-/work_items/353 |
||
|---|---|---|
| .. | ||
| aes2501 | ||
| aes3500 | ||
| egis0570 | ||
| egis_etu905 | ||
| egismoc | ||
| egismoc-05a1 | ||
| egismoc-0586 | ||
| egismoc-0587 | ||
| elan | ||
| elan-cobo | ||
| elanmoc | ||
| elanspi | ||
| focaltech_moc | ||
| fpcmoc | ||
| goodixmoc | ||
| nb1010 | ||
| realtek | ||
| realtek-5816 | ||
| secugen | ||
| synaptics | ||
| upektc_img | ||
| upektc_img-tcs1s | ||
| uru4000-4500 | ||
| uru4000-msv2 | ||
| vfs0050 | ||
| vfs301 | ||
| vfs5011 | ||
| vfs7552 | ||
| capture.py | ||
| create-driver-test.py.in | ||
| driver.test.in | ||
| hwdb-check-unsupported.py | ||
| libfprint.supp | ||
| meson.build | ||
| README.md | ||
| test-device-fake.c | ||
| test-device-fake.h | ||
| test-fp-context.c | ||
| test-fp-device.c | ||
| test-fpi-assembling.c | ||
| test-fpi-device.c | ||
| test-fpi-ssm.c | ||
| test-generated-hwdb.sh | ||
| test-utils.c | ||
| test-utils.h | ||
| test.in | ||
| umockdev-test.py | ||
| unittest_inspector.py | ||
| valgrind-python.supp | ||
| virtual-device.py | ||
| virtual-image.py | ||
umockdev Tests
umockdev tests use fingerprint devices mocked by umockdev
toolchain.
This document describes how to create test cases (for USB devices). Many of these tests are tests for image devices, where a single image is captured and stored.
Other kinds of umockdev tests can be created in a similar manner. For
match-on-chip devices you would instead create a test specific custom.py
script, capture it and store the capture to custom.pcapng.
'capture' and 'custom' Test Creation
For image devices the capture.py script will be used to capture one reference
image. If the driver is a non-image driver, then a custom.py script should be
created in advance, which will be run instead.
-
Make sure that libfprint is built with support for the device driver that you want to create a test case for.
-
From the build directory, run tests/create-driver-test.py as root. Note that if you're capturing data for a driver which already has a test case but the hardware is slightly different, you might want to pass a variant name as a command-line options, for example:
$ sudo tests/create-driver-test.py driver [variant]
-
If the capture is not successful, run the tool again to start another capture.
-
Add driver test name to
drivers_testsin themeson.build, as instructed, and change the ownership of the just-created test directory in the source. -
Check whether
meson testpasses with this new test.
Note. To avoid submitting a real fingerprint when creating a 'capture' test, the side of finger, arm, or anything else producing an image with the device can be used.
Possible Issues
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 (by means of
FP_DEVICE_EMULATION environment variable).