mirror of
https://gitlab.freedesktop.org/libfprint/libfprint.git
synced 2026-05-11 11:58:11 +02:00
Add a new "validity" driver for Validity/Synaptics fingerprint sensors that use the VCSFW protocol (as opposed to BMKT). This is iteration 1 of a multi-phase effort to bring native libfprint support to these widely-deployed sensors found in ThinkPad T480/T480s/T580/X1 Carbon Gen6 and many other laptops. This initial iteration implements: - VCSFW command/response transport layer over USB bulk endpoints - GET_VERSION command parsing (firmware version, product ID, build) - Synchronous probe and async open/close state machines - Stub implementations for enroll/verify/identify (return NOT_SUPPORTED) - umockdev replay test with real hardware capture Supported USB IDs (VCSFW protocol): - 138a:0090 (Validity VFS7500) - 138a:0097 (Validity VFS5011) - 06cb:009a (Synaptics Metallica MIS Touch) - 138a:009d (Validity VFS7552) These were previously (incorrectly) claimed by the synaptics driver which uses the BMKT protocol.
48 lines
1.4 KiB
Python
48 lines
1.4 KiB
Python
#!/usr/bin/python3
|
|
|
|
import traceback
|
|
import sys
|
|
import gi
|
|
|
|
gi.require_version('FPrint', '2.0')
|
|
from gi.repository import FPrint
|
|
|
|
# Exit with error on any exception, including those happening in callbacks
|
|
sys.excepthook = lambda *args: (traceback.print_exception(*args), sys.exit(1))
|
|
|
|
c = FPrint.Context()
|
|
c.enumerate()
|
|
devices = c.get_devices()
|
|
|
|
assert len(devices) == 1, f"Expected 1 device, got {len(devices)}"
|
|
|
|
d = devices[0]
|
|
del devices
|
|
|
|
# Verify driver name
|
|
assert d.get_driver() == "validity", f"Expected 'validity', got '{d.get_driver()}'"
|
|
|
|
# Verify features detected by auto_initialize_features
|
|
# Since iteration 1 stubs provide verify/identify/delete function pointers,
|
|
# those features are reported even though they return NOT_SUPPORTED.
|
|
assert not d.has_feature(FPrint.DeviceFeature.CAPTURE)
|
|
assert d.has_feature(FPrint.DeviceFeature.VERIFY)
|
|
assert d.has_feature(FPrint.DeviceFeature.IDENTIFY)
|
|
assert not d.has_feature(FPrint.DeviceFeature.DUPLICATES_CHECK)
|
|
assert not d.has_feature(FPrint.DeviceFeature.STORAGE)
|
|
assert not d.has_feature(FPrint.DeviceFeature.STORAGE_LIST)
|
|
assert d.has_feature(FPrint.DeviceFeature.STORAGE_DELETE)
|
|
assert not d.has_feature(FPrint.DeviceFeature.STORAGE_CLEAR)
|
|
assert d.has_feature(FPrint.DeviceFeature.ALWAYS_ON)
|
|
|
|
# Test open (sends GET_VERSION, cmd 0x19, GET_FW_INFO) and close
|
|
print("opening")
|
|
d.open_sync()
|
|
print("open done")
|
|
|
|
print("closing")
|
|
d.close_sync()
|
|
print("close done")
|
|
|
|
del d
|
|
del c
|