Watch
1
0
Fork
You've already forked SouveraineOS
0

task 44: there is no API to design

fprintd, gazed, sailfish-fpd and biometryd are the same interface four
times. Take that shape and face and finger become one surface with two
backends. Mapped every call onto the recovered TA commands; the gaps
are persistence and the auth token, both already named.
This commit is contained in:
Fimeg 2026-08-09 09:58:15 -04:00
commit 34cc8e97f9

View file

@ -301,6 +301,46 @@ instruments, not the factor.
| libfprint match-on-chip | Supported upstream — device features cover on-device storage and identify, so match-on-chip is not fighting the framework. |
| FPC over QSEE, natively on Linux | **Nobody has done it.** No prior art found. |
### The primitives all agree, which settles the API
Cloned to `Pixel3Arch/references/biometrics/`: `fprintd`, `libfprint` (with
`wrobelda/goodix-qsee` fetched as a remote branch), `sailfish-fpd-community`,
`biometryd`.
Reading their interfaces side by side, they are the same API three times over —
and TASK-12's `gazed` is a fourth. `fprintd` has `Claim`/`Release`,
`VerifyStart`/`VerifyStop`, `EnrollStart`/`EnrollStop`, `ListEnrolledFingers`,
`DeleteEnrolledFinger`, signals `VerifyStatus`/`VerifyFingerMatched`/
`EnrollStatus`, properties `finger-present`/`finger-needed`/
`num-enroll-stages`. `gazed` has `claim/release`, `verify_start/stop`,
`enroll_start/stop` with a status signal carrying capture quality. Sailfish
adds the enum worth stealing wholesale: `FPACQUIRED_GOOD`/`PARTIAL`/
`INSUFFICIENT`/`IMAGER_DIRTY`/`TOO_SLOW`/`TOO_FAST`.
So there is no API to design. Take that shape, and the face factor and the
finger factor become the same surface with two backends — which is what
symmetry with TASK-12 was supposed to mean.
It maps onto the recovered protocol without a gap:
| daemon call | TA commands |
|---|---|
| `EnrollStart` | 11/6 `load_empty_db` (first run), 11/9 `set_active_fingerprint_set`, 11/0 `begin_enrol` |
| enroll stage | 10/4 `qualify_capture` → 11/1 `enrol`; remaining count drives `num-enroll-stages` |
| `EnrollStop` | 11/2 `end_enrol` |
| `VerifyStart` | 10/3 `wakeup_setup`, then on IRQ 10/1 `check_finger_lost` → 10/4 → 11/3 `identify` |
| `ListEnrolledFingers` | 11/7 `get_template_ids` |
| `DeleteEnrolledFinger` | 11/8 `delete_template` |
| `finger-present` | 10/1 `check_finger_lost` |
| acquired quality | capture/qualify return codes → the Sailfish enum |
| persistence | target 2, via the supplicant — see below |
`wrobelda/goodix-qsee` is the structural template for the backend: 1,418 lines
split into `-transport.c` (the TEE channel), `-sensor.c` (the misc device),
`-token.c` (the auth token), `-proto.h` (the command table) and the driver
proper. Those four files are exactly our four layers — `/dev/qseecom`, the
`fpc1020` input device, target 3, and `fpc-ta-protocol.md`.
### The listener is a separate owner, and that is a constraint
Templates only persist through target 2, which goes out to a QSEE listener. The