mirror of
https://gitlab.freedesktop.org/libfprint/libfprint.git
synced 2026-05-11 11:58:11 +02:00
Add core fingerprint operations: enrollment, verification, identification, print listing, print deletion, and storage clearing. New files: - validity_db.h/c: On-chip template database operations — command builders for all DB commands (0x45-0x4B, 0x47-0x48, 0x51, 0x5E, 0x60, 0x62, 0x63, 0x64, 0x68, 0x69, 0x6B), response parsers for DB info/user storage/user/ record value/record children/new record ID, identity builder (UUID→VCSFW binary), finger data builder, and db_write_enable blob accessor. - validity_enroll.c: 31-state enrollment SSM with interrupt-driven finger detection (EP 0x83), capture command orchestration via build_cmd_02(), enrollment session management (create/update/commit), DB record creation (user + finger), and LED glow feedback. - validity_verify.c: 17-state verify/identify SSM with match command dispatching (cmd 0x5E for verify, cmd 0x60 for identify), 6-state list SSM for enumerating enrolled prints via GPtrArray, 8-state delete SSM, and clear_storage stub. Modified files: - validity.h: Added DB header include, 5 new state enums (CalibState, EnrollState, VerifyState, ListState, DeleteState), new struct fields for enrollment/verification/list/delete state, function declarations. - validity.c: Replaced all operation stubs with real implementations, added cleanup for new fields in dev_close, wired all FpDevice methods. - meson.build: Added 3 new source files to driver. - tests/meson.build: Added test-validity-db executable. - tests/validity/custom.py: Updated feature assertions (STORAGE, STORAGE_LIST, STORAGE_CLEAR now enabled). Tests: 29 new unit tests in test-validity-db.c covering all command builders, response parsers, identity/finger data builders, and blob accessor. All 37 tests pass (0 fail, 2 skip).
47 lines
1.3 KiB
Python
47 lines
1.3 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
|
|
# Iteration 6 added enroll, verify, identify, list, delete, clear_storage.
|
|
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 d.has_feature(FPrint.DeviceFeature.STORAGE)
|
|
assert d.has_feature(FPrint.DeviceFeature.STORAGE_LIST)
|
|
assert d.has_feature(FPrint.DeviceFeature.STORAGE_DELETE)
|
|
assert 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
|