Add driver for SecuGen Hamster Pro 20

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
This commit is contained in:
Jared Vacanti 2026-06-03 13:30:44 -05:00 committed by Marco Trevisan (Treviño)
parent 732dbe855e
commit 5b34908a21
8 changed files with 2452 additions and 0 deletions

View file

@ -265,6 +265,11 @@ usb:v2541pFA03*
ID_AUTOSUSPEND=1
ID_PERSIST=0
# Supported by libfprint driver secugen
usb:v1162p2200*
ID_AUTOSUSPEND=1
ID_PERSIST=0
# Supported by libfprint driver synaptics
usb:v06CBp00BD*
usb:v06CBp00C2*

2125
libfprint/drivers/secugen.c Normal file

File diff suppressed because it is too large Load diff

View file

@ -155,6 +155,8 @@ driver_sources = {
[ 'drivers/realtek/realtek.c' ],
'focaltech_moc' :
[ 'drivers/focaltech_moc/focaltech_moc.c' ],
'secugen' :
[ 'drivers/secugen.c' ],
}
helper_sources = {

View file

@ -145,6 +145,7 @@ default_drivers = [
'fpcmoc',
'realtek',
'focaltech_moc',
'secugen',
]
spi_drivers = [

View file

@ -60,6 +60,7 @@ drivers_tests = [
'realtek',
'realtek-5816',
'focaltech_moc',
'secugen',
]
if get_option('introspection')

Binary file not shown.

BIN
tests/secugen/capture.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

318
tests/secugen/device Normal file

File diff suppressed because one or more lines are too long