Commit graph

1880 commits

Author SHA1 Message Date
Leonardo Francisco
6510bcb178 refactor(validity): inline one-liner SSM wrappers into switch cases
Remove single-caller send/recv wrapper functions that just build a
command buffer and call vcsfw_*_cmd_send or check status and call
fpi_ssm_next_state. Move their bodies directly into the SSM switch
cases to reduce indirection and code size (-579 lines net).

Files: verify.c (7), enroll.c (33), fwext.c (10), pair.c (16),
db.c (10 dead/single-caller functions removed).
Tests updated to call validity_pack_new directly.
2026-04-22 03:06:34 +00:00
Leonardo Francisco
0594fbf7d7 validity: Use FpiByteWriter/FpiByteReader via pack/unpack utilities
Add validity_pack.h with varargs helpers (validity_pack, validity_pack_new,
validity_unpack) that wrap FpiByteWriter/FpiByteReader for common
pack/unpack patterns, eliminating repetitive boilerplate.

Replace all manual FP_WRITE_UINT*/FP_READ_UINT* macros and direct
array-index byte manipulation across all 10 driver source files. Simple
cases use the new one-liner pack/unpack utilities; complex cases (loops,
TLV parsers, nested readers) use FpiByteWriter/FpiByteReader directly.
2026-04-22 03:06:34 +00:00
Leonardo Francisco
8441c98fc2 validity: address pipeline warning: Value stored to 'data' during its initialization is never read [deadcode.DeadStores] 2026-04-22 03:06:34 +00:00
Leonardo Francisco
162d66d7a4 validity: remove MR noise 2026-04-22 03:06:34 +00:00
Leonardo Francisco
78fcfd3cd4 tests: revise comments — remove debug-finding language and issue tracking
Drop 'Regression: Issue #N' / 'Bug #N' numbering, 'dead while loop',
'the old code', 'This catches the bug where' and similar changelog-style
language from test comments. Keep concise descriptions of what each test
validates. Also simplify data-loader test headers and the verify
interrupt comment.
2026-04-22 03:06:34 +00:00
Leonardo Francisco
812b534653 validity: fix verify/identify stuck on non-matching finger
The VERIFY_WAIT_MATCH_INT state only advanced the SSM on interrupt
types 3 (match) or 5 (no-match), looping back to read_again for any
other type. However, the sensor only sends a single interrupt after
match_finger (cmd 0x5E). If the interrupt type is anything other than
3 or 5, the driver waited forever for another interrupt that never
arrives, causing fprintd-verify to hang.

python-validity's reference implementation treats any interrupt type
!= 3 as 'finger not recognized' and skips cmd 0x60 (get_match_result),
going straight to cleanup (cmd 0x62).

Fix: on interrupt type 3 (match), advance to VERIFY_GET_RESULT as
before. On any other type, clear stale result data and jump directly
to VERIFY_CLEANUP, skipping the unnecessary cmd 0x60.
2026-04-22 03:06:34 +00:00
Leonardo Francisco
5cdabef0db validity: format code for consistency and readability 2026-04-22 03:06:34 +00:00
Leonardo Francisco
f35dd0322a validity: externalize proprietary blob data to runtime-loaded files
Remove ~400KB of compiled-in .inc blob files and replace with a runtime
data loader that reads HMAC-SHA256 verified .bin files from disk at
device open time.

New components:
- validity_data.h/c: Runtime data file loader with HMAC-SHA256 integrity
  verification. Searches /usr/share/libfprint/validity/ and
  /usr/local/share/libfprint/validity/ for per-device and common data
  files. Skipped entirely in emulation mode.

Changes to existing code:
- validity.c: New OPEN_LOAD_DATA SSM state loads device and common data
  files between firmware info reception and init sequence. Populates TLS
  key pointers from loaded data. Frees data stores on close.
- validity_hal.h/c: Simplified device_table to vid/pid/flash_layout only
  (all blob pointers and partition_sig removed from structs).
- validity_pair.c/h: Updated make_cert, build_partition_flash_cmd,
  build_tls_flash to take data parameters instead of using compiled-in
  arrays. Reset/DBE blob accessors use data store.
- validity_tls.c/h: Removed 4 static key arrays, added pointer fields
  to ValidityTlsState populated from loaded data.
- validity_db.c/h, validity_fwext.c/h: Updated get_write_enable_blob
  to take FpiDeviceValidity* and access data store.
- validity_enroll.c: Updated all 5 callers for new signatures.

Deleted files:
- validity_blobs_0090.inc, validity_blobs_0097.inc,
  validity_blobs_009a.inc, validity_blobs_009d.inc (~400KB)
- validity_pair_constants.inc (~6KB)

Tests (171 total, all passing):
- 15 data loader tests covering: empty store, double-free safety,
  valid/corrupt/too-small/nonexistent file loading, tag enum,
  load_device with missing dir/missing mandatory file/valid files/
  corrupt HMAC, load_common with missing/valid files, enroll
  db_write_enable accessor with empty and populated stores.
- All existing unit and integration tests updated and passing.

The data files are distributed separately via the
libfprint-validity-data package.
2026-04-22 03:06:34 +00:00
Leonardo Francisco
ef4beee574 validity: uncrustify 2026-04-22 03:06:34 +00:00
Leonardo Francisco
059096e1be Revert "validity: uncrustify"
This reverts commit eb520109c6.
2026-04-22 03:06:34 +00:00
Leonardo Francisco
cfeb5c9837 validity: uncrustify 2026-04-22 03:06:34 +00:00
Leonardo Francisco
8a8f1f817f validity: implement emulation mode for enroll, verify, identify, list, delete, and clear storage 2026-04-22 03:06:34 +00:00
Leonardo Francisco
0f5f454c7c Refactor code structure for improved readability and maintainability 2026-04-22 03:06:34 +00:00
Leonardo Francisco
65277fce2f Refactor Validity Driver Code for Improved Readability and Maintainability
- Introduced helper functions in validity_tls.c to encapsulate command sending and response handling for TLS flash read and handshake processes, reducing code duplication and enhancing clarity.
- Reorganized the validity_verify.c file by creating dedicated functions for each step in the verification process, including capture building, matching, and result retrieval, to streamline the state machine logic.
- Enhanced the delete and clear operations in validity_verify.c by modularizing the code into smaller functions, improving readability and maintainability.
- Updated the list operations in validity_verify.c to utilize helper functions for fetching user storage and user details, simplifying the state management.
- Overall, these changes aim to improve the structure of the code, making it easier to follow and modify in the future.
2026-04-22 03:06:34 +00:00
Leonardo Francisco
1971829873 validity: remove unused variable assignments in database and pairing command functions 2026-04-22 03:06:34 +00:00
Leonardo Francisco
22c92dc16d validity: fix log size format in validity_capture_build_cmd_02 2026-04-22 03:06:34 +00:00
Leonardo Francisco
b6db67476d validity: update hwdb-check-unsupported.py to filter out unsupported devices 2026-04-22 03:06:34 +00:00
Leonardo Francisco
4bf976c7b5 validity: fix code style (uncrustify) and test assertions
Apply uncrustify formatting to all validity driver and test files
to pass the CI test_indent check.

Fix two pre-existing test failures:
- test-validity-capture: LED command blobs are 125 bytes, not 128
- test-validity-enroll: add 2-byte length prefix to test data to
  match parser's expected format, fix empty-data assertion (parser
  returns FALSE for data_len < 2)

All 41 tests pass, 0 failures.
2026-04-22 03:06:34 +00:00
Leonardo Francisco
a486b58c5a validity: enrollment, verification & DB operations\n\nImplement the complete enrollment and verification flow for\nSynaptics VCSFW (Validity) fingerprint sensors:\n\n- Enrollment state machine: LED control, capture loop with\n scan_complete polling, enrollment_update_start/end cycle,\n template building across ~8-9 stages until TID is received\n- DB write phase: StgWindsor storage auto-creation (0x04b3),\n user record creation, finger record creation with proper\n write_enable/call_cleanups wrapping\n- Pre-enrollment cleanup: delete existing user records from\n sensor DB before re-enrolling (prevents 0x0526 errors)\n- Stale session cleanup: send enrollment_update_end before\n starting new enrollment to close interrupted sessions\n- Verification: match_finger command with proper response\n parsing, delete and clear_storage operations\n- Print data: FPI_PRINT_RAW with fpi-data GVariant containing\n user identity string\n- Capture fixes: TST instruction search bug (save patched_tst\n before key_line replacement), ENROLL vs IDENTIFY mode\n differences in capture command structure\n- TLS improvements: proper session state tracking, reconnect\n handling, extended response buffer management\n- Pairing: device certificate chain validation, Windows Hello\n compatible key exchange\n\nTested on 06cb:009a (Synaptics Metallica MIS Touch):\n- Fresh enrollment: completes in 7-9 stages\n- Re-enrollment: pre-cleanup deletes stale records, then enrolls\n- Verification: verify-match confirmed (3x consecutive)\n\nReference: python-validity by uunicorn" 2026-04-22 03:06:34 +00:00
Leonardo Francisco
94bbb5fa2c validity: Iteration 8 — Final Polish
Add init_hardcoded and init_clean_slate transmission to the open SSM.
Four new states (OPEN_SEND/RECV_INIT_HARDCODED, OPEN_SEND/RECV_INIT_
CLEAN_SLATE) between GET_FW_INFO and UPLOAD_FWEXT, matching the
python-validity send_init() flow. init_hardcoded is always sent;
clean_slate only when fwext is not loaded. Skipped in emulation mode.

Remove dead crt_hardcoded[] (420 bytes, G_GNUC_UNUSED) from
validity_tls.c — this CA cert data now lives exclusively in
validity_pair_constants.inc.

Expose enrollment response parser for unit testing:
- EnrollmentUpdateResult struct and ENROLLMENT_MAGIC_LEN moved to
  validity.h
- parse_enrollment_update_response() and enrollment_update_result_clear()
  no longer static

Remove in-tree doc/ directory — documentation lives in
../validity-artifacts/docs/.

Tests: 9 new enrollment parser test cases, 0 regressions.
Result: 41 OK, 0 Fail, 2 Skipped.
2026-04-22 03:06:34 +00:00
Leonardo Francisco
52606ccebc validity: Iteration 7 — Device Pairing & Hardware Abstraction Layer
Add HAL (validity_hal.h/c) with per-device lookup table for 4 PIDs
(0090, 0097, 009a, 009d). Each entry holds init_hardcoded, clean_slate,
reset_blob, db_write_enable blobs and a flash layout with partition
table + RSA signature.

Add device pairing SSM (validity_pair.h/c) — a 30-state machine that
runs as a child of the open SSM when the sensor has no TLS partitions.
Phases: raw USB keygen + partition flash, TLS handshake, erase 5
partitions, write 4096-byte TLS flash image, reboot.

Integration:
- OPEN_PAIR state in open SSM (between FWEXT and TLS_READ_FLASH)
- Skipped in emulation, no-fwext, or already-paired cases
- Post-reboot returns FP_DEVICE_ERROR_REMOVED for fprintd retry

Migration:
- validity_db.c and validity_fwext.c now use HAL lookups
- Removed hardcoded validity_blob_dbe_009a.inc

Tests: 24 new test cases (10 HAL + 14 pairing), 0 regressions.
Result: 40 OK, 0 Fail, 2 Skipped.
2026-04-22 03:06:34 +00:00
Leonardo Francisco
ae3f3a2479 validity: add 16 regression tests for Iter6 audit fixes
Adds test-validity-verify.c with 16 unit tests that prevent regression
of all 8 issues found during the Iteration 6 code audit (b05657f):

  R1: parse_match_result TLV parsing (5 tests)
    - valid payload with all fields extracted correctly
    - multi-tag iteration (tag ordering independence)
    - empty dict returns no-match
    - truncated/malformed data handled gracefully
    - unknown tags skipped without error

  R1f: match_result_clear frees hash and zeros struct

  R2: identity builder NULL rejection (2 tests)
    - NULL uuid returns NULL (prevented g_variant_new_string crash)
    - valid UUID produces correct identity bytes

  R3: gallery matching by subtype (3 tests)
    - matches correct print by finger subtype
    - falls back to first entry when subtype not found
    - returns NULL for empty/NULL gallery

  R4: struct field separation — enroll_user_dbid != delete_storage_dbid

  R5: del_record command format — cmd 0x48 with dbid(2LE)

  R6: match_finger single allocation — exactly 13 bytes

  R7: SSM state enums exist (2 tests)
    - CLEAR_* states 0-5
    - DELETE_* states 0-7

To make the tests possible, extracted previously-static functions:
  - parse_match_result → validity_parse_match_result (public)
  - ValidityMatchResult struct moved to validity_db.h
  - validity_match_result_clear added to validity_db.c
  - validity_find_gallery_match helper extracted from verify SSM
2026-04-22 03:06:34 +00:00
Leonardo Francisco
93ba5598cc validity: fix dead code, stubs, and broken logic across Iteration 6
Comprehensive bugfix for issues found during code audit:

1. parse_match_result (CRITICAL): Replace dead while loop + hardcoded
   offsets with proper TLV dict parsing (tag LE16 + len LE16 + data)
   matching python-validity's parse_dict(). Extracts user_dbid (tag 1),
   subtype (tag 3), and hash (tag 4) from match result.

2. ENROLL_CREATE_USER (CRITICAL): Fix NULL user_id crash —
   g_uuid_string_random() now generates UUID for user identity instead
   of passing NULL to g_variant_new_string().

3. Identify gallery matching: Match sensor result against gallery by
   comparing finger subtype instead of always returning first entry.

4. Field abuse: Add dedicated enroll_user_dbid field to FpiDeviceValidity
   instead of reusing delete_storage_dbid for enrollment state.

5. Delete SSM: Full implementation — enumerate users via get_user_storage,
   iterate users to find matching finger subtype, delete via cmd 0x48
   (del_record). Proper error handling for missing records.

6. match_finger double allocation: Remove redundant 12-byte alloc/free,
   single clean 13-byte allocation per python-validity format.

7. clear_storage: Full SSM implementation — enumerate user storage,
   del_record for each user. Replaces NOT_SUPPORTED stub.

8. Clean stale TODO/placeholder comments.

All 37 tests pass (0 fail, 2 skip — unchanged baseline).
2026-04-22 03:06:34 +00:00
Leonardo Francisco
52f0d540dd validity: Iteration 6 — Enrollment, Verification, and DB Management
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).
2026-04-22 03:06:34 +00:00
Leonardo Francisco
977e09da2d validity: Add capture program infrastructure (Iteration 5)
Implement the capture command building infrastructure ported from
python-validity's sensor.py and timeslot.py. This provides all the
algorithms needed to construct sensor capture commands for calibration,
enrollment, and identification modes.

New components:
- TLV chunk parsing (split/merge) for capture programs
- Timeslot DSP instruction decoder (16 opcodes, 1-3 bytes each)
- Timeslot table patching (Call repeat multiplication, factory cal)
- Line Update Type 1 algorithm for 0xb5-class sensors
- build_cmd_02(): main capture command builder
- Factory bits parsing (subtag 3 cal values, subtag 7 cal data)
- Frame averaging with multi-line deinterlacing
- Calibration data processing (scale/accumulate/clip)
- Clean slate format with SHA256 verification
- Bitpack compression for factory calibration values
- Finger ID mapping (FpFinger <-> VCSFW subtype 1-10)
- LED control commands (glow_start_scan, glow_end_scan)
- CaptureProg lookup table for firmware 6.x type-1 devices
- OPEN_CAPTURE_SETUP state in the open SSM

27 unit tests covering all components.
Full test suite: 36 OK, 0 Fail, 2 Skipped.
2026-04-22 03:06:34 +00:00
Leonardo Francisco
3af922d69b validity: Fix compiler warnings in TLS code
- Migrate from deprecated HMAC_* API to EVP_MAC (OpenSSL 3.x):
  tls_hmac_sign(), validity_tls_prf(), handle_priv_block()
- Remove unused ec_privkey_from_coords() function
- Remove unused x_le/y_le variables in handle_priv_block()
- Fix const discard in OSSL_PARAM_utf8_string() call
- Restore crt_hardcoded[] with G_GNUC_UNUSED (needed in Iter 6)
2026-04-22 03:06:34 +00:00
Leonardo Francisco
95fccfdac8 validity: Iteration 4 — Sensor identification and HAL tables
Add post-TLS sensor identification infrastructure:

TLS command mechanism (vcsfw_tls_cmd_send):
- Reusable 2-state subsm for sending VCSFW commands inside TLS channel
- Uses 0x44 prefix + TLS app_data wrapping for sends
- Decrypts TLS response and extracts VCSFW status + payload

Sensor identification (cmd 0x75):
- validity_sensor_parse_identify() parses hw_major/hw_version
- DeviceInfo table (26 entries): maps (major, version) to device name
  and sensor type, with exact and fuzzy matching
- SensorTypeInfo table (14 entries): maps sensor_type to geometry
  parameters (bytes_per_line, line_width, calibration blob, etc.)

Factory bits retrieval (cmd 0x6f):
- validity_sensor_build_factory_bits_cmd() builds 9-byte command
- Response stored in sensor state for calibration (Iteration 5)

Open sequence integration:
- 4 new SSM states: OPEN_SENSOR_IDENTIFY, OPEN_SENSOR_IDENTIFY_RECV,
  OPEN_SENSOR_FACTORY_BITS, OPEN_SENSOR_FACTORY_BITS_RECV
- Sensor state init/clear wired into dev_open/dev_close

New files: validity_sensor.h, validity_sensor.c
Tests: 14 unit tests in test-validity-sensor.c (all passing)
Full suite: 6/6 OK, 0 failures
2026-04-22 03:06:34 +00:00
Leonardo Francisco
e1cda8f5d8 validity: Add firmware extension upload (Iteration 3)
Implement the firmware extension (fwext) upload module for
Validity/Synaptics VCSFW sensors. When the sensor reports no
firmware loaded (GET_FW_INFO returns status 0xB004), the driver
uploads the .xpfwext firmware file using the following sequence:

  1. WRITE_HW_REG32 (0x08) to prepare hardware register
  2. READ_HW_REG32 (0x07) to verify register state
  3. Load .xpfwext file from filesystem search paths
  4. For each 4KB chunk:
     a. Send db_write_enable blob (encrypted auth token)
     b. WRITE_FLASH (0x41) with chunk payload
     c. CLEANUP (0x1A) to commit chunk
  5. WRITE_FW_SIG (0x42) to upload RSA signature
  6. GET_FW_INFO (0x43) to verify successful upload
  7. REBOOT (0x05 0x02 0x00) to activate new firmware

Architecture: Uses the NULL-callback subsm pattern where SEND
states call vcsfw_cmd_send(self, ssm, cmd, len, NULL) and RECV
states read self->cmd_response_status/data directly. This avoids
the double-advance bug with fpi_ssm_start_subsm auto-advancing
the parent.

New files:
  - validity_fwext.h: Structures, SSM state enum, API declarations
  - validity_fwext.c: Upload SSM, file parser, command builders
  - validity_blob_dbe_009a.inc: db_write_enable blob for 06cb:009a
  - test-validity-fwext.c: 19 unit tests covering all pure functions

Modified files:
  - validity.h: Add cmd_response_status field to FpiDeviceValidity
  - validity.c: Add OPEN_UPLOAD_FWEXT state to open sequence
  - vcsfw_protocol.c: Save status in cmd_receive_cb for RECV states
  - meson.build: Add validity_fwext.c to driver sources

Test results: 34 OK, 0 Fail, 2 Skipped
2026-04-22 03:06:34 +00:00
Leonardo Francisco
67b9c18696 validity: Add TLS session management (Iteration 2)
Implement the TLS handshake and encrypted channel for VCSFW sensors:

- validity_tls.c/h: TLS PRF (P_SHA256), AES-256-CBC encrypt/decrypt,
  PSK derivation from DMI (machine binding), flash partition parsing
  (cert/privkey/ECDH blocks with SHA-256 integrity), ClientHello/
  ServerHello builders, full TLS handshake state machine
- validity.c: Integrate TLS into open sequence — check fwext status,
  read flash partition 1, perform TLS handshake when keys available,
  graceful skip when fwext not loaded
- validity.h: Add ValidityTlsState, fwext_loaded flag, TLS fields
- OpenSSL dependency for ECDH, AES-256-CBC, HMAC-SHA256

Tests (18 total in test-validity-tls):
  - 13 unit tests: init/free, ClientHello format, PRF determinism/
    length/short, encrypt roundtrip/alignment, decrypt invalid,
    PSK derivation/determinism, flash parse empty/truncated,
    unwrap invalid
  - 5 regression tests for bugs found during hardware testing:
    - flash parse ordering (PSK must precede parse)
    - READ_FLASH command format (13-byte layout)
    - flash response 6-byte header unwrap
    - ServerHello expects raw TLS (no VCSFW prefix)
    - ClientHello TLS record prefix (0x44000000)
  - Hardware integration test script (test_tls_hardware.py)

All 33 project tests pass (0 fail, 2 skipped).
2026-04-22 03:06:34 +00:00
Leonardo Francisco
29d6fea0de validity: Add new driver for Validity/Synaptics VCSFW sensors
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.
2026-04-22 03:06:34 +00:00
lichenggang
d79f157282 goodixmoc: Add support for 0x27C6:0x6090
Signed-off-by: lichenggang <lichenggang@uniontech.com>
2026-04-14 13:43:46 +08:00
YooLc
3ce79986cf goodixmoc: add new PID 0x6890 2026-04-13 13:01:01 +00:00
lichenggang
d8641635c5 fpcmoc: Add support for 0x10A5:0x9B24
Add the new FPC fingerprint device (0x10A5:0x9B24) to the driver and
autosuspend hwdb.

Signed-off-by: lichenggang <lichenggang@uniontech.com>
2026-04-09 06:43:40 +00:00
Ken
ee422fc3c5 elanmoc: Add new PID 0xCB2 2026-03-20 11:23:09 +08:00
FIM43-Redeye
66b1ada0d6 tests: Update goodixmoc capture for verify finger-up wait
Re-record the umockdev USB capture to include the new
GOODIX_VERIFY_WAIT_FINGER_UP state's USB exchanges during
verify and identify operations.

Captured on a Goodix MOC sensor (27c6:609c, Framework Laptop 13)
with FP_DEVICE_EMULATION=1 as required by the test framework.
2026-03-17 17:55:38 +00:00
FIM43-Redeye
7893c2cb36 goodixmoc: Wait for finger removal before completing verify
The goodixmoc driver's verify state machine was missing a
WAIT_FINGER_UP state between IDENTIFY and PWR_BTN_SHIELD_OFF.
After the sensor reported a match/no-match result, the driver
immediately completed the verify operation without waiting for
the finger to be lifted from the sensor.

This caused problems when fprintd retried verification after a
no-match: the finger was still on the sensor, so the same
(wrong) finger was scanned again instantly. On fast match-on-chip
readers, all retry attempts could be exhausted in under a second,
giving the user no time to reposition their finger.

Add GOODIX_VERIFY_WAIT_FINGER_UP to the verify state machine,
mirroring the existing GOODIX_ENROLL_WAIT_FINGER_UP in the
enroll flow. The new state sends MOC_CMD0_FINGER_MODE /
MOC_CMD1_SET_FINGER_UP to the sensor and waits for the finger
to be removed before advancing to PWR_BTN_SHIELD_OFF.

The callback handles the same cases as the enroll equivalent:
- Timeout (5s): retry the finger-up wait
- Protocol error: fail the SSM
- Success: clear FINGER_STATUS_PRESENT and advance

Link: https://gitlab.freedesktop.org/libfprint/fprintd/-/issues/209
2026-03-17 17:55:38 +00:00
Daniel Schaefer
2c7842c905 focaltech_moc: add new pid:0x077A pid:0x079A
Tested on working hardware with examples/enroll and examples/verify

Signed-off-by: Daniel Schaefer <dhs@frame.work>
2026-02-12 17:09:41 +08:00
Marco Trevisan (Treviño)
e8c55c5939 data/autosuspend.hwdb: Sync with unsupported devices wiki 2026-02-10 05:41:06 +00:00
Marco Trevisan (Treviño)
fedb62f091 ci: Make jobs interrumpible 2026-02-10 06:35:26 +01:00
Marco Trevisan (Treviño)
cc41f805f2 tests/valgrind-python.supp: Ignore PyGObject leaks
They are unrelated to fprint itself, so let's ignore them
2026-02-10 06:33:00 +01:00
Marco Trevisan (Treviño)
1ee7df6cf2 ci: Add PyGObject symbols 2026-02-10 06:33:00 +01:00
Marco Trevisan (Treviño)
3f43c9356c build: Ignore -Werror=unused-but-set-variable for nbis 2026-02-10 06:33:00 +01:00
Marco Trevisan (Treviño)
0c97a47d8e Release 1.94.10 2026-02-10 03:18:14 +01:00
Petko Bordjukov
5f1da71e70 synaptics: Add 06cb:00e9
Tested working on an HP x360 1040 G8

Reverts: 0edae7b641
2026-02-10 02:01:08 +00:00
Ankur
87092d74ff Add support for 04f3:0ca7 Elan Microelectronics Corp. ELAN:ARM-M4 2025-12-18 10:59:29 -08:00
herman lin
df67c08a97 elanmoc: Add new PID 0xCB0 2025-12-16 16:20:35 +08:00
Marco Trevisan (Treviño)
b069c78348 fpcmoc: Do not leak the interrupt cancellable
g_set_object adds a reference already so we need to cleanup the original
reference first if we do not want to leak it
2025-12-09 20:37:34 +01:00
Marco Trevisan (Treviño)
bd7c745b02 ci: Use rawhide for testing again
Reverts commit: 9141014456
2025-12-06 03:17:52 +01:00
Marco Trevisan (Treviño)
aa010b5c3b fp-device: Clarify getter for open property 2025-12-06 03:17:52 +01:00
Marco Trevisan (Treviño)
a9c6621119 focaltech_moc: add new pid:0xA27A 2025-12-06 01:39:32 +00:00