fingerprintd/interfaces
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Jorijn van der Graaf 284282350b Hold, do not tap -- and stop spending the verdict on a frame that cannot carry it
Jorijn worked out the technique and it changes what every number in this project
means: "press and LIFT (quick tap) is wrong, holding the sensor until it gives
the result is a 100% success rate."

The logs agree, on a properly controlled comparison. Same template, same
session, learning off for all four blocks, only the technique differing: tapped
4/15 and 3/15, held 15/15 and 15/15.

The frame data says why. Over every frame this project has a verdict for, split
at 2.5x the idle floor:

  full contact, interrupt settled     78/175 = 45% match
  full contact, interrupt asserted    28/142 = 20%
  partial,      interrupt settled      1/9   = 11%
  partial,      interrupt asserted     0/53  =  0%

A tap is caught while the finger is still arriving or already leaving. Such a
frame is not a hard verdict waiting to happen, it is a wasted one: with the
rescan budget at 0 every frame is terminal, so its rejection ends the press. 62
partial frames produced exactly one match between them.

So the tracker becomes a Schmitt trigger. A press now STARTS on settled contact
and ENDS on the finger leaving, which means a frame taken mid-landing produces
no event at all rather than a false rejection. A press that never settles simply
yields no verdict and the loop waits for the next one, which is an honest try
again. Enrolment is untouched: it passes one threshold for both and keeps its
own sample-quality gate inside the trustlet.

fptrial.sh now says hold, and defaults to fifteen presses. Instructing a tap for
its whole life is what quietly made every rate this project has quoted a worst
case, and a tap is not a case the product has -- nobody taps a phone sensor and
walks away, they rest a finger until it unlocks.
2026-09-05 00:17:13 +02:00
..
Fingerprintd-Engine.cppm Hold, do not tap -- and stop spending the verdict on a frame that cannot carry it 2026-09-05 00:17:13 +02:00
Fingerprintd-Rpmb.cppm Port the RPMB listener's wire format, guard included 2026-09-02 16:48:57 +02:00
Fingerprintd-Sensor.cppm Own the sensor rail, and run the init chain against it 2026-09-02 18:24:12 +02:00
Fingerprintd-Sfs.cppm Initial commit: the gpfile wire format, pinned by two real containers 2026-09-02 16:02:46 +02:00
Fingerprintd-Store.cppm Drop the gid 60 compatibility path 2026-09-02 17:28:47 +02:00
Fingerprintd-Ta.cppm UPDATE_TEMPLATE: the command stock learns with, and the field that was killing it 2026-09-03 17:45:27 +02:00
Fingerprintd-Tee.cppm Reach QTEE: credentials, client env and the app loader, with no QCBOR 2026-09-02 18:02:28 +02:00
Fingerprintd.cppm Own the sensor rail, and run the init chain against it 2026-09-02 18:24:12 +02:00