Compare commits

..
Author SHA1 Message Date
Marco Trevisan (Treviño) dfc3d36816 Upload to noble 2026-06-08 12:11:37 +02:00
Dirk Su c3f580ec19 d/p: Add new Elan device 04f3:0ca8 (LP: #2147084) 2026-04-02 15:09:10 +08:00
Marco Trevisan (Treviño) 8487dd8e59 Upload to noble 2026-03-11 14:49:58 +01:00
Dirk SuandMarco Trevisan (Treviño) 90c384e102 d/p: Add new Goodix device 27c6:66a9 (LP: #2139061) 2026-03-11 14:44:18 +01:00
Bin LiandMarco Trevisan (Treviño) e36ae09461 Import Debian changes 1:1.94.7+tod1-0ubuntu5~24.04.5
libfprint (1:1.94.7+tod1-0ubuntu5~24.04.5) noble; urgency=medium
.
  * d/p: synaptics: add new PID 0x019F, 0x0109 and 0x010A. (LP: #2133704)
2026-03-11 14:27:04 +01:00
Atlas YuandMarco Trevisan (Treviño) c35b1a67c1 Import Debian changes 1:1.94.7+tod1-0ubuntu5~24.04.4
libfprint (1:1.94.7+tod1-0ubuntu5~24.04.4) noble; urgency=medium
.
  * d/p: Add new Synaptics device 06cb:019d (LP: #2114712)
2025-06-30 17:22:35 +02:00
Marco Trevisan (Treviño) a9dc992a82 Upload to noble 2025-03-10 16:54:46 +01:00
Marco Trevisan (Treviño) 652a443420 Update changelog 2025-03-10 16:54:17 +01:00
Dirk SuandMarco Trevisan (Treviño) 04c00175d5 d/p: only add 06cb:0107 and 06cb:0108 and drop the list fine tune 2025-03-10 16:44:25 +01:00
Dirk Su e9dd50b0b1 d/p: Add new Synaptics devices 06cb:0107 and 06cb:0108 (LP: #2097831) 2025-02-17 09:48:37 +08:00
Yao Wei (魏銘廷) fcbf71c711 debian/patches: Add new Elan device 04f3:0c9f (LP: #2089367) 2024-11-22 16:35:55 +08:00
Marco Trevisan (Treviño) 4ec45d7b67 Upload to noble 2024-06-14 04:50:33 +02:00
Marco Trevisan (Treviño) fea66b73fa Update changelog 2024-06-14 04:50:23 +02:00
Marco Trevisan (Treviño) e1731a75ec debian: Prepare for noble branching 2024-06-14 04:49:16 +02:00
Marco Trevisan (Treviño) 0fdb567797 d/p: Add new Broadcom device IDs to reduce the power consumption
LP: #2067785
2024-06-13 19:38:21 +02:00
Steve LangasekandMarco Trevisan (Treviño) 481727e0a1 Import Debian changes 1:1.94.7+tod1-0ubuntu4
libfprint (1:1.94.7+tod1-0ubuntu4) noble; urgency=medium
.
  * No-change rebuild for CVE-2024-3094
2024-06-13 19:37:32 +02:00
Steve LangasekandMarco Trevisan (Treviño) 388fc7403a Import Debian changes 1:1.94.7+tod1-0ubuntu3
libfprint (1:1.94.7+tod1-0ubuntu3) noble; urgency=medium
.
  * No-change rebuild against libglib2.0-0t64
.
libfprint (1:1.94.7+tod1-0ubuntu2) noble; urgency=medium
.
  * No-change rebuild against libglib2.0-0t64
2024-06-13 19:37:31 +02:00
Marco Trevisan (Treviño) 5b3f85168a Upload to noble 2024-02-20 09:27:26 +01:00
Marco Trevisan (Treviño) fc72ac6419 Update changelog 2024-02-20 09:26:00 +01:00
Marco Trevisan (Treviño) f407740db2 debian/upstream/metadata: Update for tod light-fork 2024-02-20 09:24:30 +01:00
Marco Trevisan (Treviño) 7f35c374ec Merge tag 'debian/1%1.94.7-2' into ubuntu
libfprint Debian release 1:1.94.7-2
2024-02-20 09:24:23 +01:00
Marco Trevisan (Treviño) b6df70ce0c debian/libfprint-2-2.postinst: Devices triggers updated 2024-02-20 09:12:18 +01:00
Marco Trevisan (Treviño) 4efdb738c5 New upstream release 2024-02-20 09:12:17 +01:00
Marco Trevisan (Treviño) 8060f4bce8 Update upstream source from tag 'upstream/1.94.7+tod1'
Update to upstream version '1.94.7+tod1'
with Debian dir 06d2027ceb
2024-02-20 09:12:17 +01:00
Marco Trevisan (Treviño) ef6d9ebfd6 New upstream version 1.94.7+tod1 2024-02-20 09:12:13 +01:00
Marco Trevisan (Treviño) 76a95ce45f build/tests: Skip a test if the test requires it during inspection
In case we don't have dependencies, we should skip the test, otherwise
we can just fail at test time
2024-02-20 08:58:28 +01:00
Marco Trevisan (Treviño) 90668816e3 build: Look for sh just once 2024-02-20 08:58:28 +01:00
Marco Trevisan (Treviño) bfb4272674 tests/tod-drivers: Test tod driver 1.94.1 not 1.94.0 as it was not released 2024-02-20 08:58:28 +01:00
Marco Trevisan (Treviño) 72922217fa tests/tod-drivers: Update binaries as per a test leak fix 2024-02-20 08:58:28 +01:00
Marco Trevisan (Treviño) 9e53d14fc4 Upload to unstable 2024-02-20 08:42:26 +01:00
Marco Trevisan (Treviño) 4427093248 Update changelog 2024-02-20 08:42:20 +01:00
Marco Trevisan (Treviño) c2b0b14c79 debian/control: Add gir depends and provides fields to dev package 2024-02-20 08:39:15 +01:00
Marco Trevisan (Treviño) 20ba90212b debian/control: Add build-dependency on gir1.2-{gobject,gio}-2.0-dev 2024-02-20 08:35:46 +01:00
Marco Trevisan (Treviño) 9e05793948 debian/patches: Cherry-pick patches to ignore tests missing dependencies
Closes: #1059027
2024-02-20 08:28:59 +01:00
Marco Trevisan (Treviño) b972866b25 tests/libfprint.supp: Ignore bash leaks 2024-02-20 07:47:12 +01:00
Marco Trevisan (Treviño) eb8ce585c6 tests: Add test files for tod 1.94.7 version 2024-02-20 07:25:35 +01:00
Marco Trevisan (Treviño) 11ad450af1 libfprint/tod/build: Require libgusb dependency on pkgconfig
We include the directories so we definitely need to depend on it at
compile time.
2024-02-20 07:19:51 +01:00
Marco Trevisan (Treviño) 619827ac7a tests: Use FP_DRIVERS_ALLOWLIST variable instead of old one 2024-02-20 07:02:25 +01:00
Marco Trevisan (Treviño) ecc33b5cc6 fpi-image: Add docstring for FPI_IMAGE_NONE 2024-02-20 07:00:07 +01:00
Marco Trevisan (Treviño) ef99359428 Merge tag 'v1.94.7' into tod
2024-02-20: v1.94.7 release

Highlights:
 * synaptics: fix enroll identify problem after user reset database.
 * synaptics: New PIDs 0x0173, 0x0106, 0x0124.
 * goodixmoc: New PID 0x6582.
 * build: Do not require bash to build, only posix sh.
 * fp-image: Simplify minutiae detection tasks.
 * GLib 2.68 is now required to build libfprint.

New drivers:
 * realtek (PID 0x5813).
 * focaltech_moc (PIDs 0x9E48, 0xD979, 0xA959).
 * egismoc (PIDs 0x0582, 0x05a1).

Git-EVTag-v0-SHA512: 17cc50269368e861ea751af2a3ff957329191ca66832033bb71995e8e9e56f86af955559b147217a19f218af5b1eec0fd2bce5dd2b4f4381be48ef3d6610003d
2024-02-20 06:59:53 +01:00
Marco Trevisan (Treviño) 034efaa849 Upload to unstable 2024-02-20 06:46:40 +01:00
Marco Trevisan (Treviño) 55036d3e5f Update changelog 2024-02-20 06:46:09 +01:00
Marco Trevisan (Treviño) 005af841f8 debian: use udev.pc to place udev rules and hwdb
Closes: #1058843
2024-02-20 06:39:21 +01:00
Marco Trevisan (Treviño) afd5ef4690 debian/patches: Drop, applied upstream 2024-02-20 06:34:26 +01:00
Marco Trevisan (Treviño) d5f19e380b debian/libfprint-2-2.postinst: Devices triggers updated 2024-02-20 06:30:10 +01:00
Marco Trevisan (Treviño) b9fefd1ed0 New upstream release 2024-02-20 06:30:08 +01:00
Marco Trevisan (Treviño) f1fdf3dd88 Update upstream source from tag 'upstream/1.94.7'
Update to upstream version '1.94.7'
with Debian dir 1c92bfb17d
2024-02-20 06:30:08 +01:00
Marco Trevisan (Treviño) 4c0d5aff6a New upstream version 1.94.7 2024-02-20 06:30:05 +01:00
Marco Trevisan (Treviño) af5c5064b9 Upload to mantic 2023-09-07 17:59:33 +02:00
Marco Trevisan (Treviño) 05e069937b Update changelog 2023-09-07 17:55:54 +02:00
Andy ChiandMarco Trevisan (Treviño) fb3f98576f debian/patches/synaptics-fix-enroll_identify-problem-after-user-reset-da.patch (LP: #2034481) 2023-09-07 17:40:30 +02:00
Marco Trevisan (Treviño) ccb57e4a3a Upload to unstable 2023-08-24 09:19:31 +02:00
Marco Trevisan (Treviño) b2828faa4b Update changelog 2023-08-24 09:19:07 +02:00
Marco Trevisan (Treviño) 5b04729625 debian/control: Update standards-version to 4.6.2, no change needed 2023-08-24 09:17:56 +02:00
Marco Trevisan (Treviño) af4d774a08 debian/rules: Remove python cache files on clean
Closes: #1047209
2023-08-23 01:47:13 +02:00
Marco Trevisan (Treviño) b885874329 debian/changelog: Remove fixup line 2023-08-23 01:43:21 +02:00
Marco Trevisan (Treviño) 843ca987aa Merge tag 'debian/1%1.94.6-1' into ubuntu
libfprint Debian release 1:1.94.6-1
2023-08-23 01:24:15 +02:00
Marco Trevisan (Treviño) a530bb66b0 Upload to unstable 2023-08-23 01:11:51 +02:00
Marco Trevisan (Treviño) d057cc311f Update changelog 2023-08-23 01:11:05 +02:00
Marco Trevisan (Treviño) 381ea2292d debian/patches: Remove execution bit from test asset 2023-08-23 01:10:47 +02:00
Marco Trevisan (Treviño) fcbabf6cbd fixup! debian/patches: Use assets from correct paths 2023-08-23 01:10:16 +02:00
Marco Trevisan (Treviño) 9ea3bba116 debian/rules: Always force building udev hwdb
We are more updated than systemd, so let's use libfprint own rules

Closes: #1024309
2023-08-23 00:59:55 +02:00
Marco Trevisan (Treviño) 8c238c83f2 debian/patches: Use assets from correct paths 2023-08-23 00:57:00 +02:00
Marco Trevisan (Treviño) 4c1b3b4da3 debian: Add libfprint-2-tests package 2023-08-23 00:57:00 +02:00
Marco Trevisan (Treviño) c676c281ba debian/patches: Drop, applied upstream 2023-08-23 00:57:00 +02:00
Marco Trevisan (Treviño) 196f8a9ea4 debian/libfprint-2-2.postinst: Devices triggers updated 2023-08-23 00:57:00 +02:00
Marco Trevisan (Treviño) 1b4dbf28f2 New upstream release 2023-08-23 00:57:00 +02:00
Marco Trevisan (Treviño) 557189329b Update upstream source from tag 'upstream/1.94.6'
Update to upstream version '1.94.6'
with Debian dir 95f93b760e
2023-08-23 00:57:00 +02:00
Marco Trevisan fabb09bbd7 Merge branch 'scrub-obsolete' into 'debian'
Remove unnecessary constraints

See merge request debian/libfprint!5
2023-08-22 22:56:37 +00:00
Marco Trevisan (Treviño) 0fdda75219 New upstream version 1.94.6 2023-08-23 00:43:29 +02:00
Marco Trevisan (Treviño) 31168e8f83 Upload to mantic 2023-08-23 00:31:57 +02:00
Marco Trevisan (Treviño) 3eadf227e4 Update changelog 2023-08-23 00:31:52 +02:00
Marco Trevisan (Treviño) 3e6500c2b9 debian/rules: Always force building udev hwdb
We are more updated than systemd, so let's use libfprint own rules
2023-08-23 00:31:37 +02:00
Marco Trevisan (Treviño) cf18fc3b68 debian/intian-overrides: Update lintian syntax to ignore built drivers 2023-08-21 13:07:09 +02:00
Marco Trevisan (Treviño) 362bbfae13 debian/patches: Use proper rpath and permissions on installed libraries 2023-08-21 13:07:09 +02:00
Marco Trevisan (Treviño) 3650ef8137 debian/control: Add explicit tests dependency on python3
It's already required since we do require python modules, but let's make
it more explicit to please lintian
2023-08-21 13:07:06 +02:00
Marco Trevisan (Treviño) 54f02c7799 tests: Remove executable bits from installed libraries 2023-08-21 12:42:02 +02:00
Marco Trevisan (Treviño) 2aeec32558 tests/tod-drivers: Remove RPATH information from libraries 2023-08-21 12:24:36 +02:00
Marco Trevisan (Treviño) 6607d9f10b tests: Use tests execdir install rpath 2023-08-21 12:23:00 +02:00
Marco Trevisan (Treviño) 95c2ac7085 Upload to mantic 2023-08-17 21:53:59 +02:00
Marco Trevisan (Treviño) a362755b04 Update changelog 2023-08-17 21:53:03 +02:00
Marco Trevisan (Treviño) 7338440264 debian/patches: Use assets from correct paths 2023-08-17 21:47:02 +02:00
Marco Trevisan (Treviño) 9f235e2121 tests: Use native GTest utils to generate assets names 2023-08-17 21:46:30 +02:00
Marco Trevisan (Treviño) 7ba960911a debian/patches: Install current tod driver for installed tests 2023-08-17 21:06:32 +02:00
Marco Trevisan (Treviño) eac5c1a9d4 tests: Install current TOD driver in installed tests and use it 2023-08-17 21:03:06 +02:00
Marco Trevisan (Treviño) 61f93ce92e ci: Move build dir during installed tests so we check that we don't use built artifacts 2023-08-17 20:38:26 +02:00
Marco Trevisan (Treviño) 2ddb480d42 debian/tests: Run installed tests as regression tests 2023-08-17 20:33:49 +02:00
Marco Trevisan (Treviño) 1b62b88dba debian/patches: Drop, applied upstream 2023-08-17 20:33:49 +02:00
Marco Trevisan (Treviño) 390dc89a5b debian: Add libfprint-2-tests package 2023-08-17 20:33:49 +02:00
Marco Trevisan (Treviño) e325b5b552 debian/libfprint-2-2.postinst: Devices triggers updated 2023-08-17 20:33:47 +02:00
Marco Trevisan (Treviño) 8941e79fea New upstream release 2023-08-17 20:33:00 +02:00
Marco Trevisan (Treviño) a57951458e Update upstream source from tag 'upstream/1.94.6+tod1'
Update to upstream version '1.94.6+tod1'
with Debian dir 28838af4e4
2023-08-17 19:53:13 +02:00
Marco Trevisan (Treviño) 2751494b8e New upstream version 1.94.6+tod1 2023-08-17 19:53:04 +02:00
Marco Trevisan (Treviño) c848abd272 tests: Add TOD installed tests 2023-08-17 19:45:37 +02:00
Marco Trevisan (Treviño) 3cc1e483fc tod: Adjust syntax as per new uncrustify 2023-08-17 05:31:28 +02:00
Marco Trevisan (Treviño) 8c6973aa26 Merge tag 'v1.94.6' into tod
v1.94.6

Git-EVTag-v0-SHA512: e1afaf08552dd3bc8e20229f4e8e141236a2133ce69cd3c68332e68483fb80a471ac0d7da1eedd6e4b0944b729433ac26e86ec12ef3accc78f86b1331150e185
2023-08-17 05:26:05 +02:00
Sebastien Bacher c97dde482e releasing package libfprint version 1:1.94.5+tod1-0ubuntu2 2023-04-12 10:45:19 +02:00
Sebastien Bacher 4fe5f0b4dc cherry pick a fix for the tests failing with the new glib version 2023-04-12 10:44:36 +02:00
Debian Janitor 20b97dba8d Remove constraints unnecessary since buster (oldstable)
* Build-Depends: Drop versioned constraint on libglib2.0-dev, libgusb-dev and meson.

Changes-By: deb-scrub-obsolete
2022-11-23 21:01:33 +00:00
Jelmer Vernooij fa429d92e3 Merge branch 'lintian-fixes' into 'debian'
Fix some issues reported by lintian

See merge request debian/libfprint!7
2022-11-23 19:45:48 +00:00
Debian Janitor 6008222761 Update standards version to 4.6.1, no changes needed.
Changes-By: lintian-brush
Fixes: lintian: out-of-date-standards-version
See-also: https://lintian.debian.org/tags/out-of-date-standards-version.html
2022-11-21 15:22:08 +00:00
Debian Janitor b83f65bf61 Set upstream metadata fields: Bug-Database, Bug-Submit, Repository-Browse.
Changes-By: lintian-brush
Fixes: lintian: upstream-metadata-file-is-missing
See-also: https://lintian.debian.org/tags/upstream-metadata-file-is-missing.html
Fixes: lintian: upstream-metadata-missing-bug-tracking
See-also: https://lintian.debian.org/tags/upstream-metadata-missing-bug-tracking.html
2022-11-21 15:22:07 +00:00
Debian Janitor 16c690e8f2 Trim trailing whitespace.
Changes-By: lintian-brush
Fixes: lintian: trailing-whitespace
See-also: https://lintian.debian.org/tags/trailing-whitespace.html
2022-11-21 15:21:55 +00:00
Jelmer Vernooij 8c641a504c Merge branch 'multiarch-fixes' into 'debian'
Apply hints suggested by the multi-arch hinter

See merge request debian/libfprint!6
2022-10-30 17:07:44 +00:00
Debian Janitor 2c6578e4d9 Apply multi-arch hints.
+ libfprint-2-2: Drop Multi-Arch: same.

Changes-By: apply-multiarch-hints
2022-10-14 18:05:28 +00:00
Marco Trevisan (Treviño) 673aba6846 Upload to unstable 2022-10-14 01:09:06 +02:00
Marco Trevisan (Treviño) 3d6d5901a9 Update changelog 2022-10-14 01:06:23 +02:00
Marco Trevisan (Treviño) 01a462580b debian/docs: Update reference to README.md and remove TODO 2022-10-14 01:06:16 +02:00
Jeremy Bicha 0c91e8745e releasing package libfprint version 1:1.94.5+tod1-0ubuntu1 2022-10-13 19:05:05 -04:00
Marco Trevisan (Treviño) 73ceb9e39c debian/patches: Cherry-pick post-release upstream cleanups 2022-10-14 00:59:50 +02:00
Marco Trevisan (Treviño) 81230b793c debian/libfprint-2-2.postinst: Devices triggers updated 2022-10-14 00:55:33 +02:00
Marco Trevisan (Treviño) 42c823205b New upstream release 2022-10-14 00:55:31 +02:00
Marco Trevisan (Treviño) 8bb07377ab Update upstream source from tag 'upstream/1.94.5'
Update to upstream version '1.94.5'
with Debian dir 704eca5787
2022-10-14 00:55:30 +02:00
Marco Trevisan (Treviño) 3b901ff205 New upstream version 1.94.5 2022-10-14 00:55:22 +02:00
Marco Trevisan (Treviño) b0380415c0 debian/source: Remove include-binaries file, we've none now 2022-10-14 00:18:33 +02:00
Marco Trevisan (Treviño) 819a16842b Update changelog 2022-10-13 21:07:46 +02:00
Marco Trevisan (Treviño) 3d6814d48d debian/libfprint-2-tod1.symbols: Add new drivers symbols 2022-10-13 20:52:50 +02:00
Marco Trevisan (Treviño) 6e00b172be debian/patches: Drop all (applied upstream) 2022-10-13 20:52:49 +02:00
Marco Trevisan (Treviño) 87a9171d28 debian/libfprint-2-2.postinst: Devices triggers updated 2022-10-13 20:52:48 +02:00
Marco Trevisan (Treviño) 66337f7008 New upstream release 2022-10-13 20:52:27 +02:00
Marco Trevisan (Treviño) e41df1a318 Update upstream source from tag 'upstream/1.94.5+tod1'
Update to upstream version '1.94.5+tod1'
with Debian dir 4e0429ec4f
2022-10-13 20:52:27 +02:00
Marco Trevisan (Treviño) ac36b213ad New upstream version 1.94.5+tod1 2022-10-13 20:52:19 +02:00
Marco Trevisan (Treviño) 3ea2ee8a76 tod: Change namespace of internal functions to tod_*
In this way we don't have the risk of them being exported because
starting with `fpi_*`.
2022-10-13 20:42:31 +02:00
Marco Trevisan (Treviño) 17818cffe6 ci: allow failure on valgrind job
We have tests depending on external libraries that must not be updated
just to fix such issues
2022-10-13 20:21:15 +02:00
Marco Trevisan (Treviño) 18ca916c4d tod: Add fpi_device_suspend and fpi_device_resume to 1.94 version 2022-10-13 20:12:14 +02:00
Marco Trevisan (Treviño) 082b335300 Merge tag 'v1.94.5' into tod
v1.94.5

 * New driver: fpcmoc, supporting various FPC MOC Fingerprint Sensors
 * goodixmoc: New PIDs 0x6014, 0x6094, 0x631C, 0x634C, 0x6384, 0x659A.
 * goodixmoc: Support resetting device on firmware failure due to corrupted DB.
 * elanmoc: New PIDs 0x0c88, 0x0c8c, 0x0c8d.
 * synaptics: New PID 0x0104.
 * upektc: New PID 0x2017.
 * Fixed various memory leaks
 * More tests

Git-EVTag-v0-SHA512: a36e4b627ffc830a78932266119b73e53921965990bd1b6cae6fd8d166b1b8e62f5a538151a74b82a2a2d83a4ab7399ed17cb2bef39441f881a38a24252e4efa
2022-10-13 20:08:10 +02:00
Marco Trevisan (Treviño) 2e79e6f353 tod-goodix-wrapper: Fix syntax as per uncrustify 2022-10-13 20:06:13 +02:00
Marco Trevisan (Treviño) e96669208b test-fp-context-tod: Try to open/close a device from the public library
We need to skip this for devices with no close vfunc (like the SSM one)
2022-10-13 20:06:13 +02:00
Marco Trevisan (Treviño) f2816024e0 test-device-fake: Add more logging showing the current device action 2022-10-13 20:06:13 +02:00
Marco Trevisan (Treviño) 2f3d9240b7 tod-symbols: Define other macros that could be useful in future 2022-10-13 19:46:26 +02:00
Marco Trevisan (Treviño) c36310fed1 tod: Force libfprint-tod to be a shared library and link whole with private
Also unset the private library if set and make libfprint to only link
with the tod one.

This fixes the issue we had with wrong symbols shared by multiple
libraries
2022-10-13 19:45:17 +02:00
Marco Trevisan (Treviño) c04d15bbf1 fp-device: Move FpDevice private functions to public library
This these functions are not really needed by anything else than
FpDevice, so move them back to the cpp file, so that we don't expose
them in the private library, given that we don't need them
2022-10-13 19:42:50 +02:00
Marco Trevisan (Treviño) 8e7e5bf710 tests: Add tests to ensure that we don't duplicate symbols in libraries
We have an issue where some symbols are exposed by both the tod library
and the public one, and this may lead to big issues like GType's being
defined multiple times.

So add a test checking whether this is working

See: 3v1n0/libfprint#1
2022-10-13 19:41:39 +02:00
Marco Trevisan (Treviño) 4824380f79 Revert "fpi-device: Avoid using device action strings"
This reverts commit fbffb62ecb.
2022-10-13 14:09:25 +02:00
Marco Trevisan (Treviño) 994dfaf51f Upload to kinetic 2022-10-13 13:55:39 +02:00
Marco Trevisan (Treviño) 932d320670 Update changelog 2022-10-13 13:54:52 +02:00
Marco Trevisan (Treviño) 62a048ea6f debian/patches: Improve testing for various drivers 2022-10-13 13:50:55 +02:00
Marco Trevisan (Treviño) bacb72183d debian/patches: Add support for more device PIDs supported upstream 2022-10-13 13:50:55 +02:00
Marco Trevisan (Treviño) 3dd06634d5 elanmoc: Add support for more supported PIDs
And include more tests for specific cases.

LP: #1989314
2022-10-13 13:50:55 +02:00
Marco Trevisan (Treviño) 00a59af0dc Upload to kinetic 2022-07-17 17:37:33 +02:00
Marco Trevisan (Treviño) cbe9d5db69 Update changelog 2022-07-17 17:36:16 +02:00
Marco Trevisan (Treviño) ef6433c8be debian/patches: Ensure that identify works with old goodix driver
Newer fprintd supports duplicate-detection, this implies sending to the
device an empty prints gallery, expecting the device to give us a
matched print against its storage.

In case the device has no storage we're doing this anyway, but goodix
doesn't handle this properly, so let's just ignore the case if no prints
are passed.

Also, once returned the value we might initialize a type multiple times,
and let's avoid this not to have a dead-lock after the first action.

LP: #1966911
2022-07-17 17:35:31 +02:00
Marco Trevisan (Treviño) fbffb62ecb fpi-device: Avoid using device action strings
It may cause initializing a type twice in some cases, and thus some
hard-locking, let's just avoid it since we don't care about full debug
strings here.
2022-07-17 17:34:23 +02:00
Marco Trevisan (Treviño) 0d5c897b3d tod: Add wrapper for goodix-tod not handling identification with no prints
Newer fprintd supports duplicate-detection, this implies sending to the
device an empty prints gallery, expecting the device to give us a
matched print against its storage.

In case the device has no storage we're doing this anyway, but goodix
doesn't handle this properly, so let's just ignore the case if no prints
are passed.
2022-07-17 17:34:23 +02:00
Marco Trevisan (Treviño) 84d8f68d37 Upload to jammy 2022-03-27 23:48:11 +02:00
Marco Trevisan (Treviño) d10fe9c6fd Update changelog 2022-03-27 23:47:59 +02:00
Marco Trevisan (Treviño) a235937bad debian/docs: Update README name to use markdown file
And remove TODO file
2022-03-22 10:56:58 +01:00
Marco Trevisan (Treviño) 12c4f0d536 debian/libfprint-2-tod1.symbols: Add new symbols 2022-02-23 15:43:50 +01:00
Marco Trevisan (Treviño) 8b612cd1d6 debian/libfprint-2-2.postinst: Devices triggers updated 2022-02-23 15:43:15 +01:00
Marco Trevisan (Treviño) 0919392a9d New upstream release 2022-02-23 15:43:14 +01:00
Marco Trevisan (Treviño) d7276459b6 Update upstream source from tag 'upstream/1.94.3+tod1'
Update to upstream version '1.94.3+tod1'
with Debian dir 1e4c9d5856
2022-02-23 15:43:14 +01:00
Marco Trevisan (Treviño) 3a47ce48e3 New upstream version 1.94.3+tod1 2022-02-23 15:43:06 +01:00
Marco Trevisan (Treviño) 8c5a4e3b41 libfprint-tod.ver: Use explicit versioning for old symbols
Given that we won't go in the past, it's better to be explicit in
using versions for symbols so that all new symbols will be added to the
latest listed release, while others won't be moved from where they are.
2022-02-15 13:07:35 +01:00
Marco Trevisan (Treviño) 31f8d8c067 libfprint-tod.ver: Add new APIs to 1.94 symbols 2022-02-15 13:07:35 +01:00
Marco Trevisan (Treviño) a1340485b6 tests/tod-drivers: Add tests for 1.94.3-built tod drivers 2022-02-15 13:07:31 +01:00
Marco Trevisan (Treviño) f3187ad9f4 tod: Ensure we install tod-macros.h header 2022-02-15 13:06:35 +01:00
Benjamin BergandMarco Trevisan (Treviño) 20de7400c6 tests: Avoid -Wdangling-pointer warning
The code is correct, but gcc thinks the pointer is still NULL after the
call. As obvious workaround don't seem to work, just disable the warning
for now.
2022-02-14 19:00:10 +01:00
Marco Trevisan (Treviño) a328dfe1d9 tests/tod-drivers: Add tests for FpDeviceFeature on 1.94.3 2022-02-14 18:50:47 +01:00
Marco Trevisan (Treviño) b6ef314434 tests/tod-drivers: Move FpDeviceFeature definitions to base-fp-device
They're public enums, so put there in the expected file.
2022-02-14 18:50:11 +01:00
Marco Trevisan (Treviño) 600e6f2107 tests/meson: Remove unsupported sources_dir from gnome mkenums 2022-02-14 18:49:40 +01:00
Marco Trevisan (Treviño) 6b894dbd5c Merge tag 'v1.94.3' into tod
2021-11-02: v1.94.3 release

Highlights:
 * Ensure idle mainloop before completing enumeration (fprintd#119)
 * It is now possible to extend already enrolled prints
 * elanspi: Fix timeout error with some hardware (#438)
 * elanspi: Fix cancellation issues
 * goodixmoc: Return matching device print; fixes duplicate checking (#444)
 * goodixmoc: Support clearing the storage (usually unused)

Git-EVTag-v0-SHA512: 779b560b97bc7da5972d9a4854be5b74f8d310a22ac782fde50fa02c869cf93cc11254d75519076ac8ee59f81c8a9fc0466030eb249519827343ab84eb45e640
2022-02-14 17:03:21 +01:00
Marco Trevisan (Treviño) 5be5f5ac59 Upload to jammy 2021-12-14 19:57:05 +01:00
Marco Trevisan (Treviño) 73b185d1c4 Update changelog 2021-12-14 19:55:53 +01:00
Marco Trevisan (Treviño) 58781d5309 debian/patches: Drop, all applied upstream 2021-12-14 19:53:03 +01:00
Marco Trevisan (Treviño) 94f35d1d92 debian/libfprint-2-2.postinst: Devices triggers updated 2021-12-14 19:51:52 +01:00
Marco Trevisan (Treviño) 79ce870a65 New upstream release 2021-12-14 19:51:52 +01:00
Marco Trevisan (Treviño) 63320c998b Update upstream source from tag 'upstream/1.94.2+tod1'
Update to upstream version '1.94.2+tod1'
with Debian dir 8aa5295f88
2021-12-14 19:46:09 +01:00
Marco Trevisan (Treviño) 2be7eed63d New upstream version 1.94.2+tod1 2021-12-14 19:46:02 +01:00
Benjamin BergandMarco Trevisan (Treviño) c3ef68fa5e context: Ensure mainloop is idle before enumeration completes
This ensures that we have processed all hotplug events before
considering enumeration to be complete. This is important due to USB
persist being turned off. At resume time, devices will disappear and
immediately re-appear. In this situatoin, enumerate could first see the
old state with a removed device resulting in it to not be discovered.

As a hotplug event is semingly emitted by the kernel immediately, we
can simply make sure to process this hotplug event before returning
from enumerate.

Closes: fprintd#119
2021-12-14 19:33:50 +01:00
Matthew MirvishandMarco Trevisan (Treviño) 0b37a36874 doc: Fix broken documentation for FpiDeviceUdevSubtypeFlags enum
Added description and fixed incorrect name in comment, so now gtkdoc
actually shows useful information.
2021-12-14 19:33:41 +01:00
Marco Trevisan (Treviño) d46c34b21c Merge tag 'v1.94.2' into tod
Tag 1.94.2

Git-EVTag-v0-SHA512: 3eed67186b9533300d5ba70ce9abc36055068c3eafa663a48c655ef0e8c7a6928bb7cd875a7ae1860a65324fb806da79d83ca3c97a0640b10dc92dc497f04f11
2021-12-14 19:32:04 +01:00
Marco Trevisan (Treviño) 8772056484 Upload to unstable 2021-11-03 17:39:27 +01:00
Marco Trevisan (Treviño) 683b882f97 Update changelog 2021-11-03 17:39:22 +01:00
Marco Trevisan (Treviño) e1dd1de320 debian/patches: Drop, all applied upstream 2021-11-03 17:37:19 +01:00
Marco Trevisan (Treviño) d4f1365d81 debian/watch: Use @PACKAGE@ 2021-11-03 17:31:25 +01:00
Marco Trevisan (Treviño) e7b6cfec6d debian/update-udev-triggers: Ignore errors on udevadm trigger
These are not fatal for package installation and rebuild postinst script
2021-11-03 17:31:21 +01:00
Marco Trevisan (Treviño) 7461f18466 debian/libfprint-2-*.install: Use more restrictive rules to reduce ubuntu delta 2021-11-03 17:30:25 +01:00
Marco Trevisan (Treviño) 8217d33581 debian/libfprint-2-2.postinst: Devices triggers updated 2021-11-03 17:28:45 +01:00
Marco Trevisan (Treviño) dae6dfe73a New upstream release 2021-11-03 17:28:44 +01:00
Marco Trevisan (Treviño) 06843005ac Update upstream source from tag 'upstream/1.94.2'
Update to upstream version '1.94.2'
with Debian dir ccbb696b9b
2021-11-03 17:28:43 +01:00
Marco Trevisan (Treviño) 84e920118a New upstream version 1.94.2 2021-11-03 17:28:34 +01:00
Marco Trevisan (Treviño) a36a4f20ff tod-inspector: Add support for 1.94 device class members 2021-10-31 23:44:37 +01:00
Marco Trevisan (Treviño) 8ae5522201 tod-inspector: Support udev devices 2021-10-31 23:44:05 +01:00
Marco Trevisan (Treviño) fef4120ae1 test-fpi-todv1-types: Check missing device class members for 1.94
Not a problem now, as we're still on 1.94, but will be needed to ensure
that future versions will be checked.
2021-10-31 23:28:21 +01:00
Marco Trevisan (Treviño) dcfe3e0da9 Upload to jammy 2021-10-31 23:13:40 +01:00
Marco Trevisan (Treviño) e14493f340 Update changelog 2021-10-31 23:13:36 +01:00
Marco Trevisan (Treviño) 608a9f10df libfprint: Use a macro to easily compute TOD padding 2021-10-31 23:09:30 +01:00
Marco Trevisan (Treviño) d6eb249fd6 debian/patches: Ensure that structures padding is constant in all archs 2021-10-31 23:08:38 +01:00
Marco Trevisan (Treviño) ec8a9ba0fd fpi-device: Adjust padding based on actual gpointer size
In some architectures pointer size is different. So let's adapt it to it
2021-10-31 22:31:01 +01:00
Marco Trevisan (Treviño) bfbd8b5aee Upload to jammy 2021-10-28 20:32:43 +02:00
Marco Trevisan (Treviño) 164fecb343 Update changelog 2021-10-28 20:32:37 +02:00
Marco Trevisan (Treviño) 90a1d2d481 debian/control: Depend libfprint-2-tod-dev on libgudev-1.0-dev 2021-10-28 19:45:38 +02:00
Marco Trevisan (Treviño) 437d8fa0cf debian/libfprint-2-2.symbols: Remove virtual device symbols
These were wrongly exported before and not really part of any public
API.
2021-10-28 19:29:01 +02:00
Marco Trevisan (Treviño) d402f1bed9 debian/libfprint-2-tod1.symbols: Update TOD symbols 2021-10-28 19:24:33 +02:00
Marco Trevisan (Treviño) 34d317bbbe debian/patches: Drop, all applied on the TOD upstream branch 2021-10-28 19:24:32 +02:00
Marco Trevisan (Treviño) f0e53af57e debian/source/lintian-overrides: Update for new TOD drivers paths 2021-10-28 19:24:31 +02:00
Marco Trevisan (Treviño) 46ece03c62 debian/libfprint-2-2.postinst: Devices triggers updated 2021-10-28 19:24:18 +02:00
Marco Trevisan (Treviño) 5a45cb5023 New upstream release 2021-10-28 19:24:17 +02:00
Marco Trevisan (Treviño) abbc365b5c Update upstream source from tag 'upstream/1.94.1+tod1'
Update to upstream version '1.94.1+tod1'
with Debian dir 7437b3331b
2021-10-28 19:24:16 +02:00
Marco Trevisan (Treviño) 8839ed6b69 New upstream version 1.94.1+tod1 2021-10-28 19:24:08 +02:00
Marco Trevisan (Treviño) 77ff30e19d tod: Mark symbols that were added in 1.90 series as part of TOD 1.0.0
Otherwise we'd cause the symbols to disappear on such versions
2021-10-28 19:22:21 +02:00
Marco Trevisan (Treviño) d2d1834b6f Merge tag 'debian/1%1.94.1-1' into ubuntu
libfprint Debian release 1:1.94.1-1
2021-10-28 18:20:45 +02:00
Marco Trevisan (Treviño) 1153fc85a5 Merge with libfprint 1.94.1 and followup fixup commits 2021-10-28 15:46:02 +02:00
Marco Trevisan (Treviño) 18ce8a4a60 Upload to unstable 2021-10-27 15:17:09 +02:00
Marco Trevisan (Treviño) a2f0a6558a Update changelog 2021-10-27 02:14:18 +02:00
Marco Trevisan (Treviño) a22ab8132b debian/libfprint-2-2.symbols: Add new symbols 2021-10-27 02:10:51 +02:00
Marco Trevisan (Treviño) 263518ceb3 debian/patches: Fix test device descriptors to get tests passing 2021-10-27 02:06:41 +02:00
Marco Trevisan (Treviño) 9ce599cb4b debian: Build-depend on gudev-1, and set back rules dir
This is needed for SPI devices
2021-10-27 02:06:41 +02:00
Marco Trevisan (Treviño) 9a699f56a1 debian/libfprint-2-2.postinst: Update to match new PIDs 2021-10-27 01:00:40 +02:00
Marco Trevisan (Treviño) dce792b5c4 debian/patches: Add support for new elan and goodix PIDs 2021-10-27 00:59:42 +02:00
Marco Trevisan (Treviño) 8ad656ceea debian/patches: Fix template struct in goodix drivers
LP: #1945296
2021-10-27 00:54:41 +02:00
Marco Trevisan (Treviño) cd3b0193f7 debian/patches: Remove all patches, they've been applied upstream 2021-10-27 00:50:08 +02:00
Marco Trevisan (Treviño) 7460ed1a3d debian/libfprint-2-2.postinst: Devices triggers updated 2021-10-27 00:36:40 +02:00
Marco Trevisan (Treviño) c2ba616309 New upstream release 2021-10-27 00:36:38 +02:00
Marco Trevisan (Treviño) c38501faa0 Update upstream source from tag 'upstream/1.94.1'
Update to upstream version '1.94.1'
with Debian dir e02e11ad9d
2021-10-27 00:36:38 +02:00
Marco Trevisan (Treviño) f3d55af43a New upstream version 1.94.1 2021-10-27 00:36:27 +02:00
Marco Trevisan (Treviño) 865f202473 debian/update-udev-triggers.sh: Fix hwdb path
It was set to a testing location for development purposes, and it got
wrongly committed.
2021-10-27 00:34:20 +02:00
Marco Trevisan (Treviño) bfa41fe183 Upload to jammy 2021-10-26 21:24:47 +02:00
Marco Trevisan (Treviño) cd4601c104 Update changelog 2021-10-26 21:24:11 +02:00
Marco Trevisan (Treviño) d845700226 debian/patches: Fix template struct in goodix drivers
LP: #1945296
2021-10-26 21:22:57 +02:00
Marco Trevisan (Treviño) 4058a81829 debian/patches: Add support for new elan, goodix and synaptics drivers
Most of the drivers only need to list new product IDs to work with new
devices, and including other changes that new devices may require.

LP: #1945296
LP: #1945298
2021-10-11 05:44:30 -04:00
Matthias KloseandMarco Trevisan (Treviño) c9bb40364e Import Debian changes 1:1.90.7+git20210222+tod1-0ubuntu3
libfprint (1:1.90.7+git20210222+tod1-0ubuntu3) impish; urgency=medium
.
  * No-change rebuild to build packages with zstd compression.
2021-10-11 04:49:57 -04:00
Marco Trevisan (Treviño) 312b75fe66 test-fp-todv1-types: Ensure we check all the enum values
We were ignoring enum values when there were gaps, so let's check that
all the values in the old version enums are present in the current one.
2021-09-04 04:13:15 +02:00
Marco Trevisan (Treviño) 125d6e276f tests: Repeat tests for TOD drivers compiled for each supported version 2021-09-04 03:20:58 +02:00
Marco Trevisan (Treviño) 4a337393a6 tests: Use more versioned types for fpi types tests
Also move images into its own header
2021-09-04 01:00:34 +02:00
Marco Trevisan (Treviño) 9c37ffa4be tests: Run TOD driver-independent tests alone 2021-09-03 20:18:36 +02:00
Marco Trevisan (Treviño) c63455d289 TOD: Add wrappers for SSM functions that are not compatible with 1.90
Expose new versioned symbols that work with previous API so that we can
keep compatibility with old drivers without having to recompile them.

We disable the GCancellable API in delayed SSM actions since that was
something that wasn't really needed and prone to errors, instead of
just re-implementing it as it was in the TOD case.
2021-09-03 20:18:36 +02:00
Marco Trevisan (Treviño) e4ef2ed7a0 tests: Do add TOD testing for SSM API
Driver is coming from the TOD drivers testing project [1].

https://gitlab.freedesktop.org/3v1n0/libfprint-tod-test-drivers
2021-09-03 19:41:17 +02:00
Marco Trevisan (Treviño) fdf86e65ec TOD: Add changed functions in libfprint 1.92, a fallback version is needed 2021-09-03 19:41:17 +02:00
Marco Trevisan (Treviño) 71827856c9 tod: Update version file to include new APIs per versions 2021-09-03 19:41:17 +02:00
Marco Trevisan (Treviño) d0aa30a435 tod: Check the message emission if the tod path isn't readable 2021-09-03 19:41:17 +02:00
Marco Trevisan (Treviño) 29b904b93d tests: Add versions check on TOD drivers based on their IDs
Recompile tod drivers using libfprint-tod-test-drivers project [1] so
that we don't have to reorder the private driver structure, plus use a
versioned driver ID and parse it to check whether a feature is supported
for such TOD test driver.

https://gitlab.freedesktop.org/3v1n0/libfprint-tod-test-drivers
2021-09-03 19:41:17 +02:00
Marco Trevisan (Treviño) 0a7473dce1 fpi-device: Do not include config.h in headers
It should be included in files requiring it only.
2021-09-02 13:43:43 +02:00
Marco Trevisan (Treviño) 4ed67f9084 build: Use host machine family from meson 2021-09-02 13:23:30 +02:00
Marco Trevisan (Treviño) 2d20c6a8f2 fpi-device: Ensure FpDeviceClass is still compatible with TODv1 ABI
Tests are ensuring it, adapt internal tests to ignore new features when
using old drivers
2021-08-28 03:07:23 +02:00
Marco Trevisan (Treviño) 2e00b03a43 Merge tag 'v1.94.0' into tod
Tag 1.94.0

Git-EVTag-v0-SHA512: 7cf9d7defb02433140f575589099569a5848ab34e8ecb0a4a90bb3c9eb1c228a16438afe1b23c381b59c1506f189a845752fead3dbd3c1c11f686cf47302cb1b
2021-08-28 02:19:40 +02:00
Marco Trevisan (Treviño) df36c66730 tod: Use dynamically defined version script
So we don't have to manage the soname manually
2021-04-14 18:15:07 +02:00
Marco Trevisan (Treviño) 35bcd4326c libfprint-tod.ver: Add new symbols to newer TOD subversion
This should be something to do every time, as it may allow to define
multiple symbol versions, if something changes upstream.
2021-04-14 18:14:35 +02:00
Marco Trevisan (Treviño) 00128e11fd README: Link to TOD README file 2021-04-13 22:35:34 +02:00
Marco Trevisan (Treviño) 81ecee3ead tests/tod-drivers: Add newly supported types 2021-04-13 22:35:34 +02:00
Marco Trevisan (Treviño) 18b3acdfb0 fpi-spi-transfer: Add structure padding 2021-04-13 22:35:34 +02:00
Marco Trevisan (Treviño) 1d7a561b0b tod-inspector: Add support reading features 2021-04-13 22:35:28 +02:00
Marco Trevisan (Treviño) a79a8d0e22 device: Keep device type ordering as default 2021-04-13 22:35:28 +02:00
Marco Trevisan (Treviño) 344d5cb2a9 fpi-device: Reduce padding on FpIdEntry to make space to new elements 2021-04-13 22:35:28 +02:00
Marco Trevisan (Treviño) c906b30cba tod: Add support for device features, keeping ABI compatibility 2021-04-13 22:35:28 +02:00
Marco Trevisan (Treviño) eb329903b4 test-fp-device-tod: Ignore deprecated functions and use new ones 2021-04-13 22:17:39 +02:00
Marco Trevisan (Treviño) 20ac5c10a4 Merge branch 'origin/master' into tod 2021-04-13 22:17:37 +02:00
Marco Trevisan (Treviño) 58756ab62e tests: Ensure that we don't break ABI with expected TODv1 structures
We can check whether each relevant structure element has not changed and
that the supported enum and flag values didn't change value.
2021-04-13 22:14:56 +02:00
Marco Trevisan (Treviño) e5e999de2c fpi-image: Add missing padding
This breaks the ABI with such TOD drivers, but we don't have any using
an image device so far, so it's a safe break.
2021-04-13 22:14:56 +02:00
Matthias KloseandMarco Trevisan (Treviño) 4f14b6e5b0 Import Debian changes 1:1.90.7+git20210222+tod1-0ubuntu2
libfprint (1:1.90.7+git20210222+tod1-0ubuntu2) hirsute; urgency=medium
.
  * Disable lto for now, failing test
    ibfprint:unit-tests+tod+fake_test_dev_tod_current / fpi-device-tod-fake_test_dev_tod_current
2021-04-02 00:51:06 +02:00
Marco Trevisan (Treviño) 447cd3f7ba fpi-assemping: Do not include unneeded headers and do not use absolute search paths 2021-03-03 19:35:16 +01:00
Marco Trevisan (Treviño) 08cf893e2e examples: Add TOD inspector tool, to do some basic analysis of TOD drivers
Will print some drivers data
2021-03-03 19:30:38 +01:00
Marco Trevisan (Treviño) 7d5dec796d Finalise changelog 2021-02-22 21:39:04 +01:00
Marco Trevisan (Treviño) 375d1e18ae Update changelog 2021-02-22 21:39:00 +01:00
Marco Trevisan (Treviño) bc8b3d497d debian/libfprint-2-2.postinst: Regenerate as per generator changes
LP: #1909023
2021-02-22 21:39:00 +01:00
Marco Trevisan (Treviño) f2dac228af debian/update-udev-triggers.sh: Ignore udevadm trigger failures
LP: #1909023
2021-02-22 21:39:00 +01:00
Marco Trevisan (Treviño) 77b9220178 debian/libfprint-2-2.symbols: Update symbols 2021-02-22 20:55:40 +01:00
Marco Trevisan (Treviño) 3f0aea923b debian/patches: Drop, they're all applied upstream 2021-02-22 20:45:38 +01:00
Marco Trevisan (Treviño) a5e2d8d7f0 debian/libfprint-2-2.postinst: Devices triggers updated 2021-02-22 20:42:18 +01:00
Marco Trevisan (Treviño) 5ef323521d New upstream release 2021-02-22 20:42:15 +01:00
Marco Trevisan (Treviño) 8ea21bb0a2 Update upstream source from tag 'upstream/1.90.7+git20210222+tod1'
Update to upstream version '1.90.7+git20210222+tod1'
with Debian dir 064359ef87
2021-02-22 20:42:15 +01:00
Marco Trevisan (Treviño) 1c73414f3c New upstream version 1.90.7+git20210222+tod1 2021-02-22 20:42:10 +01:00
Marco Trevisan (Treviño) bd2e9570f6 debian/watch: Support TOD upstream git snapshots 2021-02-22 20:41:58 +01:00
Marco Trevisan (Treviño) ffb6a00ee3 debian/update-udev-triggers.sh: Restore proper autosuspend.hwdb path
I wrongly committed it to a test location :(
2021-02-22 20:40:56 +01:00
Marco Trevisan (Treviño) 4f76dbc18f Merge tag 'debian/1%1.90.7-3' into ubuntu
libfprint Debian release 1:1.90.7-3
2021-02-22 20:35:41 +01:00
Marco Trevisan (Treviño) b65a775bae Merge tag 'upstream/1.90.7' into upstream-tod
Upstream version 1.90.7
2021-02-22 20:26:04 +01:00
Marco Trevisan (Treviño) c6da36a373 New upstream version 1.90.7+git20210222+tod1 2021-02-22 20:13:50 +01:00
Marco Trevisan (Treviño) a1ae3cfdaa meson: Bump version to 1.90.7+git20200222+tod1 2021-02-22 19:42:54 +01:00
Marco Trevisan (Treviño) 5804b25806 Merge libfprint/libfprint master branch into tod 2021-02-22 19:12:51 +01:00
Marco Trevisan (Treviño) 8b82ebeca5 Merge tag 'v1.90.7' into tod
Tag 1.90.7

Git-EVTag-v0-SHA512: 21642bcdac35b82cd3f56130603d09ebe62b321123f58ce4a491b8fa8f545ae86a7c3d670b212af474d561123efa91f0383ad416b07c3ce1d4df0d292e77bb94
2021-02-22 18:16:21 +01:00
Marco Trevisan (Treviño) 09d12b61ee debian/gbp.conf: Set back branch to debian 2021-02-02 15:49:37 +01:00
Marco Trevisan (Treviño) acb91a10df debian/patches/series: Add missing reference to the shared-library patch 2021-01-21 21:08:37 +01:00
Marco Trevisan (Treviño) 0e23cc18d4 debian/update-udev-triggers.sh: handle some minor shellcheck warnings 2021-01-21 19:59:25 +01:00
Marco Trevisan (Treviño) ec469dd2e1 Upload to experimental 2021-01-21 19:53:12 +01:00
Marco Trevisan (Treviño) 038fd70b28 Update changelog 2021-01-21 19:52:44 +01:00
Marco Trevisan (Treviño) 97b6e243b8 debian/update-udev-triggers.sh: Use perl to replace file content
envsubst is nice but may be not installed and can be confusing, so let's
use perl (+ printenv) to replace our file content.
2021-01-21 19:52:44 +01:00
Marco Trevisan (Treviño) 067020b36e debian/libfprint-2-2.postinst: Upgrade as per upstream hwdb
Blacklisted devices can be now removed from the trigger list as we don't
add them to plugdev anymore.
2021-01-21 19:34:13 +01:00
Marco Trevisan (Treviño) 4c4b444f21 debian: Generate postinst devices list automatically at gbp import phase
Alternatively provide a script to keep the post-inst script updated
2021-01-21 19:34:13 +01:00
Marco Trevisan (Treviño) b97f10d63d debian/patches: Explicitly mark libfprint as a shared library 2021-01-21 19:34:13 +01:00
Marco Trevisan (Treviño) 20d9b79584 New upstream version 1.90.7+git1 2021-01-21 19:23:22 +01:00
Marco Trevisan (Treviño) 327a8047b9 New upstream version 1.90.7+git1 2021-01-21 19:17:25 +01:00
Marco Trevisan (Treviño) 742513ee87 New upstream version 1.90.7+git1 2021-01-21 19:13:37 +01:00
Marco Trevisan (Treviño) e13a070cb5 debian/rules: Don't remove the meson generated private values from pc file
This is now generated correctly by upstream, so no need to drop anything
from it.
2021-01-21 17:41:02 +01:00
Marco Trevisan (Treviño) 0978747035 debian/rules: Manually set udev hwdb directory (was rules dir before) 2021-01-21 17:24:41 +01:00
Marco Trevisan (Treviño) eb21b898aa libfprint-2-2.install: Install hwdb file 2021-01-21 17:24:41 +01:00
Marco Trevisan (Treviño) 5f902c9298 debian/rules: Do not autorename upstream rules file anymore
It's not there, while there's no point to rename the hwdb one.
2021-01-21 17:24:41 +01:00
Marco Trevisan (Treviño) 3ccd267ad2 debian/patches: Use hwdb to store device autosuspend rules and drop debian specifics
Upstream will use an hwdb to store the device autosuspend (that will be
included in systemd also, so libfprint packagin may stop shipping it at
later point), so use it earlier.

Drop the debian specific rules to set the devices part of the `plugdev`
group as such devices should not be ever readable by an user, but the
access should be managed through a libfprint-based service (frpintd at
the date).
2021-01-21 17:24:34 +01:00
Marco Trevisan (Treviño) f2c4614779 gbp.conf: Prepare for experimental branching 2021-01-21 17:15:13 +01:00
Marco Trevisan (Treviño) c8a14db3d5 Upload to unstable 2021-01-21 17:10:57 +01:00
Marco Trevisan (Treviño) 8960e7f974 Update changelog 2021-01-21 17:10:06 +01:00
Marco Trevisan (Treviño) 8b7f8dc77b debian/libfprint-2-2.postinst: Regenerate the list based on new IDs 2021-01-21 17:06:51 +01:00
Marco Trevisan (Treviño) 702c58152c debian/patches: Skip udev rules tests when not all drivers are compiled 2021-01-21 17:01:50 +01:00
Marco Trevisan (Treviño) dd326c90c2 Upload to unstable 2021-01-21 13:38:59 +01:00
Marco Trevisan (Treviño) 8e5b192b00 Update changelog 2021-01-21 13:38:54 +01:00
Marco Trevisan (Treviño) eaff869235 debian/patches: Ensure that umockdev tests will pass with libusb 1.0.24
Closes: #977848, #978256
2021-01-21 13:32:48 +01:00
Marco Trevisan (Treviño) 36e8ef7ad9 debian/patches: Include upstream udev fixes and use hardcoded rules
Fixes the multi-arch file conflict
2021-01-21 13:29:50 +01:00
Marco Trevisan (Treviño) a342ae72af debian/patches: Refresh, dropping merged 2021-01-21 00:31:17 +01:00
Marco Trevisan (Treviño) 90142ed596 New upstream release 2021-01-21 00:09:14 +01:00
Marco Trevisan (Treviño) 261ab7cc82 Update upstream source from tag 'upstream/1.90.7'
Update to upstream version '1.90.7'
with Debian dir 6c3497e22e
2021-01-21 00:09:14 +01:00
Marco Trevisan (Treviño) 0ac97568dc New upstream version 1.90.7 2021-01-21 00:09:08 +01:00
Marco Trevisan (Treviño) ef5204c1e4 Finalise changelog 2020-12-10 21:37:13 +01:00
Marco Trevisan (Treviño) a09ac95adf Update changelog 2020-12-10 21:37:09 +01:00
Marco Trevisan (Treviño) baa5dcef0f debian/patches: Do not support drivers known to fail in big endian 2020-12-10 21:35:55 +01:00
Marco Trevisan (Treviño) 4b2440eecd Upload to unstable 2020-12-10 21:32:49 +01:00
Marco Trevisan (Treviño) 81cb0c8848 Update changelog 2020-12-10 21:27:57 +01:00
Marco Trevisan (Treviño) 7837f05ae4 debian/patches: Do not support drivers known to fail in big endian 2020-12-10 21:27:30 +01:00
Marco Trevisan (Treviño) 059911bb81 Finalise changelog 2020-12-10 17:26:27 +01:00
Marco Trevisan (Treviño) 3ad27425ce Update changelog 2020-12-10 17:21:54 +01:00
Marco Trevisan (Treviño) 8a76bc3e6f debian/rules: sync with debian (no change) 2020-12-10 17:20:42 +01:00
Marco Trevisan (Treviño) c8aed5e8a6 debian/control: Remove Didier Raboud from uploaders
2020-12-04 10:30:09 @bigon:
  Trevinho: I just found an old mail from Odyx/Didier asking me to remove him
  from the uploaders, maybe you could do that and add yourself if you plan to
  maintain the two packages in debian.
2020-12-10 17:19:11 +01:00
Marco Trevisan (Treviño) 1da37a2253 Mark libfprint-2-doc as Multi-Arch: foreign 2020-12-10 17:18:27 +01:00
Marco Trevisan (Treviño) 181f160f3c New upstream release 2020-12-10 17:17:55 +01:00
Marco Trevisan (Treviño) 37afa510d9 Update upstream source from tag 'upstream/1.90.6+tod1'
Update to upstream version '1.90.6+tod1'
with Debian dir 778e53fbe6
2020-12-10 16:28:08 +01:00
Marco Trevisan (Treviño) 2e18bb90ba New upstream version 1.90.6+tod1 2020-12-10 16:28:03 +01:00
Benjamin BergandMarco Trevisan (Treviño) 4b675a0691 nbis: Disable array-parameter and array-bounds warnings
NBIS just does weird things and while the array-parameter warning is
easy to fix, the other is not trivial. So disable these warnings so that
we can still build using newer GCC versions.
2020-12-10 16:22:26 +01:00
Marco Trevisan (Treviño) 52d30a88fc tests: Ensure we prepend the libfprint libraries path when testing TOD 2020-12-10 16:21:11 +01:00
Marco Trevisan (Treviño) f8cb985476 Merge tag 'v1.90.6' into tod
Tag 1.90.6

Git-EVTag-v0-SHA512: 1cca84a89332a674d822476e587e1d9f30dc11bfff13724548ec0be66ab32f910fb5e7a7c9403c9a813538fdd9e86661105af8e2a4865b0b30d301601c7bddab
2020-12-10 16:10:39 +01:00
Marco Trevisan (Treviño) b9ecbd5b2d Upload to unstable 2020-12-10 15:58:37 +01:00
Marco Trevisan (Treviño) ab4a6be813 Update changelog 2020-12-10 15:58:28 +01:00
Marco Trevisan (Treviño) d43f0867b7 debian/control: Remove Didier Raboud from uploaders
2020-12-04 10:30:09 @bigon:
  Trevinho: I just found an old mail from Odyx/Didier asking me to remove him
  from the uploaders, maybe you could do that and add yourself if you plan to
  maintain the two packages in debian.
2020-12-10 15:45:50 +01:00
Marco Trevisan (Treviño) 588c4a15b0 Mark libfprint-2-doc as Multi-Arch: foreign 2020-12-10 15:45:50 +01:00
Marco Trevisan (Treviño) 74bf7fb086 debian/patches: Add upstream patch to avoid nbis library warnings
These have been checked to be harmless upstream
2020-12-10 15:45:50 +01:00
Marco Trevisan (Treviño) ec4cde6ffb debian/patches: Refresh 2020-12-10 15:26:55 +01:00
Marco Trevisan (Treviño) 1789914aad New upstream release 2020-12-10 13:55:34 +01:00
Marco Trevisan (Treviño) 6c8d013c9d Update upstream source from tag 'upstream/1.90.6'
Update to upstream version '1.90.6'
with Debian dir b7eff36961
2020-12-10 13:45:13 +01:00
Marco Trevisan (Treviño) cf4df8292e New upstream version 1.90.6 2020-12-10 13:45:07 +01:00
Marco Trevisan (Treviño) 621550f2be Finalise changelog 2020-12-04 03:57:04 +01:00
Marco Trevisan (Treviño) 0c7eb81d6a Update changelog 2020-12-04 03:56:00 +01:00
Marco Trevisan (Treviño) ab834e1743 debian/libfprint.lintian-overrides: Add override for binary TOD for testing 2020-12-04 03:56:00 +01:00
Marco Trevisan (Treviño) e35391c976 debian/libfprint-2-tod1.symbols: Add new symbols 2020-12-04 03:56:00 +01:00
Marco Trevisan (Treviño) f7854bf953 debian/libfprint-2-2.symbols: Add new symbols 2020-12-04 03:56:00 +01:00
Marco Trevisan (Treviño) b49cdf6118 debian/rules: Increase testing timeout
As default might not be enough in some archs
2020-12-04 03:56:00 +01:00
Marco Trevisan (Treviño) cc3a29ca47 debian: Switch to debhelper 13 and use its features
As per this restrict more the .install files wilcards
2020-12-04 03:56:00 +01:00
Marco Trevisan (Treviño) 77351bf47d debian/rules: Ignore failures in s390x as it now builds and tests correctly 2020-12-04 02:49:35 +01:00
Marco Trevisan (Treviño) aeb0878ee4 Add myself to Uploaders 2020-12-04 02:49:10 +01:00
Marco Trevisan (Treviño) 8cd34e8b57 debian/patches: Use gbp pq topics for debian-specific patches 2020-12-04 02:47:53 +01:00
Marco Trevisan (Treviño) 68c377ae1e debian/patches: Drop patches applied upstream 2020-12-04 02:46:24 +01:00
Marco Trevisan (Treviño) 0849cb0476 New upstream release 2020-12-04 02:44:12 +01:00
Marco Trevisan (Treviño) 8d7628ba0f Update upstream source from tag 'upstream/1.90.5+tod1'
Update to upstream version '1.90.5+tod1'
with Debian dir b9a5b8de31
2020-12-04 02:44:12 +01:00
Marco Trevisan (Treviño) e84208896c New upstream version 1.90.5+tod1 2020-12-04 02:44:07 +01:00
Marco Trevisan (Treviño) 14d24c49f8 debian/control: Mark libfprint-2-tod-dev as Multi-Arch: same 2020-12-04 02:42:01 +01:00
Laurent BigonvilleandMarco Trevisan (Treviño) 39927ef448 debian/control: Mark libfprint-2-dev as Multi-Arch: same 2020-12-04 02:41:18 +01:00
Laurent BigonvilleandMarco Trevisan (Treviño) 44807e379a debian/control: Bump Standards-Version to 4.5.1 (no further changes) 2020-12-04 02:41:03 +01:00
Marco Trevisan (Treviño) 80cf417b30 tests: Check if loading a pre-built binary keep working with libfprint
The libfprint tod fake library is built using using libtod v1.90.1+tod1
and we need to ensure that it will continue working until we won't
change ABI/API.
2020-12-04 02:16:16 +01:00
Marco Trevisan (Treviño) 7b0df77c49 tests: Get tod driver name from env variable 2020-12-04 02:06:54 +01:00
Marco Trevisan (Treviño) 1613c0de43 fp-device: Return valid finger status value on error
Not that the two enums have different value, but indeed the type is
wrong.
2020-12-04 00:53:29 +01:00
Marco Trevisan (Treviño) 4da4a7041a fp-device: Ensure finger status is set to proper type on property getter
Finger status is a flag not an enum.

Add tests.
2020-12-04 00:49:53 +01:00
Marco Trevisan (Treviño) c9579ab21b test: Run all the fpi-device tests with the dynamically loaded TOD driver
We can ensure better that it works as expected repeating all the device
tests for it too.

The nice part is that we can just do this by re-defininig its GType as
the gtype of the loaded driver.
2020-12-03 04:38:15 +01:00
Marco Trevisan (Treviño) 9cbb3e5f55 tests: Isolate more the TOD tests so that we build the driver without clashes 2020-12-03 04:35:41 +01:00
Marco Trevisan (Treviño) d83453de02 tests: Move tod context creation into test-utils-tod library 2020-12-03 02:39:33 +01:00
Marco Trevisan (Treviño) 99063246b7 fpi-image-device: Reorder image state not to change values
We need this to avoid breaking already present TOD image devices
drivers.
2020-12-03 02:05:08 +01:00
Marco Trevisan (Treviño) 7dc2cbf8d9 fp-print: Don't byte-swap two times the NBIS array contents
When serializing an image print in big endian machine we ended up
swapping the arrays contents two times, first when adding the values and
eventually when calling g_variant_byteswap which already handles this
properly.

With this, we get the test passing into s390x.

Fixes: #236
2020-12-03 01:34:45 +01:00
Marco Trevisan (Treviño) bbd113594d test-fpi-device: Always check the return values for the API calls
Ensure that the return value of the API calls match the expected one,
as we need to ensure that it also matches with the error/no-error case.
2020-12-03 01:34:44 +01:00
Marco Trevisan (Treviño) 11d4bc2981 fpi-device: Return proper type on identification success
Identify function is supposed to propagate a boolean value, but we make
it return an integer instead on idle, this can be normally the same in
most of architectures, but not in BE ones.

So, make it return the proper type.
Fixes test failures in s390x.

Related to #236
2020-12-03 01:34:42 +01:00
Aris LinandMarco Trevisan (Treviño) f33a282bb0 synaptics: add support PID 0xE7 2020-12-03 01:34:35 +01:00
Marco Trevisan (Treviño) a3aadd8398 Merge tag 'v1.90.5' into tod
Tag 1.90.5

Git-EVTag-v0-SHA512: 05650e2a6cf2290542936271b140e79015f56e35fbffc4677e37bf30963b2a38b49eb699db80cee6677ff348ea9e8548514a9f1e06a767269e44d7fac3334c45
2020-12-03 01:32:45 +01:00
Marco Trevisan (Treviño) bb38a8c99c debian/gbp.conf: Include suggested settings by GNOME team
Even if libfprint is not part of GNOME I think these settings are good
practice anyways.
2020-12-02 21:16:41 +01:00
Marco Trevisan (Treviño) cb0eb5c5be debian/rules: Increase testing timeout
As default might not be enough in some archs
2020-12-02 20:58:21 +01:00
Marco Trevisan (Treviño) 776c789533 debian: Switch to debhelper 13 and use its features
As per this restrict more the .install files wilcards
2020-12-02 20:58:21 +01:00
Marco Trevisan (Treviño) 899d5c309f debian/rules: Enable tests in s390x as it now builds and tests correctly 2020-12-02 19:01:08 +01:00
Marco Trevisan (Treviño) 632a2abf62 Upload to unstable 2020-12-02 17:53:32 +01:00
Marco Trevisan (Treviño) 616dbcaad6 Update changelog 2020-12-02 17:52:57 +01:00
Marco Trevisan (Treviño) 0494815d57 Add myself to Uploaders 2020-12-02 17:52:11 +01:00
Marco Trevisan (Treviño) 4f85d9e1b3 debian/patches: Don't byte-swap two times the NBIS print array contents
Fixes virtual-image test in libfprint for s390x
2020-12-02 17:48:28 +01:00
Marco Trevisan (Treviño) f58ac0a499 debian/patches: Properly handle identify return value and add tests
This fixes fprintd test failures in s390x
2020-12-02 17:47:37 +01:00
Marco Trevisan (Treviño) 5cc6a64502 Upload to unstable 2020-12-02 05:11:33 +01:00
Marco Trevisan (Treviño) 6a22714677 Update changelog 2020-12-02 05:09:33 +01:00
Marco Trevisan (Treviño) 457f8c818c debian/patches: Use gbp pq topics for debian-specific patches 2020-12-02 05:09:33 +01:00
Marco Trevisan (Treviño) e696d77514 New upstream release 2020-12-02 04:57:16 +01:00
Marco Trevisan (Treviño) c083be9ed6 Update upstream source from tag 'upstream/1.90.5'
Update to upstream version '1.90.5'
with Debian dir af3de02221
2020-12-02 04:53:48 +01:00
Marco Trevisan (Treviño) 5f93ff8536 New upstream version 1.90.5 2020-12-02 04:53:44 +01:00
Laurent Bigonville 90f41d13a0 debian/control: Mark libfprint-2-dev as Multi-Arch: same 2020-12-01 12:12:25 +01:00
Laurent Bigonville d44b1bacbd Release to unstable 2020-12-01 11:38:38 +01:00
Laurent Bigonville 82286e7496 debian/control: Bump Standards-Version to 4.5.1 (no further changes) 2020-12-01 11:35:11 +01:00
Laurent Bigonville efa3c0cbb9 Merge branch 'debian' into 'debian'
Update to libfprint 1.90.4

See merge request debian/libfprint!4
2020-12-01 10:29:12 +00:00
Marco Trevisan (Treviño) 4d978f23d1 debian/rules: Also build the virtual drivers, as they're useful for testing 2020-11-30 20:28:48 +01:00
Marco Trevisan (Treviño) f59e608351 Update changelog 2020-11-30 20:25:35 +01:00
Marco Trevisan (Treviño) c8503f301a Update changelog 2020-11-30 20:24:37 +01:00
Marco Trevisan (Treviño) 2866d8a247 debian/patches: Reorder to give upstream more priority 2020-11-30 20:24:11 +01:00
Marco Trevisan (Treviño) 0c9f7cf5ea debian/patches: Don't use power-save mode for USB controller
LP: #1906296
2020-11-30 20:14:09 +01:00
Marco Trevisan (Treviño) b27542b02e Update changelog 2020-11-30 19:58:52 +01:00
Marco Trevisan (Treviño) c595b5b170 debian/libfprint-2-2.symbols: Add new symbols 2020-11-27 16:48:03 +01:00
Marco Trevisan (Treviño) 71676bd2e8 debian/rules: Also build the virtual drivers, as they're useful for testing
Mostly it allows testing fprintd fully.
2020-11-27 16:35:08 +01:00
Marco Trevisan (Treviño) aff0fe6553 Update upstream source from tag 'upstream/1.90.4'
Update to upstream version '1.90.4'
with Debian dir 1ef71fb7ce
2020-11-27 16:28:28 +01:00
Marco Trevisan (Treviño) 480451d784 New upstream version 1.90.4 2020-11-27 16:28:21 +01:00
Marco Trevisan (Treviño) 8ab27bb03f Finalise changelog 2020-11-25 19:18:20 +01:00
Marco Trevisan (Treviño) bdaf73c01d Update changelog 2020-11-25 19:17:58 +01:00
Marco Trevisan (Treviño) aa75b6f027 debian/patches: Add identification support to synaptics driver
It allows to unlock / log-in with any finger.

LP: #1905600
2020-11-25 19:04:33 +01:00
Marco Trevisan (Treviño) e8d6f1bd01 debian/patches: Ensure we do not waste power for unsupported devices
LP: #1905603
2020-11-25 19:04:33 +01:00
Marco Trevisan (Treviño) 3c35c01af9 debian/patches: Fix vfs301 verification using device pointer on callbacks
LP: #1905597
2020-11-25 18:56:26 +01:00
Marco Trevisan (Treviño) 576beb1ff5 debian/patches: Add support for new Synaptics devices IDs
LP: #1905593
2020-11-25 18:56:08 +01:00
Marco Trevisan (Treviño) 32767f4e16 debian/patches: Properly handle aes3k devices, resubmitting commands
This also needs proper commands cancellation

LP: #1897613
2020-11-25 18:15:09 +01:00
Marco Trevisan (Treviño) e4d2eaeff7 debian/patches: Refresh 2020-11-25 18:15:05 +01:00
Marco Trevisan (Treviño) de761cd741 debian/gbp.conf: Include debian's GNOME team preferred settings 2020-11-25 18:06:51 +01:00
Laurent Bigonville 3fd3cf5ac5 Release to unstable 2020-11-15 16:06:27 +01:00
Laurent Bigonville 9799bc4161 New upstream release 2020-11-15 13:48:58 +01:00
Laurent Bigonville b875f55302 Update upstream source from tag 'upstream/1.90.3'
Update to upstream version '1.90.3'
with Debian dir f057e302e6
2020-11-15 13:48:25 +01:00
Laurent Bigonville 3300d5cde7 New upstream version 1.90.3 2020-11-15 13:48:21 +01:00
Laurent Bigonville 004d7ab7d5 Update debian/watch now that upstream relies on tags for the released tarballs
See: https://gitlab.freedesktop.org/libfprint/libfprint/-/issues/329
2020-11-15 13:46:50 +01:00
Laurent Bigonville 3892d2bd2c Merge remote-tracking branch '3v1n0/debian' into debian 2020-11-13 10:56:16 +01:00
Laurent Bigonville 1910e2ed79 Update upstream source from tag 'upstream/1.90.2'
Update to upstream version '1.90.2'
with Debian dir b87656b655
2020-11-13 10:43:11 +01:00
Laurent Bigonville 3feb85af19 New upstream version 1.90.2 2020-11-13 10:43:04 +01:00
Marco Trevisan (Treviño) 8366e397d8 Finalise changelog 2020-09-24 06:22:04 +02:00
Marco Trevisan (Treviño) db56b71caf Update changelog 2020-09-24 06:22:04 +02:00
Marco Trevisan (Treviño) 4cf41fcd24 debian/libfprint-2-tod1.symbols: Added new GType symbols 2020-09-24 06:21:07 +02:00
Marco Trevisan (Treviño) dfecdf9ff3 Update upstream source from tag 'upstream/1.90.3+tod1'
Update to upstream version '1.90.3+tod1'
with Debian dir 26b22ab421
2020-09-24 06:06:17 +02:00
Marco Trevisan (Treviño) 2ef6d1886b New upstream version 1.90.3+tod1 2020-09-24 06:06:08 +02:00
Marco Trevisan (Treviño) 52410c3310 Merge tag 'v1.90.3' into tod
Tag 1.90.3

Git-EVTag-v0-SHA512: 67e0d995146cb82107480520589b6c90583602b3945e03f71c2fdb5f0f2c681143c67e824e0572ae93995e75112c402efaad101f01be5e86a75389e4f1421821
2020-09-24 05:45:35 +02:00
Marco Trevisan (Treviño) 16c780c302 debian/changelog: Fix bug number
Damned copy-paste (and my vimrc...)!
2020-06-19 19:34:27 +02:00
Marco Trevisan (Treviño) 349e30e3ae Finalise changelog 2020-06-19 17:38:55 +02:00
Marco Trevisan (Treviño) 13dcb8620b Update changelog 2020-06-19 17:37:26 +02:00
Marco Trevisan (Treviño) 70f4f2c5a4 libfprint-2-tod1.symbols: Add new TOD symbols
No ABI change
2020-06-19 17:37:26 +02:00
Marco Trevisan (Treviño) 5e6ce9fe55 debian/rules: Be strictier about symbol changes 2020-06-19 17:37:26 +02:00
Marco Trevisan (Treviño) dc0371256f debian/rules: Be strictier about symbol changes 2020-06-19 17:35:01 +02:00
Marco Trevisan (Treviño) ef37ef2004 debian/control: Add missing libfprint-2-tod-dev dependencies
Compiling drivers with TOD requires various libraries that we were not
properly listing.

This is based on the libfprint-2-tod-1.pc content file.

LP: #1884267
2020-06-19 17:11:19 +02:00
Marco Trevisan (Treviño) 28bbd94ec9 git_reading_pointer.patch: Dopping 2020-06-19 16:44:18 +02:00
Marco Trevisan (Treviño) 369e91feb4 Update upstream source from tag 'upstream/1.90.2+tod1'
Update to upstream version '1.90.2+tod1'
with Debian dir 65dc429037
2020-06-19 16:43:04 +02:00
Marco Trevisan (Treviño) 1d94579d84 New upstream version 1.90.2+tod1 2020-06-19 16:42:56 +02:00
Marco Trevisan (Treviño) 0e123d0752 Merge tag 'v1.90.2' into tod
Tag 1.90.2
2020-06-19 16:27:51 +02:00
Marco Trevisan (Treviño) 7c359b9135 Update changelog 2020-06-19 16:17:54 +02:00
Marco Trevisan (Treviño) 7b9a8e0dfb git_reading_pointer.patch: Dopping 2020-06-19 16:17:54 +02:00
Marco Trevisan (Treviño) 2ba95f2ad5 Update upstream source from tag 'upstream/1.90.2'
Update to upstream version '1.90.2'
with Debian dir b87656b655
2020-06-19 15:48:35 +02:00
Marco Trevisan (Treviño) 748bfa09ce New upstream version 1.90.2 2020-06-19 15:48:26 +02:00
Sebastien BacherandMarco Trevisan (Treviño) bb4844012b Import Debian changes 1:1.90.1+tod1-0ubuntu4
libfprint (1:1.90.1+tod1-0ubuntu4) focal; urgency=medium

  * Rebuild with the new libgusb

libfprint (1:1.90.1+tod1-0ubuntu3) focal; urgency=medium

  * Rebuild with the current libgusb (lp: #1867639)
2020-06-11 20:51:00 +02:00
Evgeny GagauzandMarco Trevisan (Treviño) d6809bf457 vfs0050: Stop capture after a timeout happens
If a transfer errors out then actual_length is negative. The only error
that is not caught is a timeout error, which should also result in the
SSM to move to the next state.
2020-05-15 17:56:30 +02:00
Benjamin BergandMarco Trevisan (Treviño) bdb7ebc317 upekts: Fix possible NULL pointer access
Reported by scan-build.
2020-05-15 17:55:02 +02:00
Benjamin BergandMarco Trevisan (Treviño) 79306adc24 vfs5011: Prevent too small images
We need more than 1 line for assembling, but in general, we should
have a reasonable amount of lines. So use the width in the hope we'll
get an image that is about square at least.

Closes: #135
2020-05-15 17:52:32 +02:00
Benjamin BergandMarco Trevisan (Treviño) 6c56e0369d upekts: Fix regression during initialisation
The driver has two helper functions to format a command. In one case,
the function was accidentally changed during the port to the new driver
APIs.

See https://bugzilla.redhat.com/show_bug.cgi?id=1832229
2020-05-15 17:52:10 +02:00
Marco Trevisan (Treviño) 737d41ee43 image-device: Terminate the current action with error on print failure
If we fail when setting the scanned image to a print, we'll have a fatal
error, in such case we can terminate the current action and deactivate the
device.
2020-05-15 17:50:18 +02:00
Marco Trevisan (Treviño) 1a2e525039 image: Return an error if we got an empty or NULL minutiae array
In some cases nbim's get_minutiae returns no minutiae without providing an
error code, and if this happens we would crash in the task callback function
as we would try to deference the data->minutiae pointer.

Related to: #251
2020-05-15 17:50:09 +02:00
Marco Trevisan (Treviño) 66a2df595f etes603: Return TOO_SHORT retry error for small images
If the image height is less than the sensor horizontal resolution, then
return a retry error rather than trying to submit the image for further
processing.

Related to: #251
2020-05-15 17:50:04 +02:00
Benjamin BergandMarco Trevisan (Treviño) 61efd09515 image: Check for task success rather than just cancellation
The minutiae detection might fail and we must not copy any data at that
point. So check g_task_had_error to ensure that we only do so when the
task was successful.

Fixes: #251
2020-05-15 17:49:58 +02:00
Bastien NoceraandMarco Trevisan (Treviño) 72115bff04 upekts: Fix memory leak
Don't allocate a new finger print structure,
the fpi_device_get_enroll_data() just below will overwrite it.
2020-05-15 17:47:39 +02:00
Bastien NoceraandMarco Trevisan (Treviño) 3722c875ec vfs0050: Fix incorrect destructor for GError 2020-05-15 17:46:04 +02:00
Bastien NoceraandMarco Trevisan (Treviño) ee877259d7 aes1610: Fix memory leak
Fix small memory leak when reading some data that's not going to be
processed.
2020-05-15 17:45:50 +02:00
Iain Lane 657dffe962 Finalise changelog 2020-03-03 09:21:37 +00:00
Iain Lane e67392d535 Update changelog 2020-03-03 08:42:22 +00:00
Iain Lane 209f0ade93 Fix the version in the symbols file
Gbp-Dch: Ignore
2020-03-03 08:42:20 +00:00
Iain Lane 91badb1f6e Rename the .install / .symbols files too
Gbp-Dch: Ignore
2020-03-03 08:33:04 +00:00
Marco Trevisan (Treviño) f791577134 debian/control: Make package to match soname, rename to libfprint-2-tod1 2020-03-03 09:01:27 +01:00
Iain Lane 3029be82d8 Finalise changelog 2020-03-02 17:10:54 +00:00
Iain Lane 1b8614c25f Update changelog 2020-03-02 17:10:54 +00:00
Iain Lane f9cb4dc91c gbp.conf: Specify ubuntu tag pattern
Gbp-Dch: Ignore
2020-03-02 17:10:54 +00:00
Iain Lane 27cda550a6 debian/libfprint-2-tod-1.symbols: Add +tod1 version
Gbp-Dch: Ignore
2020-03-02 16:43:17 +00:00
Iain Lane 9b19329530 control: Point Vcs-* to salsa/ubuntu-dev-team/libfprint 2020-03-02 15:50:26 +00:00
Marco Trevisan (Treviño) f164d4f4cb Update changelog 2020-02-28 18:19:25 +01:00
Marco Trevisan (Treviño) a8e81cdabb debian/control: Point Vcs tag to the ubuntu branch 2020-02-28 18:18:32 +01:00
Marco Trevisan (Treviño) 57790cf413 debian/README.tod.md: Added informations about the TOD fork 2020-02-28 17:58:07 +01:00
Marco Trevisan (Treviño) 453aed42d6 debian/control: Set ubuntu as maintainer 2020-02-28 17:58:07 +01:00
Marco Trevisan (Treviño) a93bdd27d4 debian: Add libfprint-2-tod library and headers
Add packaging for libfprint-TOD
2020-02-28 17:58:07 +01:00
Marco Trevisan (Treviño) 562401943b Update upstream source from tag 'upstream/1.90.1+tod1'
Update to upstream version '1.90.1+tod1'
with Debian dir c02802d539
2020-02-28 17:56:54 +01:00
Marco Trevisan (Treviño) 0442d58a11 New upstream version 1.90.1+tod1 2020-02-28 17:56:53 +01:00
Marco Trevisan (Treviño) b1cf057468 Bump libfprint-tod version to v1.90.1+tod1 2020-02-28 17:49:44 +01:00
Marco Trevisan (Treviño) b2a78ddadc README.tod.md: Add a basic readme file 2020-02-28 17:49:44 +01:00
Marco Trevisan (Treviño) d9e208a0d7 debian/watch: Monitor libfprint-tod versions only 2020-02-28 17:11:21 +01:00
Marco Trevisan (Treviño) 0646cc7b66 debian/gbp.conf: Use 'upstream-tod' branch as our upstream branch 2020-02-28 17:11:21 +01:00
Marco Trevisan (Treviño) 3db8cec669 debian/gbp.conf: Track ubuntu branch 2020-02-28 15:59:30 +01:00
Laurent Bigonville 18fd52457d Release to experimental 2020-02-27 16:28:59 +01:00
Marco Trevisan (Treviño) 19225aaa3e meson: Add fpi-compat.h to the private headers 2020-02-27 06:04:20 +01:00
Marco Trevisan (Treviño) 7b7fc2423e tod: Simplify the lib versioning as per upstream libname based on soname
No need to keep track of both revisions, as now that's part of the name
2020-02-27 05:58:33 +01:00
Marco Trevisan (Treviño) 337fe867e9 tod-shared-loader: Only allow drivers starting with "lib" prefix 2020-02-27 05:26:32 +01:00
Marco Trevisan (Treviño) 49fd3a5035 Merge tag 'v1.90.1' into tod
Tag 1.90.1
2020-02-27 05:24:32 +01:00
Sebastien Bacher fd87b0daf6 Use the correct indentation for the previous changes 2020-02-24 17:31:53 +01:00
Sebastien Bacher 21a02ce472 * debian/rules:
- don't fail the build on s390x test results, upstream stated that
    fixing those is low priority for them since there is no real
    usecase for fingerprint authentification on that architecture.
2020-02-24 17:30:38 +01:00
Sebastien Bacher e2a4e3900e * debian/patches/git_reading_pointer.patch:
- backport an upstream fix for a test issue
2020-02-24 17:22:39 +01:00
Laurent Bigonville 6392dbcb80 debian/control: Add libcairo-dev and python3 to build-dependencies as they are explicitly required for some tests 2020-02-13 17:37:30 +01:00
Laurent Bigonville cb5346069f Release to unstable 2020-02-13 16:36:07 +01:00
Laurent Bigonville acbab37922 d/p/udev-rules-creation-add-Debian-specifics.patch: Avoid unprivileged users to be able to read the devices, this is not necessary and could lead to fingerprint images being captured. 2020-02-13 11:21:19 +01:00
Laurent Bigonville 477213a6c9 debian/control: Bump Standards-Version to 4.5.0 (no further changes) 2020-02-13 11:17:48 +01:00
Laurent Bigonville d0ddfbfa4f The soname changed again, adjust it accordingly 2020-02-13 11:17:48 +01:00
Laurent Bigonville bca8ec86b8 debian/gbp.conf: Upstream tags have changed format 2020-02-13 11:17:48 +01:00
Laurent Bigonville 338dae9dc4 New upstream release (1.90.1)
New upstream release (1.90.1) and bump libglib2.0-dev and meson minimal versions
2020-02-13 11:17:43 +01:00
Laurent Bigonville b5c714185d Update upstream source from tag 'upstream/1.90.1'
Update to upstream version '1.90.1'
with Debian dir 0b911193c7
2020-02-12 18:13:09 +01:00
Laurent Bigonville b3d4a61194 New upstream version 1.90.1 2020-02-12 18:13:06 +01:00
Laurent Bigonville 6851a9643e debian/control: Drop libxv-dev from the build-dep, not needed anymore 2020-01-11 02:02:54 +01:00
Laurent Bigonville 4e33d1dd28 Update debian/libfprint2.postinst for the new supported readers 2020-01-11 02:02:10 +01:00
Laurent Bigonville df2a530b20 debian/patches/udev-rules-creation-add-Debian-specifics.patch: credit Sebastien Bacher 2020-01-11 02:02:04 +01:00
Laurent Bigonville 053fc7f489 debian/control: Build-Depends on python3-cairo, python3-gi, umockdev for the testsuite 2020-01-11 01:51:49 +01:00
Laurent Bigonville 153a519a41 debian/control: Bump Standards-Version to 4.4.1 (no further changes) 2020-01-10 20:34:23 +01:00
Laurent Bigonville 3c023b7b7a Add gobject-introspection and libgirepository1.0-dev to the build-dependencies and install the GObject introspection bindings 2020-01-10 20:34:23 +01:00
Laurent Bigonville 6e21b46f55 Bump the soname to libfprint2 2020-01-10 20:34:22 +01:00
Laurent Bigonville e8fe42536e Bump debhelper compatibility version to 12 2020-01-10 20:34:07 +01:00
Laurent Bigonville 1751baec91 debian/patches/udev-rules-creation-add-Debian-specifics.patch: refreshed 2020-01-10 20:33:45 +01:00
Laurent Bigonville 50e8754206 Drop d/patches/kFreeBSD_FTBFS_add_ETIME_definition.patch and d/patches/use-non-versionned-libusbh-path.patch, not needed anymore 2020-01-10 20:33:08 +01:00
Laurent Bigonville c8677bedbf New upstream release
* New upstream release
  - Replace libusb-1.0 build-dependency by gusb and add libgusb-doc to the
    Build-Depends-Indep
2020-01-10 03:08:50 +01:00
Laurent Bigonville e926421740 Update upstream source from tag 'upstream/1.90.0'
Update to upstream version '1.90.0'
with Debian dir 70b1bcbdcc
2020-01-10 02:21:53 +01:00
Laurent Bigonville 3f38ffd3bf New upstream version 1.90.0 2020-01-10 02:21:50 +01:00
Marco Trevisan (Treviño) edd5d08bed Merge remote-tracking branch 'origin/master' into tod 2020-01-08 19:04:08 +01:00
Marco Trevisan (Treviño) d078c78171 fpi: Add paddings to the private structs 2019-12-19 15:03:17 +01:00
Marco Trevisan (Treviño) 4e972724a8 fp-image: Remove config.h inclusion in fpi-header 2019-12-19 15:03:17 +01:00
Marco Trevisan (Treviño) d998fb436e tests: Add TOD unit tests re-using the fake-driver 2019-12-19 15:03:16 +01:00
Marco Trevisan (Treviño) 29be067297 TOD: Add TOuch Drivers loader 2019-12-19 15:03:16 +01:00
Laurent Bigonville 17913ecd04 Release to unstable 2019-08-23 17:30:04 +02:00
Laurent Bigonville 755b06448f Run wrap-and-sort 2019-08-23 17:24:14 +02:00
Laurent Bigonville ec32735d32 debian/libfprint0.postinst: Call udevadm --trigger also for the new supported readers 2019-08-23 17:19:27 +02:00
Laurent Bigonville 6e64a6b16a Revert "debian/rules: Install the NEWS file as the upstream changelog"
This reverts commit 6a1a956029.
2019-08-23 17:14:27 +02:00
Laurent Bigonville f7d8e9f935 New upstream release (1.0) 2019-08-23 17:11:08 +02:00
Laurent Bigonville 1799dd159a Update upstream source from tag 'upstream/1.0'
Update to upstream version '1.0'
with Debian dir b867236012
2019-08-23 17:06:46 +02:00
Laurent Bigonville 91c67d430e New upstream version 1.0 2019-08-23 17:06:45 +02:00
Laurent Bigonville 88730a852d debian/README.source: Document how the list of devices in debian/libfprint0.postinst is generated 2019-07-12 02:13:53 +02:00
Laurent Bigonville 8539a0984e debian/libfprint0.postinst: Call udevadm --trigger also for the new supported readers 2019-07-12 01:15:49 +02:00
Laurent Bigonville 6a1a956029 debian/rules: Install the NEWS file as the upstream changelog 2019-07-12 01:03:03 +02:00
Laurent Bigonville c813d2873f debian/control: Add libglib2.0-doc to Build-Depends-Indep, this allows gtk-doc to properly resolve all the links in the documentation 2019-07-12 01:02:15 +02:00
Laurent Bigonville 8d01ce9b7e debian/libfprint0.symbols: Add the Build-Depends-Package field 2019-07-12 00:55:31 +02:00
Laurent Bigonville 1c8d4fe027 debian/control: Bump Standards-Version to 4.4.0 (no further changes) 2019-07-12 00:55:29 +02:00
Laurent Bigonville c18510091e debian/libfprint0.symbols: Add newly exported symbol 2019-07-12 00:55:05 +02:00
Laurent Bigonville 5ebcc1cedd debian/rules: Disable the build of the GTK+ test application for now, this is not ready yet 2019-07-12 00:54:56 +02:00
Laurent Bigonville 8fbeacf13b Other patches: Refreshed 2019-07-12 00:19:50 +02:00
Laurent Bigonville 6fc665135d d/p/lib-Add-accessor-for-minutia-coordinates.patch, d/p/fix_ftbfs_meson.patch: Dropped, applied upstream 2019-07-12 00:19:50 +02:00
Laurent Bigonville d116695da6 debian/control: Update Vcs-* fields (Closes: #909256) 2019-07-12 00:19:44 +02:00
Laurent Bigonville 5b1ca62c7c New upstream release 2019-07-12 00:07:40 +02:00
Laurent Bigonville e3adf40324 Update upstream source from tag 'upstream/0.99.0'
Update to upstream version '0.99.0'
with Debian dir 53fd957197
2019-07-12 00:01:49 +02:00
Laurent Bigonville 521b7a3029 New upstream version 0.99.0 2019-07-12 00:01:48 +02:00
Laurent Bigonville fa439ded05 debian/gbp.conf: Set pristine-tar and upstream-vcs-tag 2019-07-12 00:01:39 +02:00
Laurent Bigonville 1473e8093a Release to unstable 2018-10-10 17:31:17 +02:00
Laurent Bigonville 388666f5c0 d/p/lib-Add-accessor-for-minutia-coordinates.patch: Add a way to access minutia coordinates, this will help to fix ftbfs in fprint_demo
In reality a API breakage was introduced in a previous version and even
if it's not fixing it completely it reintroduce the same
functionalities.
2018-10-10 17:31:17 +02:00
Laurent Bigonville bef704b74e Release to unstable 2018-08-23 15:03:57 +02:00
Laurent Bigonville cafa248fed debian/rules: Remove the *.private fields of libfprint.pc
debian/rules: Remove the *.private fields of libfprint.pc, these are not
needed anymore as we are not installing a static library

Closes: #906975
2018-08-23 15:01:05 +02:00
Laurent Bigonville 5e10d87a17 Release to unstable 2018-08-12 17:51:53 +02:00
Laurent Bigonville 4e1828640c New upstream release 0.8.2 2018-08-12 17:51:20 +02:00
Laurent Bigonville ca30b70d38 New upstream version 0.8.2 2018-08-12 17:45:45 +02:00
Laurent Bigonville c91d6f33f0 Update upstream source from tag 'upstream/0.8.2'
Update to upstream version '0.8.2'
with Debian dir 1c95a3ea0c
2018-08-12 17:45:45 +02:00
Laurent Bigonville 8d3a867821 debian/control: Bump Standards-Version to 4.2.0 (no further changes) 2018-08-12 17:41:37 +02:00
Laurent Bigonville 0ed8d4aafd d/p/fix_ftbfs_meson.patch: Fix FTBFS with newer meson 2018-08-12 17:41:13 +02:00
Laurent Bigonville 3207a658de Bump debhelper version to >= 10.3 to have meson support 2018-07-16 16:29:52 +02:00
Laurent Bigonville dc7c2a03e4 Ship the API doc in a new libfprint-doc package 2018-07-16 16:21:12 +02:00
Laurent Bigonville 6da130a512 debian/libfprint0.postinst: Call udevadm --trigger also for the new supported readers 2018-06-21 22:59:02 +02:00
Laurent Bigonville 3f29741cc2 debian/rules: Simplify the installation of the udev rules file 2018-06-21 21:13:12 +02:00
Laurent Bigonville 98bc488e44 debian/control: Bump all the packages to priority optional, priority extra is now deprecated 2018-06-21 21:12:21 +02:00
Laurent Bigonville d88da3380f debian/control: Bump Standards-Version to 4.1.4 (no further changes) 2018-06-21 21:12:21 +02:00
Laurent Bigonville 847a201bfe debian/rules: Do not explicitly pass --parallel to debhelper as it's the default now 2018-06-21 21:12:21 +02:00
Laurent Bigonville dee696cdd1 debian/libfprint0.lintian-overrides: Overrides udev-rule-missing-uaccess, we don't want the readers to be accessible by unprivileged users 2018-06-21 21:12:21 +02:00
Laurent Bigonville f1f19c3c6e debian/libfprint0.symbols: Add newly exported symbols 2018-06-21 21:12:21 +02:00
Laurent Bigonville 8cbe405004 Build the documentation 2018-06-21 15:32:12 +02:00
Laurent Bigonville 98d3045da3 Switch to meson, the static library is not built anymore 2018-06-21 15:31:32 +02:00
Laurent Bigonville fbd763a849 d/p/use-non-versionned-libusbh-path.patch: Updated 2018-06-21 13:14:37 +02:00
Laurent Bigonville 9a5c958c0c d/p/kFreeBSD_FTBFS_add_ETIME_definition.patch: Updated 2018-06-21 13:08:58 +02:00
Laurent Bigonville f24d71f1ec New upstream release
* New upstream release
  - Fix security hole by zero out memory when allocated (Closes: #890827)
2018-06-21 12:59:07 +02:00
Laurent Bigonville 74d89aa856 Update upstream source from tag 'upstream/0.8.1'
Update to upstream version '0.8.1'
with Debian dir cff2f30a93
2018-06-21 12:54:14 +02:00
Laurent Bigonville 7bf73eb3d0 New upstream version 0.8.1 2018-06-21 12:54:13 +02:00
Laurent Bigonville 6573095680 debian/watch: Update the watch file to point to the freedesktop gitlab release page 2018-06-21 12:46:03 +02:00
Laurent Bigonville c0d25ad3b7 Release to unstable 2017-05-17 16:58:51 +02:00
Laurent Bigonville 167de38223 debian/libfprint0.postinst: Add new calls to "udevadm --trigger" to also properly set the permissions to the newest supported readers. 2017-05-17 16:58:28 +02:00
Laurent Bigonville 4569b31b41 Bump debhelper compatibility to 10 and rely on dh_autoreconf instead of calling the autotools explicitly 2017-05-16 12:54:13 +02:00
Laurent Bigonville 5684939c33 Drop libmagickcore-dev build-dep and add libpixman-1-dev instead, ImageMagick is not supported since 0.6.0 2017-05-16 12:09:46 +02:00
Laurent Bigonville 105a5a791e Drop libssl-dev build-dependency, not needed anymore (Closes: #854710) 2017-05-16 11:55:02 +02:00
Laurent Bigonville 9b43b851e8 Add debian/watch file 2017-05-16 11:45:52 +02:00
Laurent Bigonville 7bd46f692d Use https for the Homepage and Vcs-* fields 2017-05-16 11:40:00 +02:00
Laurent Bigonville 3c27a33acf Bump Standards-Version to 3.9.8 (no further changes)
* debian/control:
  - Bump Standards-Version to 3.9.8 (no further changes)
2017-05-16 11:37:05 +02:00
Laurent Bigonville 22a563066a Refresh the patches, drop all the upstreamed ones 2017-05-16 11:27:44 +02:00
Laurent Bigonville 4085726996 New 0.7.0 upstream release
* Team upload.
* New 0.7.0 upstream release:
  - Add VFS0050 driver (Closes: #843626)
2017-05-16 10:56:37 +02:00
Laurent Bigonville 14bcbcc08d Merge tag 'upstream/0.7.0' into debian
Upstream version 0.7.0
2017-05-16 10:53:13 +02:00
Laurent Bigonville 5d530f452c New upstream version 0.7.0 2017-05-16 10:53:10 +02:00
Didier Raboud 07f8b7ad47 libfprint 1:0.6.0-2 Debian release. 2015-05-03 15:19:39 +02:00
Didier Raboud e417fc2fd1 Add simple gbp.conf to help with releasing 2015-05-03 15:19:10 +02:00
Didier Raboud 4d8ea9ef60 libfprint 1:0.6.0-1 Debian experimental release. 2015-03-27 08:34:28 +01:00
Didier Raboud d61485b2ff Add two new 0.6.0 symbols 2015-03-26 15:33:40 +01:00
Didier Raboud ceb8c8fdff Backport two upstream patches:
- imgdev: fix enum mismatch for dev_change_state() call
- vfs101: Logical conjunction always evaluates to false
2015-03-03 09:15:04 +01:00
Didier Raboud 1ed83cabed Refresh patches 2015-03-03 08:59:54 +01:00
Didier Raboud 276b43591a Merge tag 'upstream/0.6.0' into debian 2015-03-03 08:53:35 +01:00
Didier Raboud 2386478ded libfprint 1:0.5.1-1 Debian release. 2013-09-29 13:47:14 +02:00
Didier Raboud 30322db108 Update patches list for 0.5.1, drop 6 patches incorporated or backported from upstream, refresh one 2013-09-29 13:34:09 +02:00
Didier Raboud 034597a598 Merge tag 'upstream/0.5.1' into debian 2013-09-29 13:31:20 +02:00
Didier Raboud 7513657198 libfprint 1:0.5.0-6 Debian release. 2013-06-24 11:25:18 +02:00
Didier Raboud 0d18e678a4 Run udevadm trigger on 147e:2020 too 2013-06-24 11:22:20 +02:00
Jeremy BichaandDidier Raboud 68af27aa46 Fix underlinking against glib
Closes: #710381
Closes: #713466
Thanks: Julian Taylor
2013-06-24 11:18:27 +02:00
Didier Raboud aa12be94b2 libfprint 1:0.5.0-5 Debian release. 2013-05-18 16:38:00 +02:00
Didier Raboud b62c1ad22a Backport two more bugfixes from upstream:
- imgdev: fix cancelling of enrollment from stage_completed callback
- upeke2: Add support for 147e:2020 ID
2013-05-18 16:02:25 +02:00
Didier Raboud 3cf2ce61eb libfprint 1:0.5.0-4 Debian experimental release. 2013-03-03 15:22:36 +01:00
Didier Raboud e146b9bf05 Correct the kFreeBSD ETIME patch update to define ETIME later.
Should fix the new kFreeBSD FTBFS.
2013-03-03 15:22:18 +01:00
Didier Raboud 3d7032fc16 libfprint 1:0.5.0-3 Debian experimental release. 2013-03-03 13:56:28 +01:00
Didier Raboud 9e492717f4 Update kFreeBSD ETIME patch to also correct the vfs301 driver.
Should fix the new kFreeBSD FTBFS.
2013-03-03 13:55:56 +01:00
Didier Raboud f43b360f0b libfprint 1:0.5.0-2 Debian experimental release. 2013-03-03 13:08:14 +01:00
Didier Raboud ba44808b7e Patch vfs301 driver to look for libusb.h without the versionned path.
Hopefully fixes the kFreeBSD FTBFS.
2013-03-03 12:54:29 +01:00
Didier Raboud bc8b0590cc Bump Standards-Version to 3.9.4 without changes needed. 2013-03-02 20:05:25 +01:00
Didier Raboud 2f24ad983f Only execute the udevadm commands if udevadm is in the script path 2013-03-02 20:01:55 +01:00
Didier Raboud a0f001d5ee libfprint 1:0.5.0-1 Debian experimental release. 2013-03-02 18:52:31 +01:00
Luca CapelloandDidier Raboud a0af522ced Apply udev rules at install time with udevadm --trigger
Closes: #683863
2013-01-15 18:39:20 +01:00
Didier Raboud 15bea49681 Backport two upstream hotfixes for uru4000.
Both patches are on top of 0.5.0:

- uru4000: fix race condition on waiting power up irq
- uru4000: fix cancelling of imaging from error callback

Thanks-To: Timo Teräs <timo.teras@iki.fi>
2013-01-15 18:34:21 +01:00
Didier Raboud 9fa5335ea1 Refresh all patches for 0.5.0
- Drop fix-libusb-global-variables-FTBFS.patch implemented upstream.
2013-01-15 18:03:40 +01:00
Didier Raboud cab9941e00 Merge tag 'v_0_5_0' into debian
0.5.0
2013-01-15 17:58:15 +01:00
Didier Raboud deefd5c04f libfprint 1:0.4.0-4-gdfff16f-4 Debian release. 2012-07-09 00:46:33 +02:00
Didier Raboud d7d940575e Fix libusb global variables FTBFS.
Closes: #680838
2012-07-08 16:35:59 -06:00
Didier Raboud d3b47bb1d7 libfprint 1:0.4.0-4-gdfff16f-3 Debian release. 2012-06-26 10:52:23 +02:00
Didier Raboud aa679f6a12 Patch the udev rules creator to handle blacklists correctly.
The blacklist covered whole vendorID ranges; with the patch it will
cover the mentionned vendorID:productID pairs.

(This was not a problem as the blacklist contained only one device and
it was the only productID for this vendorID.)
2012-06-26 10:12:50 +02:00
Didier Raboud 8019e85967 Patch the udev rules creator to include all devices.
The power/control blacklist is respected: 0483:2016 is blacklisted for
power/control but is supported by a built driver and as such, should get
a mode and group specification.

Closes: #679001
2012-06-26 09:56:36 +02:00
Didier Raboud f45eb60488 libfprint 1:0.4.0-4-gdfff16f-2 Debian release. 2012-05-21 10:55:42 +02:00
Didier Raboud edfc461a48 Add patch to define ETIME for the kFreeBSD flavours.
This fixes the FTBFS on kFreeBSD without guaranteeing that it actually
works.

Closes: #673704
2012-05-21 10:53:39 +02:00
Didier Raboud 04fad3f9b3 Mark libfprint0 Multi-Arch: same.
This allows it to be a satisfiable depends of fprintd.
2012-05-20 22:33:56 +02:00
Didier Raboud 8bef73626c releasing version 1:0.4.0-4-gdfff16f-1 2012-05-19 17:37:26 +02:00
Didier Raboud 17f612175f Drop useless dirs specifications. 2012-05-19 17:02:31 +02:00
Didier Raboud 1688d6896a Put epoch in the symbols' versions. 2012-05-19 16:55:35 +02:00
Didier Raboud bb7f0d3f69 Avoid duplication of Section snippet in control. 2012-05-19 16:05:20 +02:00
Didier Raboud 67994293f3 Drop the mention of the old synchronous library from the description. 2012-05-19 15:27:58 +02:00
Didier Raboud 8f73f03722 Add Vcs-* to reflect the new Git repository. 2012-05-19 15:27:03 +02:00
Didier Raboud 38b5a05db3 Add myself as uploader. 2012-05-19 15:26:04 +02:00
Didier Raboud ddab7bfc89 Bump Standards-Version to 3.9.3 without changes needed. 2012-05-19 15:25:37 +02:00
Didier Raboud 9dc27b0a00 Update homepage to the new home at freedesktop.org. 2012-05-19 15:25:12 +02:00
Didier Raboud 79a4038256 Add symbols tracking for libfprint0. 2012-05-19 15:24:19 +02:00
Didier Raboud d520edfa71 Use the built udev rules for autosuspend; append our mode and group specificities. 2012-05-19 15:20:10 +02:00
Didier Raboud 192cef0cdd Use short debhelper style; migrate to multiarch. 2012-05-19 14:59:42 +02:00
Didier Raboud d3628eda97 Bump debhelper Build-Depends and compat to 9.
Brings hardened buildflags and multiarch.
2012-05-19 14:39:20 +02:00
Didier Raboud 2d55732900 Merge branch 'master' into debian
Many conflicts.
2012-05-19 14:18:01 +02:00
Ulises Vitulli 786868d735 Transitioning from libmagick9 to libmagickcore 2011-06-13 00:37:01 +00:00
Ulises Vitulli cbff4b73a5 No more patches! :D :D :D 2011-04-19 22:33:30 +00:00
Ulises Vitulli c1b8b7950b Closing #595719 and #620447. 2011-04-19 22:10:40 +00:00
Ulises Vitulli 7cee8069fd Uploading new upstream release 0.4.0plus 2011-04-19 19:16:04 +00:00
Ulises Vitulli c744d42325 Pull new git checkout for applying the patches we submitted upstream. 2010-08-23 12:56:11 +00:00
Ulises Vitulli c3c3419512 Add new supported devices to udev rules. 2010-08-23 10:01:25 +00:00
Ulises Vitulli 808dd08c47 Added upstream "current tarball" and deleted old symlinks to old "current tarball". 2010-08-19 18:48:51 +00:00
Ulises Vitulli f0105e0c91 Replaced files with current release. 2010-08-19 17:31:14 +00:00
Ulises Vitulli 380e25fa20 Upgraded to 0.2.0, commit 20100819git-1. 2010-08-19 17:28:38 +00:00
Ulises Vitulli 82f7dca028 Minor changes and testing commit permissions 2010-05-31 21:22:42 +00:00
Ulises Vitulli ce229867a6 Include aes2500-wy udev rule. 2010-04-21 17:39:56 +00:00
Ulises Vitulli 59b5f7213c Sync'ing source with policyd and polishing descriptions. 2010-04-14 19:22:54 +00:00
Ulises Vitulli e4ddac09c9 Last details for uploading into directly into experimental and waiting 10 days for going to Sid! :-D 2010-01-21 23:37:50 +00:00
Ulises Vitulli 7d75f84431 Fixing dependences missing and some advices. 2009-07-29 11:40:47 +00:00
Ulises Vitulli b82d270083 Migration from libmagick10 to libmagickcore and experimental upload. 2009-07-24 10:44:07 +00:00
Ulises Vitulli 71eb508693 Updates on packaging (no upstream diffs). 2009-06-06 15:34:55 +00:00
Ulises Vitulli e39bdcca5f Make clean and distclean targets work.
Next step, finishing understanding why dbus module doesn't work :-)
2009-01-02 22:52:17 +00:00
Ulises Vitulli 63c6aaaa76 Synchronized to upstream v0.1.0-pre1 release.
Upstream git checkout fixing little issues.
2008-11-28 05:45:16 +00:00
Ulises Vitulli ffe0b4732e Near an acceptable status 2008-10-13 20:13:36 +00:00
Ulises Vitulli e4ab7bcd23 Foo files and adopting Aurelio's libusb-1.0 package \o/ 2008-09-20 09:33:38 +00:00
Ulises Vitulli 9e3f41a170 Created Async libusb branch. Still working on it. 2008-09-19 21:33:01 +00:00
158 changed files with 6521 additions and 3342 deletions
+42 -79
View File
@@ -4,7 +4,7 @@ include:
- project: 'freedesktop/ci-templates' - project: 'freedesktop/ci-templates'
ref: master ref: master
file: '/templates/fedora.yml' file: '/templates/fedora.yml'
- remote: 'https://gitlab.gnome.org/GNOME/citemplates/-/raw/71e636e012ae0ab04c5e0fe40ca73ada91ae6bde/flatpak/flatpak_ci_initiative.yml' - remote: 'https://gitlab.gnome.org/GNOME/citemplates/-/raw/master/flatpak/flatpak_ci_initiative.yml'
default: default:
# Auto-retry jobs in case of infra failures # Auto-retry jobs in case of infra failures
@@ -28,8 +28,6 @@ workflow:
rules: rules:
- if: $CI_PIPELINE_SOURCE == 'merge_request_event' - if: $CI_PIPELINE_SOURCE == 'merge_request_event'
- if: $CI_PIPELINE_SOURCE == 'push' - if: $CI_PIPELINE_SOURCE == 'push'
- if: $CI_PIPELINE_SOURCE == 'schedule'
- if: $CI_PROJECT_NAMESPACE == 'libfprint' && $LIBFPRINT_CI_ACTION != ''
stages: stages:
- image-build - image-build
@@ -37,13 +35,12 @@ stages:
- build - build
- test - test
- flatpak - flatpak
- deploy
image: $FEDORA_IMAGE image: $FEDORA_IMAGE
.build_one_driver_template: &build_one_driver .build_one_driver_template: &build_one_driver
script: script:
# Build with a driver that doesn't need imaging, or openssl # Build with a driver that doesn't need imaging, or nss
- meson setup _build --werror -Ddrivers=$driver - meson setup _build --werror -Ddrivers=$driver
- meson compile -C _build - meson compile -C _build
- rm -rf _build/ - rm -rf _build/
@@ -59,16 +56,11 @@ image: $FEDORA_IMAGE
script: script:
- ./.ci/check-abi ${LAST_ABI_BREAK} $(git rev-parse HEAD) - ./.ci/check-abi ${LAST_ABI_BREAK} $(git rev-parse HEAD)
.standard_job:
rules:
- when: on_success
- if: $CI_PIPELINE_SOURCE == "schedule"
when: never
build: build:
stage: build stage: build
extends: except:
- .standard_job variables:
- $CI_PIPELINE_SOURCE == "schedule"
variables: variables:
driver: virtual_image driver: virtual_image
<<: *build_one_driver <<: *build_one_driver
@@ -83,12 +75,13 @@ build:
test: test:
stage: test stage: test
extends: except:
- .standard_job variables:
- $CI_PIPELINE_SOURCE == "schedule"
script: script:
- meson setup _build --werror -Ddrivers=all -Db_coverage=true - meson setup _build --werror -Ddrivers=all -Db_coverage=true
- meson test -C _build --print-errorlogs --no-stdsplit --timeout-multiplier 3 - meson test -C _build --print-errorlogs --no-stdsplit --timeout-multiplier 3
- ninja -C _build coverage || true - ninja -C _build coverage
- cat _build/meson-logs/coverage.txt || true - cat _build/meson-logs/coverage.txt || true
artifacts: artifacts:
reports: reports:
@@ -106,8 +99,10 @@ test:
test_valgrind: test_valgrind:
stage: test stage: test
extends: allow_failure: true
- .standard_job except:
variables:
- $CI_PIPELINE_SOURCE == "schedule"
script: script:
- meson setup _build -Ddrivers=all - meson setup _build -Ddrivers=all
- meson compile -C _build - meson compile -C _build
@@ -122,27 +117,11 @@ test_valgrind:
- _build/meson-logs/testlog-valgrind.txt - _build/meson-logs/testlog-valgrind.txt
expire_in: 1 week expire_in: 1 week
test_asan:
stage: test
extends:
- .standard_job
script:
- meson setup _build -Ddrivers=all -Db_sanitize=address,undefined
- meson test -C _build --print-errorlogs --no-stdsplit
artifacts:
reports:
junit: "_build/meson-logs/testlog.junit.xml"
expose_as: 'Sanitizers test logs'
when: always
paths:
- _build/meson-logs
- _build/meson-logs/testlog.txt
expire_in: 1 week
test_installed: test_installed:
stage: test stage: test
extends: except:
- .standard_job variables:
- $CI_PIPELINE_SOURCE == "schedule"
script: script:
- meson setup _build --prefix=/usr -Ddrivers=all - meson setup _build --prefix=/usr -Ddrivers=all
- meson install -C _build - meson install -C _build
@@ -164,8 +143,9 @@ test_installed:
test_scan_build: test_scan_build:
stage: test stage: test
extends: except:
- .standard_job variables:
- $CI_PIPELINE_SOURCE == "schedule"
allow_failure: true allow_failure: true
script: script:
- meson setup _build -Ddrivers=all - meson setup _build -Ddrivers=all
@@ -180,23 +160,19 @@ test_scan_build:
test_indent: test_indent:
stage: check-source stage: check-source
extends: except:
- .standard_job variables:
- $CI_PIPELINE_SOURCE == "schedule"
script: script:
- scripts/uncrustify.sh - scripts/uncrustify.sh
- git diff - git diff
- git diff-index --name-only --exit-code HEAD - git diff-index --name-only --exit-code HEAD
rules:
- changes:
compare_to: 'refs/heads/master'
paths:
- '**/*.c'
- '**/*.h'
test_unsupported_list: test_unsupported_list:
stage: check-source stage: check-source
extends: except:
- .standard_job variables:
- $CI_PIPELINE_SOURCE == "schedule"
allow_failure: true allow_failure: true
script: script:
- tests/hwdb-check-unsupported.py - tests/hwdb-check-unsupported.py
@@ -216,7 +192,7 @@ flatpak:
- if: '$CI_PROJECT_PATH != "libfprint/libfprint"' - if: '$CI_PROJECT_PATH != "libfprint/libfprint"'
when: manual when: manual
allow_failure: true allow_failure: true
- if: $CI_PIPELINE_SOURCE == "schedule" - if: '$CI_PIPELINE_SOURCE == "schedule"'
when: never when: never
- if: '$CI_COMMIT_BRANCH == "master"' - if: '$CI_COMMIT_BRANCH == "master"'
allow_failure: true allow_failure: true
@@ -237,6 +213,9 @@ flatpak:
.container_fedora_build_base: .container_fedora_build_base:
extends: .fdo.container-build@fedora extends: .fdo.container-build@fedora
stage: image-build stage: image-build
only:
variables:
- $CI_PIPELINE_SOURCE == "never"
variables: variables:
GIT_STRATEGY: none # no need to pull the whole tree for rebuilding the image GIT_STRATEGY: none # no need to pull the whole tree for rebuilding the image
# a list of packages to install # a list of packages to install
@@ -247,8 +226,6 @@ flatpak:
libudev-devel libudev-devel
FDO_DISTRIBUTION_EXEC: | FDO_DISTRIBUTION_EXEC: |
$LIBFPRINT_EXEC $LIBFPRINT_EXEC
rules:
- when: never
.container_fedora_build_forced: .container_fedora_build_forced:
variables: variables:
@@ -258,39 +235,25 @@ container_fedora_build_schedule:
extends: extends:
- .container_fedora_build_base - .container_fedora_build_base
- .container_fedora_build_forced - .container_fedora_build_forced
rules: only:
- if: $CI_PIPELINE_SOURCE == "schedule" && $CRON_TASK == "BUILD_CI_IMAGES" variables:
when: always - $CI_PIPELINE_SOURCE == "schedule" && $CRON_TASK == "BUILD_CI_IMAGES"
container_fedora_build_manual: container_fedora_build_manual:
extends: extends:
- .container_fedora_build_base - .container_fedora_build_base
- .container_fedora_build_forced - .container_fedora_build_forced
rules: only:
- if: $LIBFPRINT_CI_ACTION == "build-image" variables:
when: always - $LIBFPRINT_CI_ACTION == "build-image"
container_fedora_build_on_deps_changed: container_fedora_build_on_deps_changed:
extends: .container_fedora_build_base extends: .container_fedora_build_base
rules: only:
- if: $CI_PROJECT_NAMESPACE == "libfprint" && $CI_PIPELINE_SOURCE != "schedule" variables:
- $CI_PROJECT_NAMESPACE == "libfprint" && $CI_PIPELINE_SOURCE != "schedule"
refs:
- branches
- merge_requests
changes: changes:
compare_to: 'refs/heads/master' - .gitlab-ci/libfprint-image-variables.yaml
paths:
- '.gitlab-ci/libfprint-image-variables.yaml'
- '.gitlab-ci/libfprint-templates.yaml'
pages:
image: alpine:latest
stage: deploy
needs:
- job: test
artifacts: true
script:
- mkdir public
- mv _build/meson-logs/coveragereport public/coverage
artifacts:
paths:
- public
rules:
- if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE == "push"
+1 -1
View File
@@ -1,2 +1,2 @@
variables: variables:
LIBFPRINT_IMAGE_TAG: v6 LIBFPRINT_IMAGE_TAG: v3
+7 -5
View File
@@ -3,7 +3,6 @@
.libfprint_common_variables: .libfprint_common_variables:
LIBFPRINT_DEPENDENCIES: LIBFPRINT_DEPENDENCIES:
appstream
doxygen doxygen
dnf-plugins-core dnf-plugins-core
flatpak-builder flatpak-builder
@@ -18,14 +17,12 @@
gtk-doc gtk-doc
gtk3-devel gtk3-devel
libabigail libabigail
libasan
libgusb-devel libgusb-devel
libgudev-devel libgudev-devel
libubsan
libX11-devel libX11-devel
libXv-devel libXv-devel
meson meson
openssl-devel nss-devel
pixman-devel pixman-devel
python3-cairo python3-cairo
python3-gobject python3-gobject
@@ -43,5 +40,10 @@
glibc \ glibc \
libgusb \ libgusb \
libusb \ libusb \
openssl \ nss \
pixman pixman
git clone https://github.com/martinpitt/umockdev.git && \
cd umockdev && \
meson _build --prefix=/usr && \
ninja -C _build && ninja -C _build install
+1 -1
View File
@@ -1,4 +1,4 @@
#!/bin/sh #!/bin/sh
# This wrapper just disables the malloc checker # This wrapper just disables the malloc checker
exec /usr/bin/scan-build --status-bugs -disable-checker unix.Malloc --exclude "_build/meson-private" "$@" exec /usr/bin/scan-build --status-bugs -disable-checker unix.Malloc "$@"
-45
View File
@@ -1,51 +1,6 @@
This file lists notable changes in each release. For the full history of all This file lists notable changes in each release. For the full history of all
changes, see ChangeLog. changes, see ChangeLog.
2026-02-10: v1.94.10 release
Highlights:
* synaptics: Add USB reset in probe to recover stall condition
* synaptics: New PIDs 0x0169, 0x019F, 0x00E9, 0x01A0, 0x0109, 0x010A
* goodixmoc: New PID 0x66A9
* goodixmoc: Fix crash in exit callback handler
* fpcmoc: New PID 0xA306
* fpcmoc: Fix interrupt cancellable leak
* elanmoc: New PIDs 0x0CA7, 0x0CA8, 0x0CB0
* egismoc: New PIDs 0x0584, 0x0588
* focaltech_moc: New PIDs 0xA27A, 0x1579
* realtek: New PID 0xFA03
* fp-device: Clarify getter for open property
* libfprint: Use fatal-warnings on g-i-scanner
2025-02-20: v1.94.9 release
Highlights:
* uru4000: Use OpenSSL to perform AES-ECB encryption, as per this libfprint
does not support on NSS, but on openssl (>= 3.0).
* goodixmoc: New PIDs 0x60C2, 0x689A
* synaptics: New PIDs 0x016C, 0x0174, 0x0107, 0x0108, 0x00C2, 0x00F0
* fpcmoc: New PID 0xC844
* focaltech_moc: New PIDs 0xA99A, 0xA57A, 0xA78A
* elanmoc: New PIDs 0x0C98, 0x0C9D, 0x0CA3
* elanspi: New PIDs 0x3128, 0x2766
* fp-device: Add FP_DEVICE_RETRY_TOO_FAST retry error
* data: AppStream meta info listing supported USB devices.
* fixed various memory issues in multiple devices
2024-09-03: v1.94.8 release
Highlights:
* build: Support building in non-linux unix environments (tested in FreeBSD)
* egismoc: New PIDs 0x0583, 0x0586, 0x0587.
* elanmoc: New PID 0x0C9F.
* fpcmoc: New PIDs 0x9524, 0x9544.
* goodixmoc: New PIDs 0x609A, 0x650A, 0x650C, 0x6512.
* realtek: New PID 0x5816.
* synaptics: New PIDs 0x00C4, 0x019D, 0x00C6.
* fpcmoc: fix incorrect immobile handling during enrollment.
* fpcmoc: fixed jumping to wrong state at end of custom enroll.
* egismoc: various code cleanups.
2024-02-20: v1.94.7 release 2024-02-20: v1.94.7 release
Highlights: Highlights:
+25
View File
@@ -0,0 +1,25 @@
### libfprint-TOD v1
- First public release
- Based on [libfprint 1.90.1](https://gitlab.freedesktop.org/libfprint/libfprint/-/releases#v1.90.1)
- Bumped TOD version to 1
### Highlights of the Drivers API changes
Both the driver and external APIs have changed, as both the verify and the identify functions now have early reporting mechanisms.
- Added API for early report of matching results or retry errors
- Verify and identification completion functions have been simplified
- Support variadic arguments in error functions
- Various re-definitions of ownership handling
- Add convenience API to change state after a timeout
- Add unit tests for all the drivers API
### Drivers required changes
As per the early report mechanism, drivers need to adapt, in particular:
- New pkg-config dependency name is `libfprint-2-tod-1`
- Verification and Identification API for non-image drivers has changed and drivers need to both `report` the result of the action and complete it:
- `fpi_device_{verify,identify}_report` must inform whether a match/no-match or identification happened or report a *retry error*.
- `fpi_device_{verify,identify}_complete` must be called once the device has completed the verification / identification process, in case reporting device errors (not retry ones!)
You can see examples of changes needed in the [reference example driver](https://gitlab.freedesktop.org/3v1n0/libfprint-tod-example-driver/-/commit/8308f84f7d1cfd1b9ed0936c13c73b43a4a46772) or the [upstream synaptics driver](https://gitlab.freedesktop.org/libfprint/libfprint/-/merge_requests/112/diffs)
+4 -9
View File
@@ -19,6 +19,10 @@
</div> </div>
## TOD Informations
See https://gitlab.freedesktop.org/3v1n0/libfprint/-/blob/tod/README.tod.md
## History ## History
**LibFPrint** was originally developed as part of an **LibFPrint** was originally developed as part of an
@@ -46,12 +50,6 @@ We include **Bozorth3** from the **[US Export Controlled]**
distribution, which we have determined to be fine distribution, which we have determined to be fine
being shipped in an open source project. being shipped in an open source project.
## Get in *touch*
- [IRC] - `#fprint` @ `irc.oftc.net`
- [Matrix] - `#fprint:matrix.org` bridged to the IRC channel
- [MailingList] - low traffic, not much used these days
<br/> <br/>
<div align="right"> <div align="right">
@@ -68,9 +66,6 @@ being shipped in an open source project.
[Unsupported]: https://gitlab.freedesktop.org/libfprint/wiki/-/wikis/Unsupported-Devices [Unsupported]: https://gitlab.freedesktop.org/libfprint/wiki/-/wikis/Unsupported-Devices
[Supported]: https://fprint.freedesktop.org/supported-devices.html [Supported]: https://fprint.freedesktop.org/supported-devices.html
[Website]: https://fprint.freedesktop.org/ [Website]: https://fprint.freedesktop.org/
[MailingList]: https://lists.freedesktop.org/mailman/listinfo/fprint
[IRC]: ircs://irc.oftc.net:6697/#fprint
[Matrix]: https://matrix.to/#/#fprint:matrix.org
[Contribute]: ./HACKING.md [Contribute]: ./HACKING.md
[License]: ./COPYING [License]: ./COPYING
+9
View File
@@ -0,0 +1,9 @@
### libfprint-TOD - libfprint for Touch OEM Drivers
This is a light fork of libfprint to expose internal Drivers API in order to
create drivers as shared libraries.
Fork is hosted at: https://gitlab.freedesktop.org/3v1n0/libfprint/tree/tod
An example driver implementation is available:
- https://gitlab.freedesktop.org/3v1n0/libfprint-tod-example-driver
+7 -78
View File
@@ -79,11 +79,6 @@ usb:v1C7Ap0571*
# Supported by libfprint driver egismoc # Supported by libfprint driver egismoc
usb:v1C7Ap0582* usb:v1C7Ap0582*
usb:v1C7Ap0583*
usb:v1C7Ap0584*
usb:v1C7Ap0586*
usb:v1C7Ap0587*
usb:v1C7Ap0588*
usb:v1C7Ap05A1* usb:v1C7Ap05A1*
ID_AUTOSUSPEND=1 ID_AUTOSUSPEND=1
ID_PERSIST=0 ID_PERSIST=0
@@ -160,14 +155,7 @@ usb:v04F3p0C82*
usb:v04F3p0C88* usb:v04F3p0C88*
usb:v04F3p0C8C* usb:v04F3p0C8C*
usb:v04F3p0C8D* usb:v04F3p0C8D*
usb:v04F3p0C98*
usb:v04F3p0C99* usb:v04F3p0C99*
usb:v04F3p0C9D*
usb:v04F3p0C9F*
usb:v04F3p0CA3*
usb:v04F3p0CA7*
usb:v04F3p0CA8*
usb:v04F3p0CB0*
ID_AUTOSUSPEND=1 ID_AUTOSUSPEND=1
ID_PERSIST=0 ID_PERSIST=0
@@ -179,25 +167,16 @@ usb:v1C7Ap0603*
# Supported by libfprint driver focaltech_moc # Supported by libfprint driver focaltech_moc
usb:v2808p9E48* usb:v2808p9E48*
usb:v2808pD979* usb:v2808pD979*
usb:v2808pA27A*
usb:v2808pA959* usb:v2808pA959*
usb:v2808pA99A*
usb:v2808pA57A*
usb:v2808pA78A*
usb:v2808p1579*
ID_AUTOSUSPEND=1 ID_AUTOSUSPEND=1
ID_PERSIST=0 ID_PERSIST=0
# Supported by libfprint driver fpcmoc # Supported by libfprint driver fpcmoc
usb:v10A5pFFE0* usb:v10A5pFFE0*
usb:v10A5pA305* usb:v10A5pA305*
usb:v10A5pA306*
usb:v10A5pDA04* usb:v10A5pDA04*
usb:v10A5pD805* usb:v10A5pD805*
usb:v10A5pD205* usb:v10A5pD205*
usb:v10A5p9524*
usb:v10A5p9544*
usb:v10A5pC844*
ID_AUTOSUSPEND=1 ID_AUTOSUSPEND=1
ID_PERSIST=0 ID_PERSIST=0
@@ -206,12 +185,10 @@ usb:v27C6p5840*
usb:v27C6p6014* usb:v27C6p6014*
usb:v27C6p6092* usb:v27C6p6092*
usb:v27C6p6094* usb:v27C6p6094*
usb:v27C6p609A*
usb:v27C6p609C* usb:v27C6p609C*
usb:v27C6p60A2* usb:v27C6p60A2*
usb:v27C6p60A4* usb:v27C6p60A4*
usb:v27C6p60BC* usb:v27C6p60BC*
usb:v27C6p60C2*
usb:v27C6p6304* usb:v27C6p6304*
usb:v27C6p631C* usb:v27C6p631C*
usb:v27C6p633C* usb:v27C6p633C*
@@ -222,8 +199,6 @@ usb:v27C6p63AC*
usb:v27C6p63BC* usb:v27C6p63BC*
usb:v27C6p63CC* usb:v27C6p63CC*
usb:v27C6p6496* usb:v27C6p6496*
usb:v27C6p650A*
usb:v27C6p650C*
usb:v27C6p6582* usb:v27C6p6582*
usb:v27C6p6584* usb:v27C6p6584*
usb:v27C6p658C* usb:v27C6p658C*
@@ -232,9 +207,6 @@ usb:v27C6p6594*
usb:v27C6p659A* usb:v27C6p659A*
usb:v27C6p659C* usb:v27C6p659C*
usb:v27C6p6A94* usb:v27C6p6A94*
usb:v27C6p6512*
usb:v27C6p689A*
usb:v27C6p66A9*
ID_AUTOSUSPEND=1 ID_AUTOSUSPEND=1
ID_PERSIST=0 ID_PERSIST=0
@@ -245,42 +217,27 @@ usb:v298Dp1010*
# Supported by libfprint driver realtek # Supported by libfprint driver realtek
usb:v0BDAp5813* usb:v0BDAp5813*
usb:v0BDAp5816*
usb:v2541pFA03*
ID_AUTOSUSPEND=1 ID_AUTOSUSPEND=1
ID_PERSIST=0 ID_PERSIST=0
# Supported by libfprint driver synaptics # Supported by libfprint driver synaptics
usb:v06CBp00BD* usb:v06CBp00BD*
usb:v06CBp00C2*
usb:v06CBp00C4*
usb:v06CBp00C6*
usb:v06CBp00DF* usb:v06CBp00DF*
usb:v06CBp00E9*
usb:v06CBp00F0*
usb:v06CBp00F9* usb:v06CBp00F9*
usb:v06CBp00FC* usb:v06CBp00FC*
usb:v06CBp00C2*
usb:v06CBp0100* usb:v06CBp0100*
usb:v06CBp00F0*
usb:v06CBp0103* usb:v06CBp0103*
usb:v06CBp0104*
usb:v06CBp0106*
usb:v06CBp0107*
usb:v06CBp0108*
usb:v06CBp0109*
usb:v06CBp010A*
usb:v06CBp0123* usb:v06CBp0123*
usb:v06CBp0124* usb:v06CBp0124*
usb:v06CBp0126* usb:v06CBp0126*
usb:v06CBp0129* usb:v06CBp0129*
usb:v06CBp015F*
usb:v06CBp0168* usb:v06CBp0168*
usb:v06CBp0169* usb:v06CBp015F*
usb:v06CBp016C* usb:v06CBp0104*
usb:v06CBp0173* usb:v06CBp0173*
usb:v06CBp0174* usb:v06CBp0106*
usb:v06CBp019D*
usb:v06CBp019F*
usb:v06CBp01A0*
ID_AUTOSUSPEND=1 ID_AUTOSUSPEND=1
ID_PERSIST=0 ID_PERSIST=0
@@ -349,10 +306,7 @@ usb:v138Ap0091*
ID_PERSIST=0 ID_PERSIST=0
# Known unsupported devices # Known unsupported devices
usb:v0A5Cp5802*
usb:v047Dp00F2* usb:v047Dp00F2*
usb:v047Dp8054*
usb:v047Dp8055*
usb:v04E8p730B* usb:v04E8p730B*
usb:v04F3p036B* usb:v04F3p036B*
usb:v04F3p0C00* usb:v04F3p0C00*
@@ -360,25 +314,16 @@ usb:v04F3p0C4C*
usb:v04F3p0C57* usb:v04F3p0C57*
usb:v04F3p0C5E* usb:v04F3p0C5E*
usb:v04F3p0C5A* usb:v04F3p0C5A*
usb:v04F3p0C60*
usb:v04F3p0C6C* usb:v04F3p0C6C*
usb:v04F3p0C70* usb:v04F3p0C70*
usb:v04F3p0C72* usb:v04F3p0C72*
usb:v04F3p0C77* usb:v04F3p0C77*
usb:v04F3p0C7C*
usb:v04F3p0C7F*
usb:v04F3p0C80*
usb:v04F3p0C85*
usb:v04F3p0C90*
usb:v04F3p2706* usb:v04F3p2706*
usb:v04F3p3032* usb:v04F3p3032*
usb:v04F3p3057* usb:v04F3p3057*
usb:v04F3p3104* usb:v04F3p3104*
usb:v04F3p310D* usb:v04F3p310D*
usb:v04F3p3128* usb:v04F3p3128*
usb:v04F3p0C8A*
usb:v05BAp000E*
usb:v06CBp0051*
usb:v06CBp0081* usb:v06CBp0081*
usb:v06CBp0088* usb:v06CBp0088*
usb:v06CBp008A* usb:v06CBp008A*
@@ -389,6 +334,7 @@ usb:v06CBp00A8*
usb:v06CBp00B7* usb:v06CBp00B7*
usb:v06CBp00BB* usb:v06CBp00BB*
usb:v06CBp00BE* usb:v06CBp00BE*
usb:v06CBp00C4*
usb:v06CBp00CB* usb:v06CBp00CB*
usb:v06CBp00C9* usb:v06CBp00C9*
usb:v06CBp00D8* usb:v06CBp00D8*
@@ -396,8 +342,8 @@ usb:v06CBp00DA*
usb:v06CBp00DC* usb:v06CBp00DC*
usb:v06CBp00E4* usb:v06CBp00E4*
usb:v06CBp00E7* usb:v06CBp00E7*
usb:v06CBp00E9*
usb:v06CBp00FD* usb:v06CBp00FD*
usb:v06CBp00FF*
usb:v0A5Cp5801* usb:v0A5Cp5801*
usb:v0A5Cp5805* usb:v0A5Cp5805*
usb:v0A5Cp5834* usb:v0A5Cp5834*
@@ -407,18 +353,10 @@ usb:v0A5Cp5842*
usb:v0A5Cp5843* usb:v0A5Cp5843*
usb:v0A5Cp5844* usb:v0A5Cp5844*
usb:v0A5Cp5845* usb:v0A5Cp5845*
usb:v0A5Cp5860*
usb:v0A5Cp5863*
usb:v0A5Cp5864*
usb:v0A5Cp5865*
usb:v0A5Cp5866*
usb:v0A5Cp5867*
usb:v0BDAp5812* usb:v0BDAp5812*
usb:v10A5p0007* usb:v10A5p0007*
usb:v10A5p9200* usb:v10A5p9200*
usb:v10A5p9800* usb:v10A5p9800*
usb:v10A5pA120*
usb:v10A5pA900*
usb:v10A5pE340* usb:v10A5pE340*
usb:v1188p9545* usb:v1188p9545*
usb:v138Ap0007* usb:v138Ap0007*
@@ -440,9 +378,6 @@ usb:v1C7Ap0300*
usb:v1C7Ap0575* usb:v1C7Ap0575*
usb:v1C7Ap0576* usb:v1C7Ap0576*
usb:v1C7Ap0577* usb:v1C7Ap0577*
usb:v1C7Ap057E*
usb:v2541p0236*
usb:v2541p9711*
usb:v27C6p5042* usb:v27C6p5042*
usb:v27C6p5110* usb:v27C6p5110*
usb:v27C6p5117* usb:v27C6p5117*
@@ -471,17 +406,11 @@ usb:v27C6p5740*
usb:v27C6p5E0A* usb:v27C6p5E0A*
usb:v27C6p581A* usb:v27C6p581A*
usb:v27C6p589A* usb:v27C6p589A*
usb:v27C6p5F10*
usb:v27C6p6382* usb:v27C6p6382*
usb:v2808p9338* usb:v2808p9338*
usb:v2808p9348*
usb:v2808p93A9* usb:v2808p93A9*
usb:v2808pA658*
usb:v2808pC652*
usb:v298Dp2020* usb:v298Dp2020*
usb:v298Dp2033* usb:v298Dp2033*
usb:v2DF0p0003*
usb:v3274p8012*
usb:v3538p0930* usb:v3538p0930*
ID_AUTOSUSPEND=1 ID_AUTOSUSPEND=1
ID_PERSIST=0 ID_PERSIST=0
+10
View File
@@ -0,0 +1,10 @@
The libfprint-2-2 postinst script calls udevadmin trigger for all the supported
USB readers. The list of readers used in that file is generated using the gbp
import hook when `gbp import-orig` (via --uscan or with a tarball) is used.
Alternatively it can be called manually by using:
GBP_SOURCES_DIR=. debian/update-udev-triggers.sh
When preparing a new upstream release, this script should be called against the
upstream provided .hwdb file.
+14
View File
@@ -0,0 +1,14 @@
### libfprint-TOD - libfprint for Touch OEM Drivers
This is a light fork of libfprint to expose internal Drivers API in order to
create drivers as shared libraries.
Fork is hosted at: https://gitlab.freedesktop.org/3v1n0/libfprint/tree/tod
Packaging for this is handled via gbp, so you need to make sure that you have
added the remote:
git remote add origin-tod https://gitlab.freedesktop.org/3v1n0/libfprint.git
git fetch origin-tod --tags
To get the latest tod release, just use `gbp import-orig --uscan`.
+1012
View File
File diff suppressed because it is too large Load Diff
+203
View File
@@ -0,0 +1,203 @@
Source: libfprint
Priority: optional
Section: libs
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
XSBC-Original-Maintainer: FingerForce Team <fingerforce-devel@lists.alioth.debian.org>
Uploaders: Marco Trevisan <marco@ubuntu.com>
Build-Depends: debhelper-compat (= 13),
gir1.2-gobject-2.0-dev <!nogir>,
gir1.2-gio-2.0-dev <!nogir>,
gobject-introspection,
gtk-doc-tools,
libcairo-dev <!nocheck>,
libgirepository1.0-dev,
libglib2.0-dev,
libgudev-1.0-dev,
libgusb-dev,
libnss3-dev,
libpixman-1-dev,
meson,
python3 <!nocheck>,
python3-cairo <!nocheck>,
python3-gi <!nocheck>,
systemd-dev,
umockdev <!nocheck>
Build-Depends-Indep: libglib2.0-doc <!nodoc>, libgusb-doc <!nodoc>
Standards-Version: 4.6.2
Homepage: https://www.freedesktop.org/wiki/Software/fprint/libfprint
Vcs-Browser: https://salsa.debian.org/ubuntu-dev-team/libfprint/tree/noble
Vcs-Git: https://salsa.debian.org/ubuntu-dev-team/libfprint.git -b noble
Package: libfprint-2-2
Architecture: any
Depends: ${misc:Depends}, ${shlibs:Depends}
Pre-Depends: ${misc:Pre-Depends}
Description: async fingerprint library of fprint project, shared libraries
The fprint project aims to support for consumer fingerprint reader devices.
.
Previously, Linux support for such devices has been scattered amongst different
projects (many incomplete) and inconsistent in that application developers
would have to implement support for each type of fingerprint reader separately.
The idea is to change that by providing a central system to support all the
fingerprint readers as it's possible to get hands on.
.
libfprint is the centre of efforts, this component does the dirty job of
talking to fingerprint reading devices, and processing fingerprint data.
.
This library depends on the new libusb, which performs asynchronous callbacks,
allowing fprint to perform non-blocking device tasks.
.
This package provides shared libraries.
Package: libfprint-2-dev
Section: libdevel
Architecture: any
Multi-Arch: same
Depends: gir1.2-fprint-2.0 (= ${binary:Version}),
libfprint-2-2 (= ${binary:Version}),
${misc:Depends},
${gir:Depends},
Provides: ${gir:Provides},
Suggests: libfprint-2-doc
Description: async fingerprint library of fprint project, development headers
The fprint project aims to support for consumer fingerprint reader devices.
.
Previously, Linux support for such devices has been scattered amongst different
projects (many incomplete) and inconsistent in that application developers
would have to implement support for each type of fingerprint reader separately.
The idea is to change that by providing a central system to support all the
fingerprint readers as it's possible to get hands on.
.
libfprint is the centre of efforts, this component does the dirty job of
talking to fingerprint reading devices, and processing fingerprint data.
.
This library depends on the new libusb, which performs asynchronous callbacks,
allowing fprint to perform non-blocking device tasks.
.
This package provides development headers.
Package: libfprint-2-doc
Section: doc
Architecture: all
Multi-Arch: foreign
Depends: ${misc:Depends}
Description: async fingerprint library of fprint project, API documentation
The fprint project aims to support for consumer fingerprint reader devices.
.
Previously, Linux support for such devices has been scattered amongst different
projects (many incomplete) and inconsistent in that application developers
would have to implement support for each type of fingerprint reader separately.
The idea is to change that by providing a central system to support all the
fingerprint readers as it's possible to get hands on.
.
libfprint is the centre of efforts, this component does the dirty job of
talking to fingerprint reading devices, and processing fingerprint data.
.
This library depends on the new libusb, which performs asynchronous callbacks,
allowing fprint to perform non-blocking device tasks.
.
This package provides the API documentation.
Package: gir1.2-fprint-2.0
Architecture: any
Multi-Arch: same
Section: introspection
Depends: ${gir:Depends}, ${misc:Depends}, ${shlibs:Depends}
Pre-Depends: ${misc:Pre-Depends}
Description: async fingerprint library of fprint project, gir bindings
The fprint project aims to support for consumer fingerprint reader devices.
.
Previously, Linux support for such devices has been scattered amongst different
projects (many incomplete) and inconsistent in that application developers
would have to implement support for each type of fingerprint reader separately.
The idea is to change that by providing a central system to support all the
fingerprint readers as it's possible to get hands on.
.
libfprint is the centre of efforts, this component does the dirty job of
talking to fingerprint reading devices, and processing fingerprint data.
.
This library depends on the new libusb, which performs asynchronous callbacks,
allowing fprint to perform non-blocking device tasks.
.
This package can be used by other packages using the GIRepository format to
generate dynamic bindings.
Package: libfprint-2-tod1
Architecture: any
Multi-Arch: same
Depends: ${misc:Depends}, ${shlibs:Depends}
Pre-Depends: ${misc:Pre-Depends}
Description: async fingerprint library of fprint project, drivers shared libraries
The fprint project aims to support for consumer fingerprint reader devices.
.
Previously, Linux support for such devices has been scattered amongst different
projects (many incomplete) and inconsistent in that application developers
would have to implement support for each type of fingerprint reader separately.
The idea is to change that by providing a central system to support all the
fingerprint readers as it's possible to get hands on.
.
libfprint is the centre of efforts, this component does the dirty job of
talking to fingerprint reading devices, and processing fingerprint data.
.
This library depends on the new libusb, which performs asynchronous callbacks,
allowing fprint to perform non-blocking device tasks.
.
This package provides shared libraries for the TOD drivers.
Package: libfprint-2-tod-dev
Section: libdevel
Architecture: any
Multi-Arch: same
Depends: libfprint-2-tod1 (= ${binary:Version}),
libfprint-2-dev (= ${binary:Version}),
libglib2.0-dev (>= 2.56),
libgudev-1.0-dev,
libgusb-dev (>= 0.2.0),
libpixman-1-dev,
libnss3-dev,
${misc:Depends}
Description: async fingerprint library of fprint project, drivers development headers
The fprint project aims to support for consumer fingerprint reader devices.
.
Previously, Linux support for such devices has been scattered amongst different
projects (many incomplete) and inconsistent in that application developers
would have to implement support for each type of fingerprint reader separately.
The idea is to change that by providing a central system to support all the
fingerprint readers as it's possible to get hands on.
.
libfprint is the centre of efforts, this component does the dirty job of
talking to fingerprint reading devices, and processing fingerprint data.
.
This library depends on the new libusb, which performs asynchronous callbacks,
allowing fprint to perform non-blocking device tasks.
.
This package provides development headers for creating device drivers.
An example driver is available at:
https://gitlab.freedesktop.org/3v1n0/libfprint-tod-example-driver
Package: libfprint-2-tests
Architecture: any
Depends: gir1.2-fprint-2.0 (= ${binary:Version}),
libfprint-2-2 (= ${binary:Version}),
python3,
python3-cairo,
python3-gi,
umockdev,
${misc:Depends}, ${shlibs:Depends}
Description: Tests for async fingerprint library of fprint project
The fprint project aims to support for consumer fingerprint reader devices.
.
Previously, Linux support for such devices has been scattered amongst different
projects (many incomplete) and inconsistent in that application developers
would have to implement support for each type of fingerprint reader separately.
The idea is to change that by providing a central system to support all the
fingerprint readers as it's possible to get hands on.
.
libfprint is the centre of efforts, this component does the dirty job of
talking to fingerprint reading devices, and processing fingerprint data.
.
This library depends on the new libusb, which performs asynchronous callbacks,
allowing fprint to perform non-blocking device tasks.
.
This package contains test programs, designed to be run as part of a
regression testsuite.
+45
View File
@@ -0,0 +1,45 @@
This package was debianized by Ulises Vitulli <uvitulli@fi.uba.ar> on
Fri, 19 Sep 2008 05:14:30 -0300.
It was downloaded from <http://reactivated.net/fprint/wiki/Libfprint>
Upstream Authors, and Copyright:
Copyright © 2007 Daniel Drake <dsd@gentoo.org>
Copyright © 2006-2007 Timo Hoenig <thoenig@suse.de>
Copyright © 2006 Pavel Machek <pavel@suse.cz>
Copyright © 1999 Erik Walthinsen <omega@cse.ogi.edu>
Copyright © 2004,2006 Thomas Vander Stichele <thomas at apestaart dot org>
Copyright © 2007 Cyrille Bagard
Copyright © 2007 Vasily Khoruzhick
Copyright © 2007 Jan-Michael Brummer <buzz2@gmx.de>
Copyright © 2007 Anthony Bretaudeau <wxcover@users.sourceforge.net>
License:
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
The files under libfprint/nbis directory has this license:
This software was developed at the National Institute of Standards and
Technology (NIST) by employees of the Federal Government in the course
of their official duties. Pursuant to title 17 Section 105 of the
United States Code, this software is not subject to copyright protection
and is in the public domain. NIST assumes no responsibility whatsoever for
its use by other parties, and makes no guarantees, expressed or implied,
about its quality, reliability, or any other characteristic.
The Debian packaging is © 2008, Ulises Vitulli <uvitulli@fi.uba.ar> and is
licensed under the LGPL v2.1, see `/usr/share/common-licenses/LGPL-2.1'.
Vendored
+2
View File
@@ -0,0 +1,2 @@
NEWS
README.md
+8
View File
@@ -0,0 +1,8 @@
#!/bin/sh
set -e
dch -v"$GBP_DEBIAN_VERSION" "New upstream release"
git add debian/changelog
debcommit
debian/update-udev-triggers.sh
+19
View File
@@ -0,0 +1,19 @@
[DEFAULT]
pristine-tar = True
debian-branch = noble
upstream-vcs-tag = v%(version)s
upstream-branch = upstream-tod
debian-tag=ubuntu/%(version)s
[buildpackage]
sign-tags = True
[dch]
multimaint-merge = True
[import-orig]
postimport = debian/gbp-post-import-hook.sh
[pq]
patch-numbers = False
+1
View File
@@ -0,0 +1 @@
usr/lib/${DEB_HOST_MULTIARCH}/girepository-1.0/FPrint-*.typelib
+3
View File
@@ -0,0 +1,3 @@
usr/lib/udev/hwdb.d/
usr/lib/udev/rules.d/
usr/lib/${DEB_HOST_MULTIARCH}/libfprint-[0-9].so.*
+3
View File
@@ -0,0 +1,3 @@
# For security reasons, we don't want the fingerprint readers to be accessible
# by unprivileged users
udev-rule-missing-uaccess
+315
View File
@@ -0,0 +1,315 @@
#!/bin/sh
set -e
#DEBHELPER#
if [ "$1" = "configure" -o "$1" = "upgrade" ] && command -V udevadm >/dev/null 2>&1; then
# apply hwdb rules at package installation, see
# <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=683863#27>
# NOTA BENE: after the DEBHELPER section since dh_installudev
# adds stuff there
# The devices ID list is auto-generated using the gbp postimport hook
# see debian/README.sources for more details.
udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=1600 || true
udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=1660 || true
udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=1680 || true
udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=1681 || true
udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=1682 || true
udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=1683 || true
udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=1684 || true
udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=1685 || true
udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=1686 || true
udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=1687 || true
udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=1688 || true
udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=1689 || true
udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=168a || true
udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=168b || true
udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=168c || true
udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=168d || true
udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=168e || true
udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=168f || true
udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=2500 || true
udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=2580 || true
udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=2550 || true
udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=2810 || true
udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=2660 || true
udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=2680 || true
udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=2681 || true
udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=2682 || true
udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=2683 || true
udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=2684 || true
udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=2685 || true
udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=2686 || true
udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=2687 || true
udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=2688 || true
udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=2689 || true
udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=268a || true
udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=268b || true
udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=268c || true
udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=268d || true
udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=268e || true
udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=268f || true
udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=2691 || true
udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=5731 || true
udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=5501 || true
udevadm trigger --action=add --attr-match=idVendor=1c7a --attr-match=idProduct=0570 || true
udevadm trigger --action=add --attr-match=idVendor=1c7a --attr-match=idProduct=0571 || true
udevadm trigger --action=add --attr-match=idVendor=1c7a --attr-match=idProduct=0582 || true
udevadm trigger --action=add --attr-match=idVendor=1c7a --attr-match=idProduct=05a1 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0903 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0907 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c01 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c02 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c03 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c04 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c05 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c06 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c07 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c08 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c09 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c0a || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c0b || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c0c || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c0d || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c0e || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c0f || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c10 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c11 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c12 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c13 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c14 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c15 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c16 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c17 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c18 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c19 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c1a || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c1b || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c1c || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c1d || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c1e || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c1f || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c20 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c21 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c22 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c23 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c24 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c25 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c26 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c27 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c28 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c29 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c2a || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c2b || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c2c || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c2d || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c2e || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c2f || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c30 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c31 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c32 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c33 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c3d || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c42 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c4b || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c4d || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c4f || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c63 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c6e || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c58 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c7d || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c7e || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c82 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c88 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c8c || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c8d || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c99 || true
udevadm trigger --action=add --attr-match=idVendor=1c7a --attr-match=idProduct=0603 || true
udevadm trigger --action=add --attr-match=idVendor=2808 --attr-match=idProduct=9e48 || true
udevadm trigger --action=add --attr-match=idVendor=2808 --attr-match=idProduct=d979 || true
udevadm trigger --action=add --attr-match=idVendor=2808 --attr-match=idProduct=a959 || true
udevadm trigger --action=add --attr-match=idVendor=10a5 --attr-match=idProduct=ffe0 || true
udevadm trigger --action=add --attr-match=idVendor=10a5 --attr-match=idProduct=a305 || true
udevadm trigger --action=add --attr-match=idVendor=10a5 --attr-match=idProduct=da04 || true
udevadm trigger --action=add --attr-match=idVendor=10a5 --attr-match=idProduct=d805 || true
udevadm trigger --action=add --attr-match=idVendor=10a5 --attr-match=idProduct=d205 || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=5840 || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=6014 || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=6092 || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=6094 || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=609c || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=60a2 || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=60a4 || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=60bc || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=6304 || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=631c || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=633c || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=634c || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=6384 || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=639c || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=63ac || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=63bc || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=63cc || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=6496 || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=6582 || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=6584 || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=658c || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=6592 || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=6594 || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=659a || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=659c || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=6a94 || true
udevadm trigger --action=add --attr-match=idVendor=298d --attr-match=idProduct=1010 || true
udevadm trigger --action=add --attr-match=idVendor=0bda --attr-match=idProduct=5813 || true
udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=00bd || true
udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=00df || true
udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=00f9 || true
udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=00fc || true
udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=00c2 || true
udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=0100 || true
udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=00f0 || true
udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=0103 || true
udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=0123 || true
udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=0124 || true
udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=0126 || true
udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=0129 || true
udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=0168 || true
udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=015f || true
udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=0104 || true
udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=0173 || true
udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=0106 || true
udevadm trigger --action=add --attr-match=idVendor=147e --attr-match=idProduct=2016 || true
udevadm trigger --action=add --attr-match=idVendor=147e --attr-match=idProduct=1000 || true
udevadm trigger --action=add --attr-match=idVendor=147e --attr-match=idProduct=1001 || true
udevadm trigger --action=add --attr-match=idVendor=0483 --attr-match=idProduct=2015 || true
udevadm trigger --action=add --attr-match=idVendor=0483 --attr-match=idProduct=2017 || true
udevadm trigger --action=add --attr-match=idVendor=147e --attr-match=idProduct=3001 || true
udevadm trigger --action=add --attr-match=idVendor=147e --attr-match=idProduct=2020 || true
udevadm trigger --action=add --attr-match=idVendor=045e --attr-match=idProduct=00bc || true
udevadm trigger --action=add --attr-match=idVendor=045e --attr-match=idProduct=00bd || true
udevadm trigger --action=add --attr-match=idVendor=045e --attr-match=idProduct=00ca || true
udevadm trigger --action=add --attr-match=idVendor=05ba --attr-match=idProduct=0007 || true
udevadm trigger --action=add --attr-match=idVendor=05ba --attr-match=idProduct=0008 || true
udevadm trigger --action=add --attr-match=idVendor=05ba --attr-match=idProduct=000a || true
udevadm trigger --action=add --attr-match=idVendor=061a --attr-match=idProduct=0110 || true
udevadm trigger --action=add --attr-match=idVendor=138a --attr-match=idProduct=0050 || true
udevadm trigger --action=add --attr-match=idVendor=138a --attr-match=idProduct=0001 || true
udevadm trigger --action=add --attr-match=idVendor=138a --attr-match=idProduct=0005 || true
udevadm trigger --action=add --attr-match=idVendor=138a --attr-match=idProduct=0008 || true
udevadm trigger --action=add --attr-match=idVendor=138a --attr-match=idProduct=0010 || true
udevadm trigger --action=add --attr-match=idVendor=138a --attr-match=idProduct=0011 || true
udevadm trigger --action=add --attr-match=idVendor=138a --attr-match=idProduct=0015 || true
udevadm trigger --action=add --attr-match=idVendor=138a --attr-match=idProduct=0017 || true
udevadm trigger --action=add --attr-match=idVendor=138a --attr-match=idProduct=0018 || true
udevadm trigger --action=add --attr-match=idVendor=138a --attr-match=idProduct=0091 || true
udevadm trigger --action=add --attr-match=idVendor=047d --attr-match=idProduct=00f2 || true
udevadm trigger --action=add --attr-match=idVendor=04e8 --attr-match=idProduct=730b || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=036b || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c00 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c4c || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c57 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c5e || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c5a || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c6c || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c70 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c72 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c77 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=2706 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=3032 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=3057 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=3104 || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=310d || true
udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=3128 || true
udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=0081 || true
udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=0088 || true
udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=008a || true
udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=009a || true
udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=009b || true
udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=00a2 || true
udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=00a8 || true
udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=00b7 || true
udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=00bb || true
udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=00be || true
udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=00c4 || true
udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=00cb || true
udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=00c9 || true
udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=00d8 || true
udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=00da || true
udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=00dc || true
udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=00e4 || true
udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=00e7 || true
udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=00e9 || true
udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=00fd || true
udevadm trigger --action=add --attr-match=idVendor=0a5c --attr-match=idProduct=5801 || true
udevadm trigger --action=add --attr-match=idVendor=0a5c --attr-match=idProduct=5805 || true
udevadm trigger --action=add --attr-match=idVendor=0a5c --attr-match=idProduct=5834 || true
udevadm trigger --action=add --attr-match=idVendor=0a5c --attr-match=idProduct=5840 || true
udevadm trigger --action=add --attr-match=idVendor=0a5c --attr-match=idProduct=5841 || true
udevadm trigger --action=add --attr-match=idVendor=0a5c --attr-match=idProduct=5842 || true
udevadm trigger --action=add --attr-match=idVendor=0a5c --attr-match=idProduct=5843 || true
udevadm trigger --action=add --attr-match=idVendor=0a5c --attr-match=idProduct=5844 || true
udevadm trigger --action=add --attr-match=idVendor=0a5c --attr-match=idProduct=5845 || true
udevadm trigger --action=add --attr-match=idVendor=0bda --attr-match=idProduct=5812 || true
udevadm trigger --action=add --attr-match=idVendor=10a5 --attr-match=idProduct=0007 || true
udevadm trigger --action=add --attr-match=idVendor=10a5 --attr-match=idProduct=9200 || true
udevadm trigger --action=add --attr-match=idVendor=10a5 --attr-match=idProduct=9800 || true
udevadm trigger --action=add --attr-match=idVendor=10a5 --attr-match=idProduct=e340 || true
udevadm trigger --action=add --attr-match=idVendor=1188 --attr-match=idProduct=9545 || true
udevadm trigger --action=add --attr-match=idVendor=138a --attr-match=idProduct=0007 || true
udevadm trigger --action=add --attr-match=idVendor=138a --attr-match=idProduct=003a || true
udevadm trigger --action=add --attr-match=idVendor=138a --attr-match=idProduct=003c || true
udevadm trigger --action=add --attr-match=idVendor=138a --attr-match=idProduct=003d || true
udevadm trigger --action=add --attr-match=idVendor=138a --attr-match=idProduct=003f || true
udevadm trigger --action=add --attr-match=idVendor=138a --attr-match=idProduct=0090 || true
udevadm trigger --action=add --attr-match=idVendor=138a --attr-match=idProduct=0092 || true
udevadm trigger --action=add --attr-match=idVendor=138a --attr-match=idProduct=0094 || true
udevadm trigger --action=add --attr-match=idVendor=138a --attr-match=idProduct=0097 || true
udevadm trigger --action=add --attr-match=idVendor=138a --attr-match=idProduct=009d || true
udevadm trigger --action=add --attr-match=idVendor=138a --attr-match=idProduct=00ab || true
udevadm trigger --action=add --attr-match=idVendor=138a --attr-match=idProduct=00a6 || true
udevadm trigger --action=add --attr-match=idVendor=147e --attr-match=idProduct=1002 || true
udevadm trigger --action=add --attr-match=idVendor=1491 --attr-match=idProduct=0088 || true
udevadm trigger --action=add --attr-match=idVendor=16d1 --attr-match=idProduct=1027 || true
udevadm trigger --action=add --attr-match=idVendor=1c7a --attr-match=idProduct=0300 || true
udevadm trigger --action=add --attr-match=idVendor=1c7a --attr-match=idProduct=0575 || true
udevadm trigger --action=add --attr-match=idVendor=1c7a --attr-match=idProduct=0576 || true
udevadm trigger --action=add --attr-match=idVendor=1c7a --attr-match=idProduct=0577 || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=5042 || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=5110 || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=5117 || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=5120 || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=5125 || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=5201 || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=521d || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=5301 || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=530c || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=532d || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=5335 || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=533c || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=5381 || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=5385 || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=538c || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=538d || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=5395 || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=5503 || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=550a || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=550c || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=5584 || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=55a2 || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=55a4 || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=55b4 || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=5740 || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=5e0a || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=581a || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=589a || true
udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=6382 || true
udevadm trigger --action=add --attr-match=idVendor=2808 --attr-match=idProduct=9338 || true
udevadm trigger --action=add --attr-match=idVendor=2808 --attr-match=idProduct=93a9 || true
udevadm trigger --action=add --attr-match=idVendor=298d --attr-match=idProduct=2020 || true
udevadm trigger --action=add --attr-match=idVendor=298d --attr-match=idProduct=2033 || true
udevadm trigger --action=add --attr-match=idVendor=3538 --attr-match=idProduct=0930 || true
fi
exit 0
+17
View File
@@ -0,0 +1,17 @@
#!/bin/sh
set -e
#DEBHELPER#
if [ "$1" = "configure" -o "$1" = "upgrade" ] && command -V udevadm >/dev/null 2>&1; then
# apply hwdb rules at package installation, see
# <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=683863#27>
# NOTA BENE: after the DEBHELPER section since dh_installudev
# adds stuff there
# The devices ID list is auto-generated using the gbp postimport hook
# see debian/README.sources for more details.
@UDEVADM_TRIGGERS@
fi
exit 0
+94
View File
@@ -0,0 +1,94 @@
libfprint-2.so.2 libfprint-2-2 #MINVER#
* Build-Depends-Package: libfprint-2-dev
LIBFPRINT_2.0.0@LIBFPRINT_2.0.0 1:1.90.1
fp_context_enumerate@LIBFPRINT_2.0.0 1:1.90.1
fp_context_get_devices@LIBFPRINT_2.0.0 1:1.90.1
fp_context_get_type@LIBFPRINT_2.0.0 1:1.90.1
fp_context_new@LIBFPRINT_2.0.0 1:1.90.1
fp_device_capture@LIBFPRINT_2.0.0 1:1.90.1
fp_device_capture_finish@LIBFPRINT_2.0.0 1:1.90.1
fp_device_capture_sync@LIBFPRINT_2.0.0 1:1.90.1
fp_device_clear_storage@LIBFPRINT_2.0.0 1:1.94.1
fp_device_clear_storage_finish@LIBFPRINT_2.0.0 1:1.94.1
fp_device_clear_storage_sync@LIBFPRINT_2.0.0 1:1.94.1
fp_device_close@LIBFPRINT_2.0.0 1:1.90.1
fp_device_close_finish@LIBFPRINT_2.0.0 1:1.90.1
fp_device_close_sync@LIBFPRINT_2.0.0 1:1.90.1
fp_device_delete_print@LIBFPRINT_2.0.0 1:1.90.1
fp_device_delete_print_finish@LIBFPRINT_2.0.0 1:1.90.1
fp_device_delete_print_sync@LIBFPRINT_2.0.0 1:1.90.1
fp_device_enroll@LIBFPRINT_2.0.0 1:1.90.1
fp_device_enroll_finish@LIBFPRINT_2.0.0 1:1.90.1
fp_device_enroll_sync@LIBFPRINT_2.0.0 1:1.90.1
fp_device_error_get_type@LIBFPRINT_2.0.0 1:1.90.1
fp_device_error_quark@LIBFPRINT_2.0.0 1:1.90.1
fp_device_feature_get_type@LIBFPRINT_2.0.0 1:1.94.1
fp_device_get_device_id@LIBFPRINT_2.0.0 1:1.90.1
fp_device_get_driver@LIBFPRINT_2.0.0 1:1.90.1
fp_device_get_features@LIBFPRINT_2.0.0 1:1.94.1
fp_device_get_finger_status@LIBFPRINT_2.0.0 1:1.90.4
fp_device_get_name@LIBFPRINT_2.0.0 1:1.90.1
fp_device_get_nr_enroll_stages@LIBFPRINT_2.0.0 1:1.90.1
fp_device_get_scan_type@LIBFPRINT_2.0.0 1:1.90.1
fp_device_get_temperature@LIBFPRINT_2.0.0 1:1.94.1
fp_device_get_type@LIBFPRINT_2.0.0 1:1.90.1
fp_device_has_feature@LIBFPRINT_2.0.0 1:1.94.1
fp_device_has_storage@LIBFPRINT_2.0.0 1:1.90.1
fp_device_identify@LIBFPRINT_2.0.0 1:1.90.1
fp_device_identify_finish@LIBFPRINT_2.0.0 1:1.90.1
fp_device_identify_sync@LIBFPRINT_2.0.0 1:1.90.1
fp_device_is_open@LIBFPRINT_2.0.0 1:1.90.1
fp_device_list_prints@LIBFPRINT_2.0.0 1:1.90.1
fp_device_list_prints_finish@LIBFPRINT_2.0.0 1:1.90.1
fp_device_list_prints_sync@LIBFPRINT_2.0.0 1:1.90.1
fp_device_open@LIBFPRINT_2.0.0 1:1.90.1
fp_device_open_finish@LIBFPRINT_2.0.0 1:1.90.1
fp_device_open_sync@LIBFPRINT_2.0.0 1:1.90.1
fp_device_resume@LIBFPRINT_2.0.0 1:1.94.1
fp_device_resume_finish@LIBFPRINT_2.0.0 1:1.94.1
fp_device_resume_sync@LIBFPRINT_2.0.0 1:1.94.1
fp_device_retry_get_type@LIBFPRINT_2.0.0 1:1.90.1
fp_device_retry_quark@LIBFPRINT_2.0.0 1:1.90.1
fp_device_supports_capture@LIBFPRINT_2.0.0 1:1.90.1
fp_device_supports_identify@LIBFPRINT_2.0.0 1:1.90.1
fp_device_suspend@LIBFPRINT_2.0.0 1:1.94.1
fp_device_suspend_finish@LIBFPRINT_2.0.0 1:1.94.1
fp_device_suspend_sync@LIBFPRINT_2.0.0 1:1.94.1
fp_device_type_get_type@LIBFPRINT_2.0.0 1:1.90.1
fp_device_verify@LIBFPRINT_2.0.0 1:1.90.1
fp_device_verify_finish@LIBFPRINT_2.0.0 1:1.90.1
fp_device_verify_sync@LIBFPRINT_2.0.0 1:1.90.1
fp_finger_get_type@LIBFPRINT_2.0.0 1:1.90.1
fp_finger_status_flags_get_type@LIBFPRINT_2.0.0 1:1.90.4
fp_image_detect_minutiae@LIBFPRINT_2.0.0 1:1.90.1
fp_image_detect_minutiae_finish@LIBFPRINT_2.0.0 1:1.90.1
fp_image_device_get_type@LIBFPRINT_2.0.0 1:1.90.1
fp_image_get_binarized@LIBFPRINT_2.0.0 1:1.90.1
fp_image_get_data@LIBFPRINT_2.0.0 1:1.90.1
fp_image_get_height@LIBFPRINT_2.0.0 1:1.90.1
fp_image_get_minutiae@LIBFPRINT_2.0.0 1:1.90.1
fp_image_get_ppmm@LIBFPRINT_2.0.0 1:1.90.1
fp_image_get_type@LIBFPRINT_2.0.0 1:1.90.1
fp_image_get_width@LIBFPRINT_2.0.0 1:1.90.1
fp_image_new@LIBFPRINT_2.0.0 1:1.90.1
fp_minutia_get_coords@LIBFPRINT_2.0.0 1:1.90.1
fp_print_compatible@LIBFPRINT_2.0.0 1:1.90.1
fp_print_deserialize@LIBFPRINT_2.0.0 1:1.90.1
fp_print_equal@LIBFPRINT_2.0.0 1:1.90.1
fp_print_get_description@LIBFPRINT_2.0.0 1:1.90.1
fp_print_get_device_id@LIBFPRINT_2.0.0 1:1.90.1
fp_print_get_device_stored@LIBFPRINT_2.0.0 1:1.90.1
fp_print_get_driver@LIBFPRINT_2.0.0 1:1.90.1
fp_print_get_enroll_date@LIBFPRINT_2.0.0 1:1.90.1
fp_print_get_finger@LIBFPRINT_2.0.0 1:1.90.1
fp_print_get_image@LIBFPRINT_2.0.0 1:1.90.1
fp_print_get_type@LIBFPRINT_2.0.0 1:1.90.1
fp_print_get_username@LIBFPRINT_2.0.0 1:1.90.1
fp_print_new@LIBFPRINT_2.0.0 1:1.90.1
fp_print_serialize@LIBFPRINT_2.0.0 1:1.90.1
fp_print_set_description@LIBFPRINT_2.0.0 1:1.90.1
fp_print_set_enroll_date@LIBFPRINT_2.0.0 1:1.90.1
fp_print_set_finger@LIBFPRINT_2.0.0 1:1.90.1
fp_print_set_username@LIBFPRINT_2.0.0 1:1.90.1
fp_scan_type_get_type@LIBFPRINT_2.0.0 1:1.90.1
fp_temperature_get_type@LIBFPRINT_2.0.0 1:1.94.1
+4
View File
@@ -0,0 +1,4 @@
usr/include/libfprint-[0-9]/*.h
usr/lib/${DEB_HOST_MULTIARCH}/libfprint-[0-9].so
usr/lib/${DEB_HOST_MULTIARCH}/pkgconfig/libfprint-[0-9].pc
usr/share/gir-1.0/FPrint-*.gir
+1
View File
@@ -0,0 +1 @@
usr/share/gtk-doc/*/libfprint-*
+2
View File
@@ -0,0 +1,2 @@
usr/libexec/installed-tests/libfprint-[0-9]
usr/share/installed-tests/libfprint-[0-9]
+3
View File
@@ -0,0 +1,3 @@
usr/include/libfprint-[0-9]/tod-[0-9]/*
usr/lib/${DEB_HOST_MULTIARCH}/libfprint-[0-9]-tod.so
usr/lib/${DEB_HOST_MULTIARCH}/pkgconfig/libfprint-[0-9]-tod-[0-9].pc
+1
View File
@@ -0,0 +1 @@
usr/lib/${DEB_HOST_MULTIARCH}/libfprint-[0-9]-tod.so.*
+239
View File
@@ -0,0 +1,239 @@
libfprint-2-tod.so.1 libfprint-2-tod1 #MINVER#
LIBFPRINT_TOD_1.0.0@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
LIBFPRINT_TOD_1_1.92@LIBFPRINT_TOD_1_1.92 1:1.94.1+tod1
LIBFPRINT_TOD_1_1.94@LIBFPRINT_TOD_1_1.94 1:1.94.1+tod1
fpi_assemble_frames@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_assemble_lines@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_dup_data@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_dup_string_utf16@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_dup_string_utf32@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_dup_string_utf8@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_free@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_get_data@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_get_float32_be@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_get_float32_le@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_get_float64_be@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_get_float64_le@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_get_int16_be@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_get_int16_le@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_get_int24_be@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_get_int24_le@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_get_int32_be@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_get_int32_le@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_get_int64_be@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_get_int64_le@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_get_int8@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_get_pos@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_get_remaining@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_get_size@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_get_string_utf8@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_get_sub_reader@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_get_uint16_be@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_get_uint16_le@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_get_uint24_be@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_get_uint24_le@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_get_uint32_be@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_get_uint32_le@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_get_uint64_be@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_get_uint64_le@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_get_uint8@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_init@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_masked_scan_uint32@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_masked_scan_uint32_peek@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_new@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_peek_data@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_peek_float32_be@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_peek_float32_le@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_peek_float64_be@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_peek_float64_le@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_peek_int16_be@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_peek_int16_le@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_peek_int24_be@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_peek_int24_le@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_peek_int32_be@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_peek_int32_le@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_peek_int64_be@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_peek_int64_le@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_peek_int8@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_peek_string_utf8@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_peek_sub_reader@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_peek_uint16_be@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_peek_uint16_le@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_peek_uint24_be@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_peek_uint24_le@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_peek_uint32_be@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_peek_uint32_le@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_peek_uint64_be@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_peek_uint64_le@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_peek_uint8@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_set_pos@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_skip@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_skip_string_utf16@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_skip_string_utf32@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_reader_skip_string_utf8@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_writer_ensure_free_space@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_writer_fill@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_writer_free@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_writer_free_and_get_data@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_writer_get_remaining@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_writer_init@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_writer_init_with_data@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_writer_init_with_size@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_writer_new@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_writer_new_with_data@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_writer_new_with_size@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_writer_put_data@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_writer_put_float32_be@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_writer_put_float32_le@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_writer_put_float64_be@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_writer_put_float64_le@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_writer_put_int16_be@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_writer_put_int16_le@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_writer_put_int24_be@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_writer_put_int24_le@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_writer_put_int32_be@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_writer_put_int32_le@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_writer_put_int64_be@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_writer_put_int64_le@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_writer_put_int8@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_writer_put_string_utf16@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_writer_put_string_utf32@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_writer_put_string_utf8@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_writer_put_uint16_be@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_writer_put_uint16_le@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_writer_put_uint24_be@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_writer_put_uint24_le@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_writer_put_uint32_be@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_writer_put_uint32_le@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_writer_put_uint64_be@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_writer_put_uint64_le@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_writer_put_uint8@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_writer_reset@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_byte_writer_reset_and_get_data@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_device_action_error@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_device_action_get_type@LIBFPRINT_TOD_1.0.0 1:1.90.3+tod1
fpi_device_action_is_cancelled@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_device_add_timeout@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_device_capture_complete@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_device_class_auto_initialize_features@LIBFPRINT_TOD_1_1.92 1:1.94.1+tod1
fpi_device_clear_storage_complete@LIBFPRINT_TOD_1_1.92 1:1.94.1+tod1
fpi_device_close_complete@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_device_configure_wakeup@LIBFPRINT_TOD_1.0.0 1:1.94.1+tod1
fpi_device_critical_enter@LIBFPRINT_TOD_1_1.94 1:1.94.1+tod1
fpi_device_critical_leave@LIBFPRINT_TOD_1_1.94 1:1.94.1+tod1
fpi_device_delete_complete@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_device_enroll_complete@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_device_enroll_progress@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_device_error_new@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_device_error_new_msg@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_device_get_cancellable@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_device_get_capture_data@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_device_get_current_action@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_device_get_delete_data@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_device_get_driver_data@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_device_get_enroll_data@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_device_get_identify_data@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_device_get_udev_data@LIBFPRINT_TOD_1_1.92 1:1.94.1+tod1
fpi_device_get_usb_device@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_device_get_verify_data@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_device_get_virtual_env@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_device_identify_complete@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_device_identify_report@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_device_list_complete@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_device_open_complete@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_device_probe_complete@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_device_remove@LIBFPRINT_TOD_1.0.0 1:1.90.5+tod1
fpi_device_report_finger_status@LIBFPRINT_TOD_1.0.0 1:1.90.5+tod1
fpi_device_report_finger_status_changes@LIBFPRINT_TOD_1.0.0 1:1.90.5+tod1
fpi_device_resume@LIBFPRINT_TOD_1_1.94 1:1.94.5+tod1
fpi_device_resume_complete@LIBFPRINT_TOD_1_1.94 1:1.94.1+tod1
fpi_device_retry_new@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_device_retry_new_msg@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_device_set_nr_enroll_stages@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_device_set_scan_type@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_device_suspend@LIBFPRINT_TOD_1_1.94 1:1.94.5+tod1
fpi_device_suspend_complete@LIBFPRINT_TOD_1_1.94 1:1.94.1+tod1
fpi_device_udev_subtype_flags_get_type@LIBFPRINT_TOD_1.0.0 1:1.94.1+tod1
fpi_device_update_features@LIBFPRINT_TOD_1_1.92 1:1.94.1+tod1
fpi_device_update_temp@LIBFPRINT_TOD_1.0.0 1:1.94.1+tod1
fpi_device_verify_complete@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_device_verify_report@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_do_movement_estimation@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_image_device_activate@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_image_device_activate_complete@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_image_device_close_complete@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_image_device_deactivate@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_image_device_deactivate_complete@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_image_device_image_captured@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_image_device_open_complete@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_image_device_report_finger_status@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_image_device_retry_scan@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_image_device_session_error@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_image_device_set_bz3_threshold@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_image_device_state_get_type@LIBFPRINT_TOD_1.0.0 1:1.90.3+tod1
fpi_image_flags_get_type@LIBFPRINT_TOD_1.0.0 1:1.90.3+tod1
fpi_image_resize@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_match_result_get_type@LIBFPRINT_TOD_1.0.0 1:1.90.3+tod1
fpi_mean_sq_diff_norm@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_print_add_from_image@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_print_add_print@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_print_bz3_match@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_print_fill_from_user_id@LIBFPRINT_TOD_1.0.0 1:1.90.2+tod1
fpi_print_generate_user_id@LIBFPRINT_TOD_1.0.0 1:1.90.2+tod1
fpi_print_set_device_stored@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_print_set_type@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_print_type_get_type@LIBFPRINT_TOD_1.0.0 1:1.90.3+tod1
fpi_spi_transfer_get_type@LIBFPRINT_TOD_1_1.92 1:1.94.1+tod1
fpi_spi_transfer_new@LIBFPRINT_TOD_1_1.92 1:1.94.1+tod1
fpi_spi_transfer_read@LIBFPRINT_TOD_1_1.92 1:1.94.1+tod1
fpi_spi_transfer_read_full@LIBFPRINT_TOD_1_1.92 1:1.94.1+tod1
fpi_spi_transfer_ref@LIBFPRINT_TOD_1_1.92 1:1.94.1+tod1
fpi_spi_transfer_submit@LIBFPRINT_TOD_1_1.92 1:1.94.1+tod1
fpi_spi_transfer_submit_sync@LIBFPRINT_TOD_1_1.92 1:1.94.1+tod1
fpi_spi_transfer_unref@LIBFPRINT_TOD_1_1.92 1:1.94.1+tod1
fpi_spi_transfer_write@LIBFPRINT_TOD_1_1.92 1:1.94.1+tod1
fpi_spi_transfer_write_full@LIBFPRINT_TOD_1_1.92 1:1.94.1+tod1
fpi_ssm_cancel_delayed_state_change@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_ssm_dup_error@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_ssm_free@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_ssm_get_cur_state@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_ssm_get_data@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_ssm_get_device@LIBFPRINT_TOD_1_1.92 1:1.94.1+tod1
fpi_ssm_get_error@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_ssm_jump_to_state@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_ssm_jump_to_state_delayed@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_ssm_jump_to_state_delayed@LIBFPRINT_TOD_1_1.92 1:1.94.1+tod1
fpi_ssm_jump_to_state_delayed_1_90@LIBFPRINT_TOD_1.0.0 1:1.94.1+tod1
fpi_ssm_mark_completed@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_ssm_mark_completed_delayed@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_ssm_mark_completed_delayed@LIBFPRINT_TOD_1_1.92 1:1.94.1+tod1
fpi_ssm_mark_completed_delayed_1_90@LIBFPRINT_TOD_1.0.0 1:1.94.1+tod1
fpi_ssm_mark_failed@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_ssm_new_full@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_ssm_new_full@LIBFPRINT_TOD_1_1.92 1:1.94.1+tod1
fpi_ssm_new_full_1_90@LIBFPRINT_TOD_1.0.0 1:1.94.1+tod1
fpi_ssm_next_state@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_ssm_next_state_delayed@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_ssm_next_state_delayed@LIBFPRINT_TOD_1_1.92 1:1.94.1+tod1
fpi_ssm_next_state_delayed_1_90@LIBFPRINT_TOD_1.0.0 1:1.94.1+tod1
fpi_ssm_set_data@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_ssm_silence_debug@LIBFPRINT_TOD_1_1.94 1:1.94.3+tod1
fpi_ssm_spi_transfer_cb@LIBFPRINT_TOD_1_1.92 1:1.94.1+tod1
fpi_ssm_spi_transfer_with_weak_pointer_cb@LIBFPRINT_TOD_1_1.92 1:1.94.1+tod1
fpi_ssm_start@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_ssm_start_subsm@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_ssm_usb_transfer_cb@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_ssm_usb_transfer_with_weak_pointer_cb@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_std_sq_dev@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_transfer_type_get_type@LIBFPRINT_TOD_1.0.0 1:1.90.3+tod1
fpi_usb_transfer_fill_bulk@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_usb_transfer_fill_bulk_full@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_usb_transfer_fill_control@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_usb_transfer_fill_interrupt@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_usb_transfer_fill_interrupt_full@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_usb_transfer_get_type@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_usb_transfer_new@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_usb_transfer_ref@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_usb_transfer_submit@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_usb_transfer_submit_sync@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
fpi_usb_transfer_unref@LIBFPRINT_TOD_1.0.0 1:1.90.1+tod1
+37
View File
@@ -0,0 +1,37 @@
From a603b95786836d27679301ecd4e68e4227ab4c82 Mon Sep 17 00:00:00 2001
From: herman lin <herman.lin@emc.com.tw>
Date: Thu, 8 May 2025 15:34:37 +0800
Subject: [PATCH] elanmoc: Add new PID 0x0CA8
---
data/autosuspend.hwdb | 1 +
libfprint/drivers/elanmoc/elanmoc.c | 1 +
2 files changed, 2 insertions(+)
diff --git a/data/autosuspend.hwdb b/data/autosuspend.hwdb
index 39dd316..43190cb 100644
--- a/data/autosuspend.hwdb
+++ b/data/autosuspend.hwdb
@@ -157,6 +157,7 @@ usb:v04F3p0C8C*
usb:v04F3p0C8D*
usb:v04F3p0C99*
usb:v04F3p0C9F*
+usb:v04F3p0CA8*
ID_AUTOSUSPEND=1
ID_PERSIST=0
diff --git a/libfprint/drivers/elanmoc/elanmoc.c b/libfprint/drivers/elanmoc/elanmoc.c
index 42a84a6..0e99e57 100644
--- a/libfprint/drivers/elanmoc/elanmoc.c
+++ b/libfprint/drivers/elanmoc/elanmoc.c
@@ -33,6 +33,7 @@ static const FpIdEntry id_table[] = {
{ .vid = 0x04f3, .pid = 0x0c8d, },
{ .vid = 0x04f3, .pid = 0x0c99, },
{ .vid = 0x04f3, .pid = 0x0c9f, },
+ { .vid = 0x04f3, .pid = 0x0ca8, },
{ .vid = 0, .pid = 0, .driver_data = 0 }, /* terminating entry */
};
--
2.43.0
+28
View File
@@ -0,0 +1,28 @@
Subject: elanmoc: Add new PID 0x0C9F
Origin: upstream, https://gitlab.freedesktop.org/libfprint/libfprint/-/merge_requests/501
Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/libfprint/+bug/2089367
diff --git a/data/autosuspend.hwdb b/data/autosuspend.hwdb
index 8e0e6eab12e772058a8957a2b9f2d39e0bdc8e11..342c6d0e6538028d90a11d1607cd9e07086aeb8c 100644
--- a/data/autosuspend.hwdb
+++ b/data/autosuspend.hwdb
@@ -156,6 +156,7 @@ usb:v04F3p0C88*
usb:v04F3p0C8C*
usb:v04F3p0C8D*
usb:v04F3p0C99*
+usb:v04F3p0C9F*
ID_AUTOSUSPEND=1
ID_PERSIST=0
diff --git a/libfprint/drivers/elanmoc/elanmoc.c b/libfprint/drivers/elanmoc/elanmoc.c
index e86b79a28ec2240a303ad602b567d10447e3b09b..42a84a627e68020bb070bce1a6cffa669cffe9ed 100644
--- a/libfprint/drivers/elanmoc/elanmoc.c
+++ b/libfprint/drivers/elanmoc/elanmoc.c
@@ -32,6 +32,7 @@ static const FpIdEntry id_table[] = {
{ .vid = 0x04f3, .pid = 0x0c8c, },
{ .vid = 0x04f3, .pid = 0x0c8d, },
{ .vid = 0x04f3, .pid = 0x0c99, },
+ { .vid = 0x04f3, .pid = 0x0c9f, },
{ .vid = 0, .pid = 0, .driver_data = 0 }, /* terminating entry */
};
+37
View File
@@ -0,0 +1,37 @@
From 763b6830006ca88bced7744c219c9a961d1637f4 Mon Sep 17 00:00:00 2001
From: jialei <jialei@egoodix.com>
Date: Wed, 29 Oct 2025 14:32:54 +0800
Subject: [PATCH] goodixmoc:add new PID 0x66A9
---
data/autosuspend.hwdb | 1 +
libfprint/drivers/goodixmoc/goodix.c | 1 +
2 files changed, 2 insertions(+)
diff --git a/data/autosuspend.hwdb b/data/autosuspend.hwdb
index 74ac65b..df18494 100644
--- a/data/autosuspend.hwdb
+++ b/data/autosuspend.hwdb
@@ -207,6 +207,7 @@ usb:v27C6p6594*
usb:v27C6p659A*
usb:v27C6p659C*
usb:v27C6p6A94*
+usb:v27C6p66A9*
ID_AUTOSUSPEND=1
ID_PERSIST=0
diff --git a/libfprint/drivers/goodixmoc/goodix.c b/libfprint/drivers/goodixmoc/goodix.c
index 5a3ffac..8aea175 100644
--- a/libfprint/drivers/goodixmoc/goodix.c
+++ b/libfprint/drivers/goodixmoc/goodix.c
@@ -1632,6 +1632,7 @@ static const FpIdEntry id_table[] = {
{ .vid = 0x27c6, .pid = 0x659A, },
{ .vid = 0x27c6, .pid = 0x659C, },
{ .vid = 0x27c6, .pid = 0x6A94, },
+ { .vid = 0x27c6, .pid = 0x66A9, },
{ .vid = 0, .pid = 0, .driver_data = 0 }, /* terminating entry */
};
--
2.43.0
@@ -0,0 +1,44 @@
From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <mail@3v1n0.net>
Date: Wed, 22 May 2024 17:08:19 +0200
Subject: libfprint-fprint-list-udev-hwdb: Add new broadcom device IDs
(cherry picked from commit eaec2339ccaee64b2bdb1d1e27f51ada673e4087)
---
data/autosuspend.hwdb | 6 ++++++
libfprint/fprint-list-udev-hwdb.c | 6 ++++++
2 files changed, 12 insertions(+)
diff --git a/data/autosuspend.hwdb b/data/autosuspend.hwdb
index 74ac65b..cb3e74b 100644
--- a/data/autosuspend.hwdb
+++ b/data/autosuspend.hwdb
@@ -353,6 +353,12 @@ usb:v0A5Cp5842*
usb:v0A5Cp5843*
usb:v0A5Cp5844*
usb:v0A5Cp5845*
+usb:v0A5Cp5860*
+usb:v0A5Cp5863*
+usb:v0A5Cp5864*
+usb:v0A5Cp5865*
+usb:v0A5Cp5866*
+usb:v0A5Cp5867*
usb:v0BDAp5812*
usb:v10A5p0007*
usb:v10A5p9200*
diff --git a/libfprint/fprint-list-udev-hwdb.c b/libfprint/fprint-list-udev-hwdb.c
index bace9f9..4d056ae 100644
--- a/libfprint/fprint-list-udev-hwdb.c
+++ b/libfprint/fprint-list-udev-hwdb.c
@@ -76,6 +76,12 @@ static const FpIdEntry allowlist_id_table[] = {
{ .vid = 0x0a5c, .pid = 0x5843 },
{ .vid = 0x0a5c, .pid = 0x5844 },
{ .vid = 0x0a5c, .pid = 0x5845 },
+ { .vid = 0x0a5c, .pid = 0x5860 },
+ { .vid = 0x0a5c, .pid = 0x5863 },
+ { .vid = 0x0a5c, .pid = 0x5864 },
+ { .vid = 0x0a5c, .pid = 0x5865 },
+ { .vid = 0x0a5c, .pid = 0x5866 },
+ { .vid = 0x0a5c, .pid = 0x5867 },
{ .vid = 0x0bda, .pid = 0x5812 },
{ .vid = 0x10a5, .pid = 0x0007 },
{ .vid = 0x10a5, .pid = 0x9200 },
+7
View File
@@ -0,0 +1,7 @@
libfprint-fprint-list-udev-hwdb-Add-new-broadcom-device-I.patch
elanmoc-add-new-pid-0x0c9f.patch
synaptics-Add-new-PID-0x0107-and-0x108.patch
synaptics-Add-new-PID-0x019D.patch
synaptics-add-new-PID-0x019F-0x109-and-0x10A.patch
goodixmoc-add-new-PID-0x66A9.patch
elanmoc-Add-new-PID-0x0CA8.patch
@@ -0,0 +1,39 @@
From a8ef1672a4ca7e60760349ce320a8f5b778244d5 Mon Sep 17 00:00:00 2001
From: Aris Lin <aris.lin@synaptics.com>
Date: Mon, 18 Nov 2024 11:18:29 +0800
Subject: [PATCH] synaptics: Add new PID 0x0107 and 0x108
---
data/autosuspend.hwdb | 2 ++
libfprint/drivers/synaptics/synaptics.c | 2 ++
2 files changed, 4 insertions(+)
diff --git a/data/autosuspend.hwdb b/data/autosuspend.hwdb
index 74ac65b..386d8bd 100644
--- a/data/autosuspend.hwdb
+++ b/data/autosuspend.hwdb
@@ -229,6 +229,8 @@ usb:v06CBp00C2*
usb:v06CBp0100*
usb:v06CBp00F0*
usb:v06CBp0103*
+usb:v06CBp0107*
+usb:v06CBp0108*
usb:v06CBp0123*
usb:v06CBp0124*
usb:v06CBp0126*
diff --git a/libfprint/drivers/synaptics/synaptics.c b/libfprint/drivers/synaptics/synaptics.c
index 138e734..a5d2990 100644
--- a/libfprint/drivers/synaptics/synaptics.c
+++ b/libfprint/drivers/synaptics/synaptics.c
@@ -39,6 +39,8 @@ static const FpIdEntry id_table[] = {
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0100, },
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x00F0, },
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0103, },
+ { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0107, },
+ { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0108, },
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0123, },
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0124, },
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0126, },
--
2.43.0
+40
View File
@@ -0,0 +1,40 @@
From 2e766904f0250873aaa2133f5d0e84440843ec8b Mon Sep 17 00:00:00 2001
From: Aris Lin <aris.lin@synaptics.com>
Date: Mon, 13 May 2024 16:21:57 +0800
Subject: [PATCH] synaptics: Add new PID 0x019D
Origin: upstream, https://gitlab.freedesktop.org/libfprint/libfprint/-/commit/2e766904f0250873aaa2133f5d0e84440843ec8b
Bug-Ubuntu: https://bugs.launchpad.net/bugs/2114712
Signed-off-by: Atlas Yu <atlas.yu@canonical.com>
---
data/autosuspend.hwdb | 1 +
libfprint/drivers/synaptics/synaptics.c | 1 +
2 files changed, 2 insertions(+)
diff --git a/data/autosuspend.hwdb b/data/autosuspend.hwdb
index 342c6d0..ef81674 100644
--- a/data/autosuspend.hwdb
+++ b/data/autosuspend.hwdb
@@ -243,6 +243,7 @@ usb:v06CBp015F*
usb:v06CBp0104*
usb:v06CBp0173*
usb:v06CBp0106*
+usb:v06CBp019D*
ID_AUTOSUSPEND=1
ID_PERSIST=0
diff --git a/libfprint/drivers/synaptics/synaptics.c b/libfprint/drivers/synaptics/synaptics.c
index 138e734..7b7bf73 100644
--- a/libfprint/drivers/synaptics/synaptics.c
+++ b/libfprint/drivers/synaptics/synaptics.c
@@ -48,6 +48,7 @@ static const FpIdEntry id_table[] = {
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0104, },
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0173, },
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0106, },
+ { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x019D, },
{ .vid = 0, .pid = 0, .driver_data = 0 }, /* terminating entry */
};
--
2.43.0
@@ -0,0 +1,54 @@
From: Aris Lin <aris.lin@synaptics.com>
Date: Mon, 14 Jul 2025 11:52:56 +0800
Subject: [PATCH] synaptics: add new PID 0x019F, 0x109 and 0x10A
Origin: upstream, https://gitlab.freedesktop.org/libfprint/libfprint/-/commit/7f5304d6eec37955c8d462e571c3d72af0be4684
Bug-Ubuntu: https://bugs.launchpad.net/bugs/2133704
Signed-off-by: Bin Li <binli@ubuntu.com>
---
data/autosuspend.hwdb | 3 +++
libfprint/drivers/synaptics/synaptics.c | 3 +++
2 files changed, 6 insertions(+)
diff --git a/data/autosuspend.hwdb b/data/autosuspend.hwdb
index 7a1759e..10e643c 100644
--- a/data/autosuspend.hwdb
+++ b/data/autosuspend.hwdb
@@ -232,6 +232,8 @@ usb:v06CBp00F0*
usb:v06CBp0103*
usb:v06CBp0107*
usb:v06CBp0108*
+usb:v06CBp0109*
+usb:v06CBp010A*
usb:v06CBp0123*
usb:v06CBp0124*
usb:v06CBp0126*
@@ -242,6 +244,7 @@ usb:v06CBp0104*
usb:v06CBp0173*
usb:v06CBp0106*
usb:v06CBp019D*
+usb:v06CBp019F*
ID_AUTOSUSPEND=1
ID_PERSIST=0
diff --git a/libfprint/drivers/synaptics/synaptics.c b/libfprint/drivers/synaptics/synaptics.c
index d272421..29fb5f1 100644
--- a/libfprint/drivers/synaptics/synaptics.c
+++ b/libfprint/drivers/synaptics/synaptics.c
@@ -41,6 +41,8 @@ static const FpIdEntry id_table[] = {
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0103, },
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0107, },
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0108, },
+ { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0109, },
+ { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x010A, },
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0123, },
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0124, },
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0126, },
@@ -51,6 +53,7 @@ static const FpIdEntry id_table[] = {
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0173, },
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0106, },
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x019D, },
+ { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x019F, },
{ .vid = 0, .pid = 0, .driver_data = 0 }, /* terminating entry */
};
Vendored Executable
+26
View File
@@ -0,0 +1,26 @@
#!/usr/bin/make -f
export DEB_BUILD_MAINT_OPTIONS = optimize=-lto
export DPKG_GENSYMBOLS_CHECK_LEVEL = 2
BUILDDIR = $(CURDIR)/obj-$(DEB_HOST_GNU_TYPE)
# Configuration arguments
CONFIG_ARGS = \
-Dudev_hwdb=enabled \
-Dudev_rules=enabled \
-Ddrivers=all \
-Dgtk-examples=false
%:
dh $@ --with gir
override_dh_auto_configure:
dh_auto_configure -- $(CONFIG_ARGS)
override_dh_auto_test:
dh_auto_test -- -C $(BUILDDIR) --timeout-multiplier 5
override_dh_auto_clean:
rm -rf tests/__pycache__
dh_auto_clean
+1
View File
@@ -0,0 +1 @@
3.0 (quilt)
+3
View File
@@ -0,0 +1,3 @@
# This TOD driver binary is built using sources inside this package
# but at previous version, see tests/tod-drivers/README.md for more information
libfprint source: source-is-missing [tests/tod-drivers/tod-*.so]
+6
View File
@@ -0,0 +1,6 @@
Test-Command: gnome-desktop-testing-runner libfprint-2
Features: test-name=installed-tests
Classes: desktop
Depends: gnome-desktop-testing,
libfprint-2-tests
Restrictions: allow-stderr
+32
View File
@@ -0,0 +1,32 @@
#!/bin/bash
set -e
srcdir="${GBP_SOURCES_DIR:-.}"
debpath="$(dirname "$0")"
autosuspend_file="$srcdir/data/autosuspend.hwdb"
commands_lines=()
while IFS= read -r line; do
if [[ $line =~ ^usb:v([A-Fa-f0-9]{4})p([A-Fa-f0-9]{4}) ]]; then
vendor="$(echo "${BASH_REMATCH[1]}" | tr '[:upper:]' '[:lower:]')"
product="$(echo "${BASH_REMATCH[2]}" | tr '[:upper:]' '[:lower:]')"
commands_lines+=("\tudevadm trigger --action=add --attr-match=idVendor=$vendor --attr-match=idProduct=$product || true")
fi
done < "$autosuspend_file"
UDEVADM_TRIGGERS=$( IFS=$'\n'; echo -e "${commands_lines[*]}" )
export UDEVADM_TRIGGERS
for i in "$debpath"/libfprint-*.post*.in; do
out="${i%.in}"
perl -pe 's/\@UDEVADM_TRIGGERS\@/`printenv UDEVADM_TRIGGERS`/e' "$i" > "$out"
if [ -n "$GBP_BRANCH" ]; then
if ! git diff-index --quiet HEAD -- "$out"; then
git add "$out"
dch "${out#$srcdir}: Devices triggers updated"
git add debian/changelog
debcommit
fi
fi
done
+4
View File
@@ -0,0 +1,4 @@
---
Bug-Database: https://gitlab.freedesktop.org/3v1n0/libfprint/-/issues
Bug-Submit: https://gitlab.freedesktop.org/3v1n0/libfprint/-/issues/new
Repository-Browse: https://gitlab.freedesktop.org/3v1n0/libfprint/tree/tod
+5
View File
@@ -0,0 +1,5 @@
version=4
opts=versionmangle=s/_/./g \
https://gitlab.freedesktop.org/3v1n0/@PACKAGE@/tags \
.*\/archive\/[Vv]_?([\d_\+\.]+(?:\+git[0-9]+)?\+tod[0-9]+)\/@PACKAGE@-.*@ARCHIVE_EXT@
+2 -5
View File
@@ -101,14 +101,11 @@ plot_minutiae (unsigned char *rgbdata,
{ {
int i; int i;
#define write_pixel(num) \ #define write_pixel(num) do { \
do \
{ \
rgbdata[((num) * 3)] = 0xff; \ rgbdata[((num) * 3)] = 0xff; \
rgbdata[((num) * 3) + 1] = 0; \ rgbdata[((num) * 3) + 1] = 0; \
rgbdata[((num) * 3) + 2] = 0; \ rgbdata[((num) * 3) + 2] = 0; \
} \ } while(0)
while(0)
for (i = 0; i < minutiae->len; i++) for (i = 0; i < minutiae->len; i++)
{ {
-208
View File
@@ -1,208 +0,0 @@
/*
* Example storage clearing program, which deletes all the
* fingers which have been previously enrolled to disk.
* Copyright (C) 2020 Marco Trevisan <marco.trevisan@canonical.com>
* Copyright (C) 2024 Abhinav Baid <abhinavbaid@gmail.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#define FP_COMPONENT "example-clear-storage"
#include <stdlib.h>
#include <stdio.h>
#include <libfprint/fprint.h>
#include <glib-unix.h>
#include "storage.h"
#include "utilities.h"
typedef struct _ClearStorageData
{
GMainLoop *loop;
GCancellable *cancellable;
unsigned int sigint_handler;
int ret_value;
} ClearStorageData;
static void
clear_storage_data_free (ClearStorageData *clear_storage_data)
{
g_clear_handle_id (&clear_storage_data->sigint_handler, g_source_remove);
g_clear_object (&clear_storage_data->cancellable);
g_main_loop_unref (clear_storage_data->loop);
g_free (clear_storage_data);
}
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClearStorageData, clear_storage_data_free)
static void
on_device_closed (FpDevice *dev, GAsyncResult *res, void *user_data)
{
g_autoptr(GError) error = NULL;
ClearStorageData *clear_storage_data = user_data;
fp_device_close_finish (dev, res, &error);
if (error)
g_warning ("Failed closing device %s", error->message);
g_main_loop_quit (clear_storage_data->loop);
}
static void
clear_storage_quit (FpDevice *dev,
ClearStorageData *clear_storage_data)
{
if (!fp_device_is_open (dev))
{
g_main_loop_quit (clear_storage_data->loop);
return;
}
fp_device_close (dev, NULL, (GAsyncReadyCallback) on_device_closed,
clear_storage_data);
}
static void
on_clear_storage_completed (FpDevice *dev, GAsyncResult *res, void *user_data)
{
g_autoptr(GError) error = NULL;
ClearStorageData *clear_storage_data = user_data;
if (fp_device_clear_storage_finish (dev, res, &error))
{
if (!clear_saved_prints (dev, &error))
{
g_warning ("Clear saved prints from local storage failed: %s",
error->message);
clear_storage_data->ret_value = EXIT_FAILURE;
}
else
{
g_print ("Clear storage successful!\n");
clear_storage_data->ret_value = EXIT_SUCCESS;
}
clear_storage_quit (dev, clear_storage_data);
return;
}
g_warning ("Failed to clear storage: %s", error->message);
clear_storage_data->ret_value = EXIT_FAILURE;
if (g_error_matches (error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_NOT_SUPPORTED))
{
g_autoptr(GError) clear_error = NULL;
if (clear_saved_prints (dev, &clear_error))
clear_storage_data->ret_value = EXIT_SUCCESS;
else
g_warning ("Clear saved prints from local storage failed: %s",
clear_error->message);
}
clear_storage_quit (dev, clear_storage_data);
}
static void
start_clear_storage (FpDevice *dev, ClearStorageData *clear_storage_data)
{
char buffer[20];
g_print ("Clear device storage? [Y/n]? ");
if (fgets (buffer, sizeof (buffer), stdin) &&
(buffer[0] == 'Y' || buffer[0] == 'y'))
{
fp_device_clear_storage (dev, clear_storage_data->cancellable,
(GAsyncReadyCallback) on_clear_storage_completed,
clear_storage_data);
return;
}
clear_storage_quit (dev, clear_storage_data);
}
static void
on_device_opened (FpDevice *dev, GAsyncResult *res, void *user_data)
{
g_autoptr(GError) error = NULL;
ClearStorageData *clear_storage_data = user_data;
if (!fp_device_open_finish (dev, res, &error))
{
g_warning ("Failed to open device: %s", error->message);
clear_storage_quit (dev, clear_storage_data);
return;
}
g_print ("Opened device. ");
start_clear_storage (dev, clear_storage_data);
}
static gboolean
sigint_cb (void *user_data)
{
ClearStorageData *clear_storage_data = user_data;
g_cancellable_cancel (clear_storage_data->cancellable);
return G_SOURCE_CONTINUE;
}
int
main (void)
{
g_autoptr(FpContext) ctx = NULL;
g_autoptr(ClearStorageData) clear_storage_data = NULL;
GPtrArray *devices;
FpDevice *dev;
setenv ("G_MESSAGES_DEBUG", "all", 0);
setenv ("LIBUSB_DEBUG", "3", 0);
ctx = fp_context_new ();
devices = fp_context_get_devices (ctx);
if (!devices)
{
g_warning ("Impossible to get devices");
return EXIT_FAILURE;
}
dev = discover_device (devices);
if (!dev)
{
g_warning ("No devices detected.");
return EXIT_FAILURE;
}
clear_storage_data = g_new0 (ClearStorageData, 1);
clear_storage_data->ret_value = EXIT_FAILURE;
clear_storage_data->loop = g_main_loop_new (NULL, FALSE);
clear_storage_data->cancellable = g_cancellable_new ();
clear_storage_data->sigint_handler = g_unix_signal_add_full (G_PRIORITY_HIGH,
SIGINT,
sigint_cb,
clear_storage_data,
NULL);
fp_device_open (dev, clear_storage_data->cancellable,
(GAsyncReadyCallback) on_device_opened,
clear_storage_data);
g_main_loop_run (clear_storage_data->loop);
return clear_storage_data->ret_value;
}
+10 -1
View File
@@ -5,7 +5,6 @@ examples = [
'img-capture', 'img-capture',
'manage-prints', 'manage-prints',
'verify', 'verify',
'clear-storage',
] ]
foreach example: examples foreach example: examples
@@ -27,3 +26,13 @@ if installed_tests
install_subdir('prints', install_subdir('prints',
install_dir: installed_tests_testdir) install_dir: installed_tests_testdir)
endif endif
if get_option('tod')
executable('tod-inspector',
sources: 'tod-inspector.c',
dependencies: [
libfprint_dep,
tod_dep,
],
)
endif
+5 -63
View File
@@ -26,7 +26,6 @@
#include "storage.h" #include "storage.h"
#include <errno.h> #include <errno.h>
#include <glib/gstdio.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <unistd.h> #include <unistd.h>
@@ -56,18 +55,6 @@ get_print_data_descriptor (FpPrint *print, FpDevice *dev, FpFinger finger)
finger); finger);
} }
static char *
get_print_prefix_for_device (FpDevice *dev)
{
const char *driver;
const char *dev_id;
driver = fp_device_get_driver (dev);
dev_id = fp_device_get_device_id (dev);
return g_strdup_printf ("%s/%s/", driver, dev_id);
}
static GVariantDict * static GVariantDict *
load_data (void) load_data (void)
{ {
@@ -182,6 +169,8 @@ gallery_data_load (FpDevice *dev)
g_autoptr(GVariant) dict_variant = NULL; g_autoptr(GVariant) dict_variant = NULL;
g_autofree char *dev_prefix = NULL; g_autofree char *dev_prefix = NULL;
GPtrArray *gallery; GPtrArray *gallery;
const char *driver;
const char *dev_id;
GVariantIter iter; GVariantIter iter;
GVariant *value; GVariant *value;
gchar *key; gchar *key;
@@ -189,7 +178,9 @@ gallery_data_load (FpDevice *dev)
gallery = g_ptr_array_new_with_free_func (g_object_unref); gallery = g_ptr_array_new_with_free_func (g_object_unref);
dict = load_data (); dict = load_data ();
dict_variant = g_variant_dict_end (dict); dict_variant = g_variant_dict_end (dict);
dev_prefix = get_print_prefix_for_device (dev); driver = fp_device_get_driver (dev);
dev_id = fp_device_get_device_id (dev);
dev_prefix = g_strdup_printf ("%s/%s/", driver, dev_id);
g_variant_iter_init (&iter, dict_variant); g_variant_iter_init (&iter, dict_variant);
while (g_variant_iter_loop (&iter, "{sv}", &key, &value)) while (g_variant_iter_loop (&iter, "{sv}", &key, &value))
@@ -217,55 +208,6 @@ gallery_data_load (FpDevice *dev)
return gallery; return gallery;
} }
gboolean
clear_saved_prints (FpDevice *dev,
GError **error)
{
g_autoptr(GVariantDict) dict = NULL;
g_autoptr(GVariantDict) updated_dict = NULL;
g_autoptr(GVariant) dict_variant = NULL;
g_autofree char *dev_prefix = NULL;
GPtrArray *print_keys;
GVariantIter iter;
GVariant *value;
gchar *key;
print_keys = g_ptr_array_new_with_free_func (g_free);
dict = load_data ();
dict_variant = g_variant_dict_end (dict);
dev_prefix = get_print_prefix_for_device (dev);
g_variant_iter_init (&iter, dict_variant);
while (g_variant_iter_loop (&iter, "{sv}", &key, &value))
{
if (!g_str_has_prefix (key, dev_prefix))
continue;
g_ptr_array_add (print_keys, g_strdup (key));
}
if (!print_keys->len)
return TRUE;
updated_dict = load_data ();
for (guint i = 0; i < print_keys->len; ++i)
{
key = g_ptr_array_index (print_keys, i);
if (!g_variant_dict_remove (updated_dict, key))
{
g_warning ("Print '%s' key not found!", key);
continue;
}
g_debug ("Dropping print '%s' from gallery", key);
}
save_data (g_variant_dict_end (updated_dict));
return TRUE;
}
FpPrint * FpPrint *
print_create_template (FpDevice *dev, FpFinger finger, gboolean load_existing) print_create_template (FpDevice *dev, FpFinger finger, gboolean load_existing)
{ {
-5
View File
@@ -20,17 +20,12 @@
#pragma once #pragma once
#include <glib.h>
#include <libfprint/fprint.h>
int print_data_save (FpPrint *print, int print_data_save (FpPrint *print,
FpFinger finger, FpFinger finger,
gboolean update_fingerprint); gboolean update_fingerprint);
FpPrint * print_data_load (FpDevice *dev, FpPrint * print_data_load (FpDevice *dev,
FpFinger finger); FpFinger finger);
GPtrArray * gallery_data_load (FpDevice *dev); GPtrArray * gallery_data_load (FpDevice *dev);
gboolean clear_saved_prints (FpDevice *dev,
GError **error);
FpPrint * print_create_template (FpDevice *dev, FpPrint * print_create_template (FpDevice *dev,
FpFinger finger, FpFinger finger,
const gboolean load_existing); const gboolean load_existing);
+161
View File
@@ -0,0 +1,161 @@
/*
* Shared library loader for libfprint
* Copyright (C) 2021 Marco Trevisan <marco.trevisan@canonical.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <libfprint/fprint.h>
#include "libfprint/tod/tod-shared-loader.h"
#include "libfprint/fpi-device.h"
static char *
id_table_to_string (FpDeviceType device_type,
const FpIdEntry *id_table)
{
const FpIdEntry *entry;
char *str = NULL;
if (!id_table)
return g_strdup ("INVALID: Empty ID table");
entry = id_table;
while (TRUE)
{
g_autofree char *value = NULL;
if (device_type == FP_DEVICE_TYPE_VIRTUAL)
{
if (entry->virtual_envvar)
value = g_strdup (entry->virtual_envvar);
}
else if (device_type == FP_DEVICE_TYPE_USB)
{
if (entry->vid)
value = g_strdup_printf ("%04x:%04x", entry->vid, entry->pid);
}
else if (device_type == FP_DEVICE_TYPE_UDEV)
{
if (entry->hid_id.vid)
{
g_autofree gchar *udev_flags = NULL;
udev_flags = g_flags_to_string (fpi_device_udev_subtype_flags_get_type (),
entry->udev_types);
value = g_strdup_printf ("%s (%04x:%04x) [%s]",
entry->spi_acpi_id,
entry->hid_id.vid, entry->hid_id.pid,
udev_flags);
}
else
{
value = g_strdup (entry->spi_acpi_id);
}
}
else
{
return g_strdup ("Unsupported device type");
}
if (!value)
return str;
if (!str)
{
str = g_steal_pointer (&value);
}
else
{
g_autofree char *tmp = g_steal_pointer (&str);
str = g_strconcat (tmp, ", ", value, NULL);
}
entry++;
}
return str;
}
static const char *
device_type_to_string (FpDeviceType device_type)
{
g_autoptr(GEnumClass) device_types = g_type_class_ref (fp_device_type_get_type ());
GEnumValue *value = g_enum_get_value (device_types, device_type);
return value->value_nick;
}
static const char *
scan_type_to_string (FpScanType scan_type)
{
g_autoptr(GEnumClass) scan_types = g_type_class_ref (fp_scan_type_get_type ());
GEnumValue *value = g_enum_get_value (scan_types, scan_type);
return value->value_nick;
}
int
main (void)
{
g_autoptr(GArray) shared_drivers = NULL;
guint i;
tod_shared_drivers_register ();
shared_drivers = tod_shared_drivers_get ();
g_print ("Found %u drivers\n", shared_drivers->len);
for (i = 0; i < shared_drivers->len; i++)
{
GType driver = g_array_index (shared_drivers, GType, i);
g_autoptr(FpDeviceClass) cls = g_type_class_ref (driver);
g_autofree char *id_table = NULL;
g_autofree char *features = NULL;
id_table = id_table_to_string (cls->type, cls->id_table);
features = g_flags_to_string (fp_device_feature_get_type (), cls->features);
g_print ("ID: %s\n", cls->id);
g_print ("Full Name: %s\n", cls->full_name);
g_print ("Type: %s\n", device_type_to_string (cls->type));
g_print ("Enroll stages: %d\n", cls->nr_enroll_stages);
g_print ("Scan type: %s\n", scan_type_to_string (cls->scan_type));
g_print ("Seconds to get Hot: %d\n", cls->temp_hot_seconds);
g_print ("Seconds to get Cold: %d\n", cls->temp_cold_seconds);
g_print ("Supported Devices: %s\n", id_table);
g_print ("Supported features: %s\n", features);
g_print ("Implemented VFuncs:\n");
g_print (" usb_discover: %s\n", cls->usb_discover ? "true" : "false");
g_print (" probe: %s\n", cls->probe ? "true" : "false");
g_print (" open: %s\n", cls->open ? "true" : "false");
g_print (" close: %s\n", cls->close ? "true" : "false");
g_print (" suspend: %s\n", cls->suspend ? "true" : "false");
g_print (" resume: %s\n", cls->resume ? "true" : "false");
g_print (" enroll: %s\n", cls->enroll ? "true" : "false");
g_print (" verify: %s\n", cls->verify ? "true" : "false");
g_print (" identify: %s\n", cls->identify ? "true" : "false");
g_print (" capture: %s\n", cls->capture ? "true" : "false");
g_print (" list: %s\n", cls->list ? "true" : "false");
g_print (" delete: %s\n", cls->delete ? "true" : "false");
g_print (" clear_storage: %s\n", cls->clear_storage ? "true" : "false");
g_print (" cancel: %s\n", cls->cancel ? "true" : "false");
if (i < shared_drivers->len - 1)
g_print ("------------\n");
}
tod_shared_drivers_unregister ();
}
-1
View File
@@ -1 +0,0 @@
gcov-ignore-parse-errors = suspicious_hits.warn
+155 -240
View File
@@ -32,7 +32,6 @@
#include <sys/param.h> #include <sys/param.h>
#include "drivers_api.h" #include "drivers_api.h"
#include "fpi-byte-writer.h"
#include "egismoc.h" #include "egismoc.h"
@@ -43,19 +42,15 @@ struct _FpiDeviceEgisMoc
FpiSsm *cmd_ssm; FpiSsm *cmd_ssm;
FpiUsbTransfer *cmd_transfer; FpiUsbTransfer *cmd_transfer;
GCancellable *interrupt_cancellable; GCancellable *interrupt_cancellable;
int enrolled_num;
GPtrArray *enrolled_ids; GPtrArray *enrolled_ids;
gint max_enroll_stages;
}; };
G_DEFINE_TYPE (FpiDeviceEgisMoc, fpi_device_egismoc, FP_TYPE_DEVICE); G_DEFINE_TYPE (FpiDeviceEgisMoc, fpi_device_egismoc, FP_TYPE_DEVICE);
static const FpIdEntry egismoc_id_table[] = { static const FpIdEntry egismoc_id_table[] = {
{ .vid = 0x1c7a, .pid = 0x0582, .driver_data = EGISMOC_DRIVER_CHECK_PREFIX_TYPE1 }, { .vid = 0x1c7a, .pid = 0x0582, .driver_data = EGISMOC_DRIVER_CHECK_PREFIX_TYPE1 },
{ .vid = 0x1c7a, .pid = 0x0583, .driver_data = EGISMOC_DRIVER_CHECK_PREFIX_TYPE1 },
{ .vid = 0x1c7a, .pid = 0x0584, .driver_data = EGISMOC_DRIVER_CHECK_PREFIX_TYPE1 | EGISMOC_DRIVER_MAX_ENROLL_STAGES_20 },
{ .vid = 0x1c7a, .pid = 0x0586, .driver_data = EGISMOC_DRIVER_CHECK_PREFIX_TYPE1 | EGISMOC_DRIVER_MAX_ENROLL_STAGES_20 },
{ .vid = 0x1c7a, .pid = 0x0587, .driver_data = EGISMOC_DRIVER_CHECK_PREFIX_TYPE1 | EGISMOC_DRIVER_MAX_ENROLL_STAGES_20 },
{ .vid = 0x1c7a, .pid = 0x0588, .driver_data = EGISMOC_DRIVER_CHECK_PREFIX_TYPE1 | EGISMOC_DRIVER_MAX_ENROLL_STAGES_20 },
{ .vid = 0x1c7a, .pid = 0x05a1, .driver_data = EGISMOC_DRIVER_CHECK_PREFIX_TYPE2 }, { .vid = 0x1c7a, .pid = 0x05a1, .driver_data = EGISMOC_DRIVER_CHECK_PREFIX_TYPE2 },
{ .vid = 0, .pid = 0, .driver_data = 0 } { .vid = 0, .pid = 0, .driver_data = 0 }
}; };
@@ -159,6 +154,8 @@ egismoc_task_ssm_done (FpiSsm *ssm,
self->task_ssm = NULL; self->task_ssm = NULL;
g_clear_pointer (&self->enrolled_ids, g_ptr_array_unref); g_clear_pointer (&self->enrolled_ids, g_ptr_array_unref);
self->enrolled_ids = NULL;
self->enrolled_num = -1;
if (error) if (error)
fpi_device_action_error (device, error); fpi_device_action_error (device, error);
@@ -276,24 +273,43 @@ egismoc_cmd_ssm_done (FpiSsm *ssm,
data->callback (device, NULL, 0, g_steal_pointer (&local_error)); data->callback (device, NULL, 0, g_steal_pointer (&local_error));
} }
typedef union
{
guint16 check_value;
guchar check_bytes[EGISMOC_CHECK_BYTES_LENGTH];
} EgisMocCheckBytes;
G_STATIC_ASSERT (G_SIZEOF_MEMBER (EgisMocCheckBytes, check_value) ==
sizeof (guint8) * EGISMOC_CHECK_BYTES_LENGTH);
/* /*
* Derive the 2 "check bytes" for write payloads * Derive the 2 "check bytes" for write payloads
* 32-bit big-endian sum of all 16-bit words (including check bytes) MOD 0xFFFF * 32-bit big-endian sum of all 16-bit words (including check bytes) MOD 0xFFFF
* should be 0, otherwise the device will reject the payload * should be 0, otherwise the device will reject the payload
*/ */
static guint16 static EgisMocCheckBytes
egismoc_get_check_bytes (FpiByteReader *reader) egismoc_get_check_bytes (const guchar *value,
const gsize value_length)
{ {
fp_dbg ("Get check bytes"); fp_dbg ("Get check bytes");
EgisMocCheckBytes check_bytes;
const size_t steps = (value_length + 1) / 2;
guint16 values[steps];
size_t sum_values = 0; size_t sum_values = 0;
guint16 val;
fpi_byte_reader_set_pos (reader, 0); for (int i = 0, j = 0; i < value_length; i += 2, j++)
{
values[j] = (value[i] << 8 & 0xff00);
while (fpi_byte_reader_get_uint16_be (reader, &val)) if (i < value_length - 1)
sum_values += val; values[j] |= value[i + 1] & 0x00ff;
}
return G_MAXUINT16 - (sum_values % G_MAXUINT16); for (int i = 0; i < steps; i++)
sum_values += values[i];
check_bytes.check_value = GUINT16_TO_BE (0xffff - (sum_values % 0xffff));
return check_bytes;
} }
static void static void
@@ -303,15 +319,22 @@ egismoc_exec_cmd (FpDevice *device,
GDestroyNotify cmd_destroy, GDestroyNotify cmd_destroy,
SynCmdMsgCallback callback) SynCmdMsgCallback callback)
{ {
g_auto(FpiByteWriter) writer = {0};
g_autoptr(FpiUsbTransfer) transfer = NULL;
FpiDeviceEgisMoc *self = FPI_DEVICE_EGISMOC (device);
g_autofree CommandData *data = NULL;
gsize buffer_out_length = 0;
gboolean written = TRUE;
guint16 check_value;
fp_dbg ("Execute command and get response"); fp_dbg ("Execute command and get response");
FpiDeviceEgisMoc *self = FPI_DEVICE_EGISMOC (device);
EgisMocCheckBytes check_bytes;
g_autofree guchar *buffer_out = NULL;
gsize buffer_out_length = 0;
g_autoptr(FpiUsbTransfer) transfer = NULL;
CommandData *data = g_new0 (CommandData, 1);
g_assert (self->cmd_ssm == NULL);
self->cmd_ssm = fpi_ssm_new (device,
egismoc_cmd_run_state,
CMD_STATES);
transfer = fpi_usb_transfer_new (device);
transfer->short_is_error = TRUE;
/* /*
* buffer_out should be a fully composed command (with prefix, check bytes, etc) * buffer_out should be a fully composed command (with prefix, check bytes, etc)
@@ -324,60 +347,40 @@ egismoc_exec_cmd (FpDevice *device,
buffer_out_length = egismoc_write_prefix_len buffer_out_length = egismoc_write_prefix_len
+ EGISMOC_CHECK_BYTES_LENGTH + EGISMOC_CHECK_BYTES_LENGTH
+ cmd_length; + cmd_length;
buffer_out = g_new0 (guchar, buffer_out_length);
fpi_byte_writer_init_with_size (&writer, buffer_out_length +
(buffer_out_length % 2 ? 1 : 0), TRUE);
/* Prefix */ /* Prefix */
written &= fpi_byte_writer_put_data (&writer, egismoc_write_prefix, memcpy (buffer_out, egismoc_write_prefix, egismoc_write_prefix_len);
egismoc_write_prefix_len);
/* Check Bytes - leave them as 00 for now then later generate and copy over /* Check Bytes - leave them as 00 for now then later generate and copy over
* the real ones */ * the real ones */
written &= fpi_byte_writer_change_pos (&writer, EGISMOC_CHECK_BYTES_LENGTH);
/* Command Payload */ /* Command Payload */
written &= fpi_byte_writer_put_data (&writer, cmd, cmd_length); memcpy (buffer_out + egismoc_write_prefix_len + EGISMOC_CHECK_BYTES_LENGTH,
cmd, cmd_length);
/* Now fetch and set the "real" check bytes based on the currently
* assembled payload */
check_value = egismoc_get_check_bytes (FPI_BYTE_READER (&writer));
fpi_byte_writer_set_pos (&writer, egismoc_write_prefix_len);
written &= fpi_byte_writer_put_uint16_be (&writer, check_value);
/* destroy cmd if requested */ /* destroy cmd if requested */
if (cmd_destroy) if (cmd_destroy)
g_clear_pointer (&cmd, cmd_destroy); cmd_destroy (cmd);
g_assert (self->cmd_ssm == NULL); /* Now fetch and set the "real" check bytes based on the currently
self->cmd_ssm = fpi_ssm_new (device, * assembled payload */
egismoc_cmd_run_state, check_bytes = egismoc_get_check_bytes (buffer_out, buffer_out_length);
CMD_STATES); memcpy (buffer_out + egismoc_write_prefix_len, check_bytes.check_bytes,
EGISMOC_CHECK_BYTES_LENGTH);
data = g_new0 (CommandData, 1);
data->callback = callback;
fpi_ssm_set_data (self->cmd_ssm, g_steal_pointer (&data), g_free);
if (!written)
{
fpi_ssm_start (self->cmd_ssm, egismoc_cmd_ssm_done);
fpi_ssm_mark_failed (self->cmd_ssm,
fpi_device_error_new (FP_DEVICE_ERROR_PROTO));
return;
}
transfer = fpi_usb_transfer_new (device);
transfer->short_is_error = TRUE;
transfer->ssm = self->cmd_ssm;
fpi_usb_transfer_fill_bulk_full (transfer, fpi_usb_transfer_fill_bulk_full (transfer,
EGISMOC_EP_CMD_OUT, EGISMOC_EP_CMD_OUT,
fpi_byte_writer_reset_and_get_data (&writer), g_steal_pointer (&buffer_out),
buffer_out_length, buffer_out_length,
g_free); g_free);
transfer->ssm = self->cmd_ssm;
g_assert (self->cmd_transfer == NULL); g_assert (self->cmd_transfer == NULL);
self->cmd_transfer = g_steal_pointer (&transfer); self->cmd_transfer = g_steal_pointer (&transfer);
data->callback = callback;
fpi_ssm_set_data (self->cmd_ssm, data, g_free);
fpi_ssm_start (self->cmd_ssm, egismoc_cmd_ssm_done); fpi_ssm_start (self->cmd_ssm, egismoc_cmd_ssm_done);
} }
@@ -416,13 +419,11 @@ egismoc_get_enrolled_prints (FpDevice *device)
FpiDeviceEgisMoc *self = FPI_DEVICE_EGISMOC (device); FpiDeviceEgisMoc *self = FPI_DEVICE_EGISMOC (device);
g_autoptr(GPtrArray) result = g_ptr_array_new_with_free_func (g_object_unref); g_autoptr(GPtrArray) result = g_ptr_array_new_with_free_func (g_object_unref);
FpPrint *print = NULL;
if (!self->enrolled_ids) for (int i = 0; i < self->enrolled_num; i++)
return g_steal_pointer (&result);
for (guint i = 0; i < self->enrolled_ids->len; i++)
{ {
FpPrint *print = fp_print_new (device); print = fp_print_new (device);
egismoc_set_print_data (print, g_ptr_array_index (self->enrolled_ids, i), NULL); egismoc_set_print_data (print, g_ptr_array_index (self->enrolled_ids, i), NULL);
g_ptr_array_add (result, g_object_ref_sink (print)); g_ptr_array_add (result, g_object_ref_sink (print));
} }
@@ -447,37 +448,26 @@ egismoc_list_fill_enrolled_ids_cb (FpDevice *device,
g_clear_pointer (&self->enrolled_ids, g_ptr_array_unref); g_clear_pointer (&self->enrolled_ids, g_ptr_array_unref);
self->enrolled_ids = g_ptr_array_new_with_free_func (g_free); self->enrolled_ids = g_ptr_array_new_with_free_func (g_free);
self->enrolled_num = 0;
FpiByteReader reader;
gboolean read = TRUE;
fpi_byte_reader_init (&reader, buffer_in, length_in);
read &= fpi_byte_reader_set_pos (&reader, EGISMOC_LIST_RESPONSE_PREFIX_SIZE);
/* /*
* Each fingerprint ID will be returned in this response as a 32 byte array * Each fingerprint ID will be returned in this response as a 32 byte array
* The other stuff in the payload is 16 bytes long, so if there is at least 1 * The other stuff in the payload is 16 bytes long, so if there is at least 1
* print then the length should be at least 16+32=48 bytes long * print then the length should be at least 16+32=48 bytes long
*/ */
while (read) for (int pos = EGISMOC_LIST_RESPONSE_PREFIX_SIZE;
pos < length_in - EGISMOC_LIST_RESPONSE_SUFFIX_SIZE;
pos += EGISMOC_FINGERPRINT_DATA_SIZE, self->enrolled_num++)
{ {
const guint8 *data; g_autofree gchar *print_id = g_strndup ((gchar *) buffer_in + pos,
g_autofree gchar *print_id = NULL; EGISMOC_FINGERPRINT_DATA_SIZE);
fp_dbg ("Device fingerprint %0d: %.*s", self->enrolled_num,
read &= fpi_byte_reader_get_data (&reader, EGISMOC_FINGERPRINT_DATA_SIZE,
&data);
if (!read)
break;
print_id = g_strndup ((gchar *) data, EGISMOC_FINGERPRINT_DATA_SIZE);
fp_dbg ("Device fingerprint %0d: %.*s", self->enrolled_ids->len + 1,
EGISMOC_FINGERPRINT_DATA_SIZE, print_id); EGISMOC_FINGERPRINT_DATA_SIZE, print_id);
g_ptr_array_add (self->enrolled_ids, g_steal_pointer (&print_id)); g_ptr_array_add (self->enrolled_ids, g_steal_pointer (&print_id));
} }
fp_info ("Number of currently enrolled fingerprints on the device is %d", fp_info ("Number of currently enrolled fingerprints on the device is %d",
self->enrolled_ids->len); self->enrolled_num);
if (self->task_ssm) if (self->task_ssm)
fpi_ssm_next_state (self->task_ssm); fpi_ssm_next_state (self->task_ssm);
@@ -524,7 +514,6 @@ egismoc_get_delete_cmd (FpDevice *device,
{ {
fp_dbg ("Get delete command"); fp_dbg ("Get delete command");
FpiDeviceEgisMoc *self = FPI_DEVICE_EGISMOC (device); FpiDeviceEgisMoc *self = FPI_DEVICE_EGISMOC (device);
g_auto(FpiByteWriter) writer = {0};
g_autoptr(GVariant) print_data = NULL; g_autoptr(GVariant) print_data = NULL;
g_autoptr(GVariant) print_data_id_var = NULL; g_autoptr(GVariant) print_data_id_var = NULL;
const guchar *print_data_id = NULL; const guchar *print_data_id = NULL;
@@ -532,7 +521,7 @@ egismoc_get_delete_cmd (FpDevice *device,
g_autofree gchar *print_description = NULL; g_autofree gchar *print_description = NULL;
g_autofree guchar *enrolled_print_id = NULL; g_autofree guchar *enrolled_print_id = NULL;
g_autofree guchar *result = NULL; g_autofree guchar *result = NULL;
gboolean written = TRUE; gsize pos = 0;
/* /*
* The final command body should contain: * The final command body should contain:
@@ -548,12 +537,7 @@ egismoc_get_delete_cmd (FpDevice *device,
* identifiers (enrolled_list) * identifiers (enrolled_list)
*/ */
int num_to_delete = 0; const int num_to_delete = (!delete_print) ? self->enrolled_num : 1;
if (delete_print)
num_to_delete = 1;
else if (self->enrolled_ids)
num_to_delete = self->enrolled_ids->len;
const gsize body_length = sizeof (guchar) * EGISMOC_FINGERPRINT_DATA_SIZE * const gsize body_length = sizeof (guchar) * EGISMOC_FINGERPRINT_DATA_SIZE *
num_to_delete; num_to_delete;
/* total_length is the 6 various bytes plus prefix and body payload */ /* total_length is the 6 various bytes plus prefix and body payload */
@@ -561,10 +545,10 @@ egismoc_get_delete_cmd (FpDevice *device,
body_length; body_length;
/* pre-fill entire payload with 00s */ /* pre-fill entire payload with 00s */
fpi_byte_writer_init_with_size (&writer, total_length, TRUE); result = g_new0 (guchar, total_length);
/* start with 00 00 (just move starting offset up by 2) */ /* start with 00 00 (just move starting offset up by 2) */
written &= fpi_byte_writer_set_pos (&writer, 2); pos = 2;
/* Size Counter bytes */ /* Size Counter bytes */
/* "easiest" way to handle 2-bytes size for counter is to hard-code logic for /* "easiest" way to handle 2-bytes size for counter is to hard-code logic for
@@ -573,31 +557,37 @@ egismoc_get_delete_cmd (FpDevice *device,
* (assumed max is 10) */ * (assumed max is 10) */
if (num_to_delete > 7) if (num_to_delete > 7)
{ {
written &= fpi_byte_writer_put_uint8 (&writer, 0x01); memset (result + pos, 0x01, sizeof (guchar));
written &= fpi_byte_writer_put_uint8 (&writer, ((num_to_delete - 8) * 0x20) + 0x07); pos += sizeof (guchar);
memset (result + pos, ((num_to_delete - 8) * 0x20) + 0x07, sizeof (guchar));
pos += sizeof (guchar);
} }
else else
{ {
/* first byte is 0x00, just skip it */ /* first byte is 0x00, just skip it */
written &= fpi_byte_writer_change_pos (&writer, 1); pos += sizeof (guchar);
written &= fpi_byte_writer_put_uint8 (&writer, (num_to_delete * 0x20) + 0x07); memset (result + pos, (num_to_delete * 0x20) + 0x07, sizeof (guchar));
pos += sizeof (guchar);
} }
/* command prefix */ /* command prefix */
written &= fpi_byte_writer_put_data (&writer, cmd_delete_prefix, memcpy (result + pos, cmd_delete_prefix, cmd_delete_prefix_len);
cmd_delete_prefix_len); pos += cmd_delete_prefix_len;
/* 2-bytes size logic for counter again */ /* 2-bytes size logic for counter again */
if (num_to_delete > 7) if (num_to_delete > 7)
{ {
written &= fpi_byte_writer_put_uint8 (&writer, 0x01); memset (result + pos, 0x01, sizeof (guchar));
written &= fpi_byte_writer_put_uint8 (&writer, (num_to_delete - 8) * 0x20); pos += sizeof (guchar);
memset (result + pos, ((num_to_delete - 8) * 0x20), sizeof (guchar));
pos += sizeof (guchar);
} }
else else
{ {
/* first byte is 0x00, just skip it */ /* first byte is 0x00, just skip it */
written &= fpi_byte_writer_change_pos (&writer, 1); pos += sizeof (guchar);
written &= fpi_byte_writer_put_uint8 (&writer, num_to_delete * 0x20); memset (result + pos, (num_to_delete * 0x20), sizeof (guchar));
pos += sizeof (guchar);
} }
/* append desired 32-byte fingerprint IDs */ /* append desired 32-byte fingerprint IDs */
@@ -624,26 +614,21 @@ egismoc_get_delete_cmd (FpDevice *device,
fp_info ("Delete fingerprint %s (%s)", print_description, print_data_id); fp_info ("Delete fingerprint %s (%s)", print_description, print_data_id);
written &= fpi_byte_writer_put_data (&writer, print_data_id, memcpy (result + pos, print_data_id, EGISMOC_FINGERPRINT_DATA_SIZE);
EGISMOC_FINGERPRINT_DATA_SIZE);
} }
/* Otherwise assume this is a "clear" - just loop through and append all enrolled IDs */ /* Otherwise assume this is a "clear" - just loop through and append all enrolled IDs */
else if (self->enrolled_ids) else
{ {
for (guint i = 0; i < self->enrolled_ids->len && written; i++) for (int i = 0; i < self->enrolled_ids->len; i++)
{ memcpy (result + pos + (EGISMOC_FINGERPRINT_DATA_SIZE * i),
written &= fpi_byte_writer_put_data (&writer,
g_ptr_array_index (self->enrolled_ids, i), g_ptr_array_index (self->enrolled_ids, i),
EGISMOC_FINGERPRINT_DATA_SIZE); EGISMOC_FINGERPRINT_DATA_SIZE);
} }
}
g_assert (written);
if (length_out) if (length_out)
*length_out = total_length; *length_out = total_length;
return fpi_byte_writer_reset_and_get_data (&writer); return g_steal_pointer (&result);
} }
static void static void
@@ -702,7 +687,9 @@ egismoc_delete_run_state (FpiSsm *ssm,
switch (fpi_ssm_get_cur_state (ssm)) switch (fpi_ssm_get_cur_state (ssm))
{ {
case DELETE_GET_ENROLLED_IDS: case DELETE_GET_ENROLLED_IDS:
/* get enrolled_ids from device for use building delete payload below */ /* get enrolled_ids and enrolled_num from device for use building
* delete payload below
*/
egismoc_exec_cmd (device, cmd_list, cmd_list_len, NULL, egismoc_exec_cmd (device, cmd_list, cmd_list_len, NULL,
egismoc_list_fill_enrolled_ids_cb); egismoc_list_fill_enrolled_ids_cb);
break; break;
@@ -774,7 +761,7 @@ egismoc_enroll_status_report (FpDevice *device,
enroll_print->stage++; enroll_print->stage++;
fp_info ("Partial capture successful. Please touch the sensor again (%d/%d)", fp_info ("Partial capture successful. Please touch the sensor again (%d/%d)",
enroll_print->stage, enroll_print->stage,
self->max_enroll_stages); EGISMOC_MAX_ENROLL_NUM);
fpi_device_enroll_progress (device, enroll_print->stage, enroll_print->print, NULL); fpi_device_enroll_progress (device, enroll_print->stage, enroll_print->print, NULL);
break; break;
@@ -854,7 +841,7 @@ egismoc_read_capture_cb (FpDevice *device,
egismoc_enroll_status_report (device, enroll_print, ENROLL_STATUS_RETRY, error); egismoc_enroll_status_report (device, enroll_print, ENROLL_STATUS_RETRY, error);
} }
if (enroll_print->stage == self->max_enroll_stages) if (enroll_print->stage == EGISMOC_ENROLL_TIMES)
fpi_ssm_next_state (self->task_ssm); fpi_ssm_next_state (self->task_ssm);
else else
fpi_ssm_jump_to_state (self->task_ssm, ENROLL_CAPTURE_SENSOR_RESET); fpi_ssm_jump_to_state (self->task_ssm, ENROLL_CAPTURE_SENSOR_RESET);
@@ -897,28 +884,26 @@ egismoc_get_check_cmd (FpDevice *device,
{ {
fp_dbg ("Get check command"); fp_dbg ("Get check command");
FpiDeviceEgisMoc *self = FPI_DEVICE_EGISMOC (device); FpiDeviceEgisMoc *self = FPI_DEVICE_EGISMOC (device);
g_auto(FpiByteWriter) writer = {0};
g_autofree guchar *result = NULL; g_autofree guchar *result = NULL;
gboolean written = TRUE; gsize pos = 0;
/* /*
* The final command body should contain: * The final command body should contain:
* 1) hard-coded 00 00 * 1) hard-coded 00 00
* 2) 2-byte size indiciator, 20*Number enrolled identifiers plus 9 in form of: * 2) 2-byte size indiciator, 20*Number enrolled identifiers plus 9 in form of:
* (enrolled_ids->len + 1) * 0x20 + 0x09 * (enrolled_num + 1) * 0x20 + 0x09
* Since max prints can be higher than 7 then this goes up to 2 bytes * Since max prints can be higher than 7 then this goes up to 2 bytes
* (e9 + 9 = 109) * (e9 + 9 = 109)
* 3) Hard-coded prefix (cmd_check_prefix) * 3) Hard-coded prefix (cmd_check_prefix)
* 4) 2-byte size indiciator, 20*Number of enrolled identifiers without plus 9 * 4) 2-byte size indiciator, 20*Number of enrolled identifiers without plus 9
* ((enrolled_ids->len + 1) * 0x20) * ((enrolled_num + 1) * 0x20)
* 5) Hard-coded 32 * 0x00 bytes * 5) Hard-coded 32 * 0x00 bytes
* 6) All of the currently registered prints in their 32-byte device identifiers * 6) All of the currently registered prints in their 32-byte device identifiers
* (enrolled_list) * (enrolled_list)
* 7) Hard-coded suffix (cmd_check_suffix) * 7) Hard-coded suffix (cmd_check_suffix)
*/ */
g_assert (self->enrolled_ids); const gsize body_length = sizeof (guchar) * self->enrolled_num *
const gsize body_length = sizeof (guchar) * self->enrolled_ids->len *
EGISMOC_FINGERPRINT_DATA_SIZE; EGISMOC_FINGERPRINT_DATA_SIZE;
/* prefix length can depend on the type */ /* prefix length can depend on the type */
@@ -936,82 +921,87 @@ egismoc_get_check_cmd (FpDevice *device,
+ cmd_check_suffix_len; + cmd_check_suffix_len;
/* pre-fill entire payload with 00s */ /* pre-fill entire payload with 00s */
fpi_byte_writer_init_with_size (&writer, total_length, TRUE); result = g_new0 (guchar, total_length);
/* start with 00 00 (just move starting offset up by 2) */ /* start with 00 00 (just move starting offset up by 2) */
written &= fpi_byte_writer_set_pos (&writer, 2); pos = 2;
/* Size Counter bytes */ /* Size Counter bytes */
/* "easiest" way to handle 2-bytes size for counter is to hard-code logic for /* "easiest" way to handle 2-bytes size for counter is to hard-code logic for
* when we go to the 2nd byte * when we go to the 2nd byte
* note this will not work in case any model ever supports more than 14 prints * note this will not work in case any model ever supports more than 14 prints
* (assumed max is 10) */ * (assumed max is 10) */
if (self->enrolled_ids->len > 6) if (self->enrolled_num > 6)
{ {
written &= fpi_byte_writer_put_uint8 (&writer, 0x01); memset (result + pos, 0x01, sizeof (guchar));
written &= fpi_byte_writer_put_uint8 (&writer, pos += sizeof (guchar);
((self->enrolled_ids->len - 7) * 0x20) memset (result + pos, ((self->enrolled_num - 7) * 0x20) + 0x09,
+ 0x09); sizeof (guchar));
pos += sizeof (guchar);
} }
else else
{ {
/* first byte is 0x00, just skip it */ /* first byte is 0x00, just skip it */
written &= fpi_byte_writer_change_pos (&writer, 1); pos += sizeof (guchar);
written &= fpi_byte_writer_put_uint8 (&writer, memset (result + pos, ((self->enrolled_num + 1) * 0x20) + 0x09,
((self->enrolled_ids->len + 1) * 0x20) + sizeof (guchar));
0x09); pos += sizeof (guchar);
} }
/* command prefix */ /* command prefix */
if (fpi_device_get_driver_data (device) & EGISMOC_DRIVER_CHECK_PREFIX_TYPE2) if (fpi_device_get_driver_data (device) & EGISMOC_DRIVER_CHECK_PREFIX_TYPE2)
written &= fpi_byte_writer_put_data (&writer, cmd_check_prefix_type2, {
cmd_check_prefix_type2_len); memcpy (result + pos, cmd_check_prefix_type2, cmd_check_prefix_type2_len);
pos += cmd_check_prefix_type2_len;
}
else else
written &= fpi_byte_writer_put_data (&writer, cmd_check_prefix_type1, {
cmd_check_prefix_type1_len); memcpy (result + pos, cmd_check_prefix_type1, cmd_check_prefix_type1_len);
pos += cmd_check_prefix_type1_len;
}
/* 2-bytes size logic for counter again */ /* 2-bytes size logic for counter again */
if (self->enrolled_ids->len > 6) if (self->enrolled_num > 6)
{ {
written &= fpi_byte_writer_put_uint8 (&writer, 0x01); memset (result + pos, 0x01, sizeof (guchar));
written &= fpi_byte_writer_put_uint8 (&writer, pos += sizeof (guchar);
(self->enrolled_ids->len - 7) * 0x20); memset (result + pos, (self->enrolled_num - 7) * 0x20, sizeof (guchar));
pos += sizeof (guchar);
} }
else else
{ {
/* first byte is 0x00, just skip it */ /* first byte is 0x00, just skip it */
written &= fpi_byte_writer_change_pos (&writer, 1); pos += sizeof (guchar);
written &= fpi_byte_writer_put_uint8 (&writer, memset (result + pos, (self->enrolled_num + 1) * 0x20, sizeof (guchar));
(self->enrolled_ids->len + 1) * 0x20); pos += sizeof (guchar);
} }
/* add 00s "separator" to offset position */ /* add 00s "separator" to offset position */
written &= fpi_byte_writer_change_pos (&writer, pos += EGISMOC_CMD_CHECK_SEPARATOR_LENGTH;
EGISMOC_CMD_CHECK_SEPARATOR_LENGTH);
for (guint i = 0; i < self->enrolled_ids->len && written; i++) /* append all currently registered 32-byte fingerprint IDs */
const gsize print_id_length = sizeof (guchar) * EGISMOC_FINGERPRINT_DATA_SIZE;
for (int i = 0; i < self->enrolled_num; i++)
{ {
written &= fpi_byte_writer_put_data (&writer, gchar *device_print_id = g_ptr_array_index (self->enrolled_ids, i);
g_ptr_array_index (self->enrolled_ids, i), memcpy (result + pos + (print_id_length * i), device_print_id, print_id_length);
EGISMOC_FINGERPRINT_DATA_SIZE);
} }
pos += body_length;
/* command suffix */ /* command suffix */
written &= fpi_byte_writer_put_data (&writer, cmd_check_suffix, memcpy (result + pos, cmd_check_suffix, cmd_check_suffix_len);
cmd_check_suffix_len);
g_assert (written);
if (length_out) if (length_out)
*length_out = total_length; *length_out = total_length;
return fpi_byte_writer_reset_and_get_data (&writer); return g_steal_pointer (&result);
} }
static void static void
egismoc_enroll_run_state (FpiSsm *ssm, egismoc_enroll_run_state (FpiSsm *ssm,
FpDevice *device) FpDevice *device)
{ {
g_auto(FpiByteWriter) writer = {0};
FpiDeviceEgisMoc *self = FPI_DEVICE_EGISMOC (device); FpiDeviceEgisMoc *self = FPI_DEVICE_EGISMOC (device);
EnrollPrint *enroll_print = fpi_ssm_get_data (ssm); EnrollPrint *enroll_print = fpi_ssm_get_data (ssm);
g_autofree guchar *payload = NULL; g_autofree guchar *payload = NULL;
@@ -1022,13 +1012,13 @@ egismoc_enroll_run_state (FpiSsm *ssm,
switch (fpi_ssm_get_cur_state (ssm)) switch (fpi_ssm_get_cur_state (ssm))
{ {
case ENROLL_GET_ENROLLED_IDS: case ENROLL_GET_ENROLLED_IDS:
/* get enrolled_ids from device for use in check stages below */ /* get enrolled_ids and enrolled_num from device for use in check stages below */
egismoc_exec_cmd (device, cmd_list, cmd_list_len, egismoc_exec_cmd (device, cmd_list, cmd_list_len,
NULL, egismoc_list_fill_enrolled_ids_cb); NULL, egismoc_list_fill_enrolled_ids_cb);
break; break;
case ENROLL_CHECK_ENROLLED_NUM: case ENROLL_CHECK_ENROLLED_NUM:
if (self->enrolled_ids->len >= EGISMOC_MAX_ENROLL_NUM) if (self->enrolled_num >= EGISMOC_MAX_ENROLL_NUM)
{ {
egismoc_enroll_status_report (device, enroll_print, ENROLL_STATUS_DEVICE_FULL, egismoc_enroll_status_report (device, enroll_print, ENROLL_STATUS_DEVICE_FULL,
fpi_device_error_new (FP_DEVICE_ERROR_DATA_FULL)); fpi_device_error_new (FP_DEVICE_ERROR_DATA_FULL));
@@ -1099,23 +1089,14 @@ egismoc_enroll_run_state (FpiSsm *ssm,
device_print_id = g_strndup (user_id, EGISMOC_FINGERPRINT_DATA_SIZE); device_print_id = g_strndup (user_id, EGISMOC_FINGERPRINT_DATA_SIZE);
egismoc_set_print_data (enroll_print->print, device_print_id, user_id); egismoc_set_print_data (enroll_print->print, device_print_id, user_id);
fpi_byte_writer_init (&writer); /* create new dynamic payload of cmd_new_print_prefix + device_print_id */
if (!fpi_byte_writer_put_data (&writer, cmd_new_print_prefix, payload_length = cmd_new_print_prefix_len + EGISMOC_FINGERPRINT_DATA_SIZE;
cmd_new_print_prefix_len)) payload = g_new0 (guchar, payload_length);
{ memcpy (payload, cmd_new_print_prefix, cmd_new_print_prefix_len);
fpi_ssm_mark_failed (ssm, fpi_device_error_new (FP_DEVICE_ERROR_PROTO)); memcpy (payload + cmd_new_print_prefix_len, device_print_id,
break; EGISMOC_FINGERPRINT_DATA_SIZE);
}
if (!fpi_byte_writer_put_data (&writer, (guint8 *) device_print_id,
EGISMOC_FINGERPRINT_DATA_SIZE))
{
fpi_ssm_mark_failed (ssm, fpi_device_error_new (FP_DEVICE_ERROR_PROTO));
break;
}
payload_length = fpi_byte_writer_get_size (&writer); egismoc_exec_cmd (device, g_steal_pointer (&payload), payload_length,
egismoc_exec_cmd (device, fpi_byte_writer_reset_and_get_data (&writer),
payload_length,
g_free, egismoc_task_ssm_next_state_cb); g_free, egismoc_task_ssm_next_state_cb);
break; break;
@@ -1258,13 +1239,13 @@ egismoc_identify_run_state (FpiSsm *ssm,
switch (fpi_ssm_get_cur_state (ssm)) switch (fpi_ssm_get_cur_state (ssm))
{ {
case IDENTIFY_GET_ENROLLED_IDS: case IDENTIFY_GET_ENROLLED_IDS:
/* get enrolled_ids from device for use in check stages below */ /* get enrolled_ids and enrolled_num from device for use in check stages below */
egismoc_exec_cmd (device, cmd_list, cmd_list_len, egismoc_exec_cmd (device, cmd_list, cmd_list_len,
NULL, egismoc_list_fill_enrolled_ids_cb); NULL, egismoc_list_fill_enrolled_ids_cb);
break; break;
case IDENTIFY_CHECK_ENROLLED_NUM: case IDENTIFY_CHECK_ENROLLED_NUM:
if (self->enrolled_ids->len == 0) if (self->enrolled_num == 0)
{ {
fpi_ssm_mark_failed (g_steal_pointer (&self->task_ssm), fpi_ssm_mark_failed (g_steal_pointer (&self->task_ssm),
fpi_device_error_new (FP_DEVICE_ERROR_DATA_NOT_FOUND)); fpi_device_error_new (FP_DEVICE_ERROR_DATA_NOT_FOUND));
@@ -1465,71 +1446,6 @@ egismoc_dev_init_handler (FpiSsm *ssm,
NULL); NULL);
} }
static void
egismoc_probe (FpDevice *device)
{
GUsbDevice *usb_dev;
GError *error = NULL;
g_autofree gchar *serial = NULL;
FpiDeviceEgisMoc *self = FPI_DEVICE_EGISMOC (device);
fp_dbg ("%s enter --> ", G_STRFUNC);
/* Claim usb interface */
usb_dev = fpi_device_get_usb_device (device);
if (!g_usb_device_open (usb_dev, &error))
{
fp_dbg ("%s g_usb_device_open failed %s", G_STRFUNC, error->message);
fpi_device_probe_complete (device, NULL, NULL, error);
return;
}
if (!g_usb_device_reset (usb_dev, &error))
{
fp_dbg ("%s g_usb_device_reset failed %s", G_STRFUNC, error->message);
g_usb_device_close (usb_dev, NULL);
fpi_device_probe_complete (device, NULL, NULL, error);
return;
}
if (!g_usb_device_claim_interface (usb_dev, 0, 0, &error))
{
fp_dbg ("%s g_usb_device_claim_interface failed %s", G_STRFUNC, error->message);
g_usb_device_close (usb_dev, NULL);
fpi_device_probe_complete (device, NULL, NULL, error);
return;
}
if (g_strcmp0 (g_getenv ("FP_DEVICE_EMULATION"), "1") == 0)
serial = g_strdup ("emulated-device");
else
serial = g_usb_device_get_string_descriptor (usb_dev,
g_usb_device_get_serial_number_index (usb_dev),
&error);
if (error)
{
fp_dbg ("%s g_usb_device_get_string_descriptor failed %s", G_STRFUNC, error->message);
g_usb_device_release_interface (fpi_device_get_usb_device (FP_DEVICE (device)),
0, 0, NULL);
g_usb_device_close (usb_dev, NULL);
fpi_device_probe_complete (device, NULL, NULL, error);
return;
}
if (fpi_device_get_driver_data (device) & EGISMOC_DRIVER_MAX_ENROLL_STAGES_20)
self->max_enroll_stages = 20;
else
self->max_enroll_stages = EGISMOC_MAX_ENROLL_STAGES_DEFAULT;
fpi_device_set_nr_enroll_stages (device, self->max_enroll_stages);
g_usb_device_release_interface (fpi_device_get_usb_device (FP_DEVICE (device)), 0, 0, NULL);
g_usb_device_close (usb_dev, NULL);
fpi_device_probe_complete (device, serial, NULL, error);
}
static void static void
egismoc_open (FpDevice *device) egismoc_open (FpDevice *device)
{ {
@@ -1610,11 +1526,10 @@ fpi_device_egismoc_class_init (FpiDeviceEgisMocClass *klass)
dev_class->type = FP_DEVICE_TYPE_USB; dev_class->type = FP_DEVICE_TYPE_USB;
dev_class->scan_type = FP_SCAN_TYPE_PRESS; dev_class->scan_type = FP_SCAN_TYPE_PRESS;
dev_class->id_table = egismoc_id_table; dev_class->id_table = egismoc_id_table;
dev_class->nr_enroll_stages = EGISMOC_MAX_ENROLL_STAGES_DEFAULT; dev_class->nr_enroll_stages = EGISMOC_ENROLL_TIMES;
/* device should be "always off" unless being used */ /* device should be "always off" unless being used */
dev_class->temp_hot_seconds = 0; dev_class->temp_hot_seconds = 0;
dev_class->probe = egismoc_probe;
dev_class->open = egismoc_open; dev_class->open = egismoc_open;
dev_class->cancel = egismoc_cancel; dev_class->cancel = egismoc_cancel;
dev_class->suspend = egismoc_suspend; dev_class->suspend = egismoc_suspend;
+3 -4
View File
@@ -36,7 +36,6 @@ G_DECLARE_FINAL_TYPE (FpiDeviceEgisMoc, fpi_device_egismoc, FPI, DEVICE_EGISMOC,
#define EGISMOC_DRIVER_CHECK_PREFIX_TYPE1 (1 << 0) #define EGISMOC_DRIVER_CHECK_PREFIX_TYPE1 (1 << 0)
#define EGISMOC_DRIVER_CHECK_PREFIX_TYPE2 (1 << 1) #define EGISMOC_DRIVER_CHECK_PREFIX_TYPE2 (1 << 1)
#define EGISMOC_DRIVER_MAX_ENROLL_STAGES_20 (1 << 2)
#define EGISMOC_EP_CMD_OUT (0x02 | FPI_USB_ENDPOINT_OUT) #define EGISMOC_EP_CMD_OUT (0x02 | FPI_USB_ENDPOINT_OUT)
#define EGISMOC_EP_CMD_IN (0x81 | FPI_USB_ENDPOINT_IN) #define EGISMOC_EP_CMD_IN (0x81 | FPI_USB_ENDPOINT_IN)
@@ -50,7 +49,7 @@ G_DECLARE_FINAL_TYPE (FpiDeviceEgisMoc, fpi_device_egismoc, FPI, DEVICE_EGISMOC,
#define EGISMOC_USB_IN_RECV_LENGTH 4096 #define EGISMOC_USB_IN_RECV_LENGTH 4096
#define EGISMOC_USB_INTERRUPT_IN_RECV_LENGTH 64 #define EGISMOC_USB_INTERRUPT_IN_RECV_LENGTH 64
#define EGISMOC_MAX_ENROLL_STAGES_DEFAULT 10 #define EGISMOC_ENROLL_TIMES 10
#define EGISMOC_MAX_ENROLL_NUM 10 #define EGISMOC_MAX_ENROLL_NUM 10
#define EGISMOC_FINGERPRINT_DATA_SIZE 32 #define EGISMOC_FINGERPRINT_DATA_SIZE 32
#define EGISMOC_LIST_RESPONSE_PREFIX_SIZE 14 #define EGISMOC_LIST_RESPONSE_PREFIX_SIZE 14
@@ -101,11 +100,11 @@ static guchar cmd_read_capture[] = {0x00, 0x00, 0x00, 0x07, 0x50, 0x16, 0x02, 0x
static gsize cmd_read_capture_len = sizeof (cmd_read_capture) / sizeof (cmd_read_capture[0]); static gsize cmd_read_capture_len = sizeof (cmd_read_capture) / sizeof (cmd_read_capture[0]);
static guchar rsp_read_success_prefix[] = {0x00, 0x00, 0x00, 0x04}; static guchar rsp_read_success_prefix[] = {0x00, 0x00, 0x00, 0x04};
static gsize rsp_read_success_prefix_len = sizeof (rsp_read_success_prefix) / sizeof (rsp_read_success_prefix[0]); static gsize rsp_read_success_prefix_len = sizeof (rsp_read_success_prefix) / sizeof (rsp_read_success_prefix[0]);
static guchar rsp_read_success_suffix[] = {0x90, 0x00}; static guchar rsp_read_success_suffix[] = {0x0a, 0x90, 0x00};
static gsize rsp_read_success_suffix_len = sizeof (rsp_read_success_suffix) / sizeof (rsp_read_success_suffix[0]); static gsize rsp_read_success_suffix_len = sizeof (rsp_read_success_suffix) / sizeof (rsp_read_success_suffix[0]);
static guchar rsp_read_offcenter_prefix[] = {0x00, 0x00, 0x00, 0x04}; static guchar rsp_read_offcenter_prefix[] = {0x00, 0x00, 0x00, 0x04};
static gsize rsp_read_offcenter_prefix_len = sizeof (rsp_read_offcenter_prefix) / sizeof (rsp_read_offcenter_prefix[0]); static gsize rsp_read_offcenter_prefix_len = sizeof (rsp_read_offcenter_prefix) / sizeof (rsp_read_offcenter_prefix[0]);
static guchar rsp_read_offcenter_suffix[] = {0x64, 0x91}; static guchar rsp_read_offcenter_suffix[] = {0x0a, 0x64, 0x91};
static gsize rsp_read_offcenter_suffix_len = sizeof (rsp_read_offcenter_suffix) / sizeof (rsp_read_offcenter_suffix[0]); static gsize rsp_read_offcenter_suffix_len = sizeof (rsp_read_offcenter_suffix) / sizeof (rsp_read_offcenter_suffix[0]);
static guchar rsp_read_dirty_prefix[] = {0x00, 0x00, 0x00, 0x02, 0x64}; static guchar rsp_read_dirty_prefix[] = {0x00, 0x00, 0x00, 0x02, 0x64};
static gsize rsp_read_dirty_prefix_len = sizeof (rsp_read_dirty_prefix) / sizeof (rsp_read_dirty_prefix[0]); static gsize rsp_read_dirty_prefix_len = sizeof (rsp_read_dirty_prefix) / sizeof (rsp_read_dirty_prefix[0]);
+7 -14
View File
@@ -31,14 +31,7 @@ static const FpIdEntry id_table[] = {
{ .vid = 0x04f3, .pid = 0x0c88, }, { .vid = 0x04f3, .pid = 0x0c88, },
{ .vid = 0x04f3, .pid = 0x0c8c, }, { .vid = 0x04f3, .pid = 0x0c8c, },
{ .vid = 0x04f3, .pid = 0x0c8d, }, { .vid = 0x04f3, .pid = 0x0c8d, },
{ .vid = 0x04f3, .pid = 0x0c98, },
{ .vid = 0x04f3, .pid = 0x0c99, }, { .vid = 0x04f3, .pid = 0x0c99, },
{ .vid = 0x04f3, .pid = 0x0c9d, },
{ .vid = 0x04f3, .pid = 0x0c9f, },
{ .vid = 0x04f3, .pid = 0x0ca3, },
{ .vid = 0x04f3, .pid = 0x0ca7, },
{ .vid = 0x04f3, .pid = 0x0ca8, },
{ .vid = 0x04f3, .pid = 0x0cb0, },
{ .vid = 0, .pid = 0, .driver_data = 0 }, /* terminating entry */ { .vid = 0, .pid = 0, .driver_data = 0 }, /* terminating entry */
}; };
@@ -135,10 +128,10 @@ fp_cmd_receive_cb (FpiUsbTransfer *transfer,
} }
typedef enum { typedef enum {
ELAN_MOC_CMD_SEND = 0, FP_CMD_SEND = 0,
ELAN_MOC_CMD_GET, FP_CMD_GET,
ELAN_MOC_CMD_NUM_STATES, FP_CMD_NUM_STATES,
} ElanMocCmdState; } FpCmdState;
static void static void
fp_cmd_run_state (FpiSsm *ssm, fp_cmd_run_state (FpiSsm *ssm,
@@ -149,7 +142,7 @@ fp_cmd_run_state (FpiSsm *ssm,
switch (fpi_ssm_get_cur_state (ssm)) switch (fpi_ssm_get_cur_state (ssm))
{ {
case ELAN_MOC_CMD_SEND: case FP_CMD_SEND:
if (self->cmd_transfer) if (self->cmd_transfer)
{ {
self->cmd_transfer->ssm = ssm; self->cmd_transfer->ssm = ssm;
@@ -165,7 +158,7 @@ fp_cmd_run_state (FpiSsm *ssm,
} }
break; break;
case ELAN_MOC_CMD_GET: case FP_CMD_GET:
if (self->cmd_len_in == 0) if (self->cmd_len_in == 0)
{ {
CommandData *data = fpi_ssm_get_data (ssm); CommandData *data = fpi_ssm_get_data (ssm);
@@ -232,7 +225,7 @@ elanmoc_get_cmd (FpDevice *device, guint8 *buffer_out,
self->cmd_ssm = fpi_ssm_new (FP_DEVICE (self), self->cmd_ssm = fpi_ssm_new (FP_DEVICE (self),
fp_cmd_run_state, fp_cmd_run_state,
ELAN_MOC_CMD_NUM_STATES); FP_CMD_NUM_STATES);
fpi_ssm_set_data (self->cmd_ssm, data, (GDestroyNotify) fp_cmd_ssm_done_data_free); fpi_ssm_set_data (self->cmd_ssm, data, (GDestroyNotify) fp_cmd_ssm_done_data_free);
-2
View File
@@ -340,11 +340,9 @@ static const struct elanspi_regtable elanspi_calibration_table_new_page1 = {
// using checkargs ACPI:HIDPID // using checkargs ACPI:HIDPID
static const FpIdEntry elanspi_id_table[] = { static const FpIdEntry elanspi_id_table[] = {
{.udev_types = ELANSPI_UDEV_TYPES, .spi_acpi_id = "ELAN7001", .hid_id = {.vid = ELANSPI_TP_VID, .pid = 0x2766}, .driver_data = ELANSPI_NO_ROTATE},
{.udev_types = ELANSPI_UDEV_TYPES, .spi_acpi_id = "ELAN7001", .hid_id = {.vid = ELANSPI_TP_VID, .pid = 0x3057}, .driver_data = ELANSPI_180_ROTATE}, {.udev_types = ELANSPI_UDEV_TYPES, .spi_acpi_id = "ELAN7001", .hid_id = {.vid = ELANSPI_TP_VID, .pid = 0x3057}, .driver_data = ELANSPI_180_ROTATE},
{.udev_types = ELANSPI_UDEV_TYPES, .spi_acpi_id = "ELAN7001", .hid_id = {.vid = ELANSPI_TP_VID, .pid = 0x3087}, .driver_data = ELANSPI_180_ROTATE}, {.udev_types = ELANSPI_UDEV_TYPES, .spi_acpi_id = "ELAN7001", .hid_id = {.vid = ELANSPI_TP_VID, .pid = 0x3087}, .driver_data = ELANSPI_180_ROTATE},
{.udev_types = ELANSPI_UDEV_TYPES, .spi_acpi_id = "ELAN7001", .hid_id = {.vid = ELANSPI_TP_VID, .pid = 0x30c6}, .driver_data = ELANSPI_180_ROTATE}, {.udev_types = ELANSPI_UDEV_TYPES, .spi_acpi_id = "ELAN7001", .hid_id = {.vid = ELANSPI_TP_VID, .pid = 0x30c6}, .driver_data = ELANSPI_180_ROTATE},
{.udev_types = ELANSPI_UDEV_TYPES, .spi_acpi_id = "ELAN7001", .hid_id = {.vid = ELANSPI_TP_VID, .pid = 0x3128}, .driver_data = ELANSPI_90LEFT_ROTATE},
{.udev_types = ELANSPI_UDEV_TYPES, .spi_acpi_id = "ELAN70A1", .hid_id = {.vid = ELANSPI_TP_VID, .pid = 0x3134}, .driver_data = ELANSPI_90LEFT_ROTATE}, {.udev_types = ELANSPI_UDEV_TYPES, .spi_acpi_id = "ELAN70A1", .hid_id = {.vid = ELANSPI_TP_VID, .pid = 0x3134}, .driver_data = ELANSPI_90LEFT_ROTATE},
{.udev_types = ELANSPI_UDEV_TYPES, .spi_acpi_id = "ELAN7001", .hid_id = {.vid = ELANSPI_TP_VID, .pid = 0x3148}, .driver_data = ELANSPI_180_ROTATE}, {.udev_types = ELANSPI_UDEV_TYPES, .spi_acpi_id = "ELAN7001", .hid_id = {.vid = ELANSPI_TP_VID, .pid = 0x3148}, .driver_data = ELANSPI_180_ROTATE},
{.udev_types = ELANSPI_UDEV_TYPES, .spi_acpi_id = "ELAN7001", .hid_id = {.vid = ELANSPI_TP_VID, .pid = 0x30b2}, .driver_data = ELANSPI_NO_ROTATE}, {.udev_types = ELANSPI_UDEV_TYPES, .spi_acpi_id = "ELAN7001", .hid_id = {.vid = ELANSPI_TP_VID, .pid = 0x30b2}, .driver_data = ELANSPI_NO_ROTATE},
@@ -29,12 +29,7 @@ G_DEFINE_TYPE (FpiDeviceFocaltechMoc, fpi_device_focaltech_moc, FP_TYPE_DEVICE)
static const FpIdEntry id_table[] = { static const FpIdEntry id_table[] = {
{ .vid = 0x2808, .pid = 0x9e48, }, { .vid = 0x2808, .pid = 0x9e48, },
{ .vid = 0x2808, .pid = 0xd979, }, { .vid = 0x2808, .pid = 0xd979, },
{ .vid = 0x2808, .pid = 0xa27a, },
{ .vid = 0x2808, .pid = 0xa959, }, { .vid = 0x2808, .pid = 0xa959, },
{ .vid = 0x2808, .pid = 0xa99a, },
{ .vid = 0x2808, .pid = 0xa57a, },
{ .vid = 0x2808, .pid = 0xa78a, },
{ .vid = 0x2808, .pid = 0x1579, },
{ .vid = 0, .pid = 0, .driver_data = 0 }, /* terminating entry */ { .vid = 0, .pid = 0, .driver_data = 0 }, /* terminating entry */
}; };
@@ -237,10 +232,10 @@ fp_cmd_receive_cb (FpiUsbTransfer *transfer,
} }
typedef enum { typedef enum {
FOCALTECH_CMD_SEND = 0, FP_CMD_SEND = 0,
FOCALTECH_CMD_GET, FP_CMD_GET,
FOCALTECH_CMD_NUM_STATES, FP_CMD_NUM_STATES,
} FocaltechCmdState; } FpCmdState;
static void static void
fp_cmd_run_state (FpiSsm *ssm, fp_cmd_run_state (FpiSsm *ssm,
@@ -251,7 +246,7 @@ fp_cmd_run_state (FpiSsm *ssm,
switch (fpi_ssm_get_cur_state (ssm)) switch (fpi_ssm_get_cur_state (ssm))
{ {
case FOCALTECH_CMD_SEND: case FP_CMD_SEND:
if (self->cmd_transfer) if (self->cmd_transfer)
{ {
self->cmd_transfer->ssm = ssm; self->cmd_transfer->ssm = ssm;
@@ -268,7 +263,7 @@ fp_cmd_run_state (FpiSsm *ssm,
break; break;
case FOCALTECH_CMD_GET: case FP_CMD_GET:
if (self->cmd_len_in == 0) if (self->cmd_len_in == 0)
{ {
CommandData *data = fpi_ssm_get_data (ssm); CommandData *data = fpi_ssm_get_data (ssm);
@@ -336,7 +331,7 @@ focaltech_moc_get_cmd (FpDevice *device, guint8 *buffer_out,
self->cmd_ssm = fpi_ssm_new (FP_DEVICE (self), self->cmd_ssm = fpi_ssm_new (FP_DEVICE (self),
fp_cmd_run_state, fp_cmd_run_state,
FOCALTECH_CMD_NUM_STATES); FP_CMD_NUM_STATES);
fpi_ssm_set_data (self->cmd_ssm, data, (GDestroyNotify) fp_cmd_ssm_done_data_free); fpi_ssm_set_data (self->cmd_ssm, data, (GDestroyNotify) fp_cmd_ssm_done_data_free);
+55 -82
View File
@@ -21,7 +21,7 @@
#define FP_COMPONENT "fpcmoc" #define FP_COMPONENT "fpcmoc"
#define MAX_ENROLL_SAMPLES (25) #define MAX_ENROLL_SAMPLES (25)
#define CTRL_TIMEOUT (2000) #define CTRL_TIMEOUT (1000)
#define DATA_TIMEOUT (5000) #define DATA_TIMEOUT (5000)
/* Usb port setting */ /* Usb port setting */
@@ -65,13 +65,9 @@ typedef struct
static const FpIdEntry id_table[] = { static const FpIdEntry id_table[] = {
{ .vid = 0x10A5, .pid = 0xFFE0, }, { .vid = 0x10A5, .pid = 0xFFE0, },
{ .vid = 0x10A5, .pid = 0xA305, }, { .vid = 0x10A5, .pid = 0xA305, },
{ .vid = 0x10A5, .pid = 0xA306, },
{ .vid = 0x10A5, .pid = 0xDA04, }, { .vid = 0x10A5, .pid = 0xDA04, },
{ .vid = 0x10A5, .pid = 0xD805, }, { .vid = 0x10A5, .pid = 0xD805, },
{ .vid = 0x10A5, .pid = 0xD205, }, { .vid = 0x10A5, .pid = 0xD205, },
{ .vid = 0x10A5, .pid = 0x9524, },
{ .vid = 0x10A5, .pid = 0x9544, },
{ .vid = 0x10A5, .pid = 0xC844, },
/* terminating entry */ /* terminating entry */
{ .vid = 0, .pid = 0, .driver_data = 0 }, { .vid = 0, .pid = 0, .driver_data = 0 },
}; };
@@ -86,7 +82,7 @@ fpc_suspend_resume_cb (FpiUsbTransfer *transfer,
fp_dbg ("%s current ssm state: %d", G_STRFUNC, ssm_state); fp_dbg ("%s current ssm state: %d", G_STRFUNC, ssm_state);
if (ssm_state == FPC_CMD_SUSPENDED) if (ssm_state == FP_CMD_SUSPENDED)
{ {
if (error) if (error)
fpi_ssm_mark_failed (transfer->ssm, error); fpi_ssm_mark_failed (transfer->ssm, error);
@@ -94,12 +90,12 @@ fpc_suspend_resume_cb (FpiUsbTransfer *transfer,
fpi_device_suspend_complete (device, error); fpi_device_suspend_complete (device, error);
/* The resume handler continues to the next state! */ /* The resume handler continues to the next state! */
} }
else if (ssm_state == FPC_CMD_RESUME) else if (ssm_state == FP_CMD_RESUME)
{ {
if (error) if (error)
fpi_ssm_mark_failed (transfer->ssm, error); fpi_ssm_mark_failed (transfer->ssm, error);
else else
fpi_ssm_jump_to_state (transfer->ssm, FPC_CMD_GET_DATA); fpi_ssm_jump_to_state (transfer->ssm, FP_CMD_GET_DATA);
fpi_device_resume_complete (device, error); fpi_device_resume_complete (device, error);
} }
@@ -118,7 +114,7 @@ fpc_cmd_receive_cb (FpiUsbTransfer *transfer,
if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED) && (self->cmd_suspended)) if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED) && (self->cmd_suspended))
{ {
g_error_free (error); g_error_free (error);
fpi_ssm_jump_to_state (transfer->ssm, FPC_CMD_SUSPENDED); fpi_ssm_jump_to_state (transfer->ssm, FP_CMD_SUSPENDED);
return; return;
} }
@@ -139,7 +135,7 @@ fpc_cmd_receive_cb (FpiUsbTransfer *transfer,
fp_dbg ("%s current ssm request: %d state: %d", G_STRFUNC, data->request, ssm_state); fp_dbg ("%s current ssm request: %d state: %d", G_STRFUNC, data->request, ssm_state);
/* clean cmd_ssm except capture command for suspend/resume case */ /* clean cmd_ssm except capture command for suspend/resume case */
if (ssm_state != FPC_CMD_SEND || data->request != FPC_CMD_ARM) if (ssm_state != FP_CMD_SEND || data->request != FPC_CMD_ARM)
self->cmd_ssm = NULL; self->cmd_ssm = NULL;
if (data->cmdtype == FPC_CMDTYPE_TO_DEVICE) if (data->cmdtype == FPC_CMDTYPE_TO_DEVICE)
@@ -153,13 +149,13 @@ fpc_cmd_receive_cb (FpiUsbTransfer *transfer,
} }
else if (data->cmdtype == FPC_CMDTYPE_TO_DEVICE_EVTDATA) else if (data->cmdtype == FPC_CMDTYPE_TO_DEVICE_EVTDATA)
{ {
if (ssm_state == FPC_CMD_SEND) if (ssm_state == FP_CMD_SEND)
{ {
fpi_ssm_next_state (transfer->ssm); fpi_ssm_next_state (transfer->ssm);
return; return;
} }
if (ssm_state == FPC_CMD_GET_DATA) if (ssm_state == FP_CMD_GET_DATA)
{ {
fpc_cmd_response_t evt_data = {0}; fpc_cmd_response_t evt_data = {0};
fp_dbg ("%s recv evt data length: %ld", G_STRFUNC, transfer->actual_length); fp_dbg ("%s recv evt data length: %ld", G_STRFUNC, transfer->actual_length);
@@ -273,7 +269,6 @@ fpc_cmd_ssm_done (FpiSsm *ssm, FpDevice *dev, GError *error)
FpiDeviceFpcMoc *self = FPI_DEVICE_FPCMOC (dev); FpiDeviceFpcMoc *self = FPI_DEVICE_FPCMOC (dev);
CommandData *data = fpi_ssm_get_data (ssm); CommandData *data = fpi_ssm_get_data (ssm);
self->cmd_ssm = NULL;
/* Notify about the SSM failure from here instead. */ /* Notify about the SSM failure from here instead. */
if (error) if (error)
{ {
@@ -281,6 +276,8 @@ fpc_cmd_ssm_done (FpiSsm *ssm, FpDevice *dev, GError *error)
if (data->callback) if (data->callback)
data->callback (self, NULL, error); data->callback (self, NULL, error);
} }
self->cmd_ssm = NULL;
} }
static void static void
@@ -292,11 +289,11 @@ fpc_cmd_run_state (FpiSsm *ssm,
switch (fpi_ssm_get_cur_state (ssm)) switch (fpi_ssm_get_cur_state (ssm))
{ {
case FPC_CMD_SEND: case FP_CMD_SEND:
fpc_send_ctrl_cmd (dev); fpc_send_ctrl_cmd (dev);
break; break;
case FPC_CMD_GET_DATA: case FP_CMD_GET_DATA:
transfer = fpi_usb_transfer_new (dev); transfer = fpi_usb_transfer_new (dev);
transfer->ssm = ssm; transfer->ssm = ssm;
fpi_usb_transfer_fill_bulk (transfer, EP_IN, EP_IN_MAX_BUF_SIZE); fpi_usb_transfer_fill_bulk (transfer, EP_IN, EP_IN_MAX_BUF_SIZE);
@@ -307,7 +304,7 @@ fpc_cmd_run_state (FpiSsm *ssm,
fpi_ssm_get_data (ssm)); fpi_ssm_get_data (ssm));
break; break;
case FPC_CMD_SUSPENDED: case FP_CMD_SUSPENDED:
transfer = fpi_usb_transfer_new (dev); transfer = fpi_usb_transfer_new (dev);
transfer->ssm = ssm; transfer->ssm = ssm;
fpi_usb_transfer_fill_control (transfer, fpi_usb_transfer_fill_control (transfer,
@@ -323,7 +320,7 @@ fpc_cmd_run_state (FpiSsm *ssm,
fpc_suspend_resume_cb, NULL); fpc_suspend_resume_cb, NULL);
break; break;
case FPC_CMD_RESUME: case FP_CMD_RESUME:
transfer = fpi_usb_transfer_new (dev); transfer = fpi_usb_transfer_new (dev);
transfer->ssm = ssm; transfer->ssm = ssm;
fpi_usb_transfer_fill_control (transfer, fpi_usb_transfer_fill_control (transfer,
@@ -354,22 +351,21 @@ fpc_sensor_cmd (FpiDeviceFpcMoc *self,
data = g_memdup2 (cmd_data, sizeof (CommandData)); data = g_memdup2 (cmd_data, sizeof (CommandData));
g_clear_object (&self->interrupt_cancellable);
if (wait_data_delay) if (wait_data_delay)
{ {
self->cmd_data_timeout = 0; self->cmd_data_timeout = 0;
self->interrupt_cancellable = g_cancellable_new (); g_set_object (&self->interrupt_cancellable, g_cancellable_new ());
} }
else else
{ {
self->cmd_data_timeout = DATA_TIMEOUT; self->cmd_data_timeout = DATA_TIMEOUT;
g_clear_object (&self->interrupt_cancellable);
} }
g_assert (self->cmd_ssm == NULL); g_assert (self->cmd_ssm == NULL);
self->cmd_ssm = fpi_ssm_new (FP_DEVICE (self), self->cmd_ssm = fpi_ssm_new (FP_DEVICE (self),
fpc_cmd_run_state, fpc_cmd_run_state,
FPC_CMD_NUM_STATES); FP_CMD_NUM_STATES);
fpi_ssm_set_data (self->cmd_ssm, data, g_free); fpi_ssm_set_data (self->cmd_ssm, data, g_free);
fpi_ssm_start (self->cmd_ssm, fpc_cmd_ssm_done); fpi_ssm_start (self->cmd_ssm, fpc_cmd_ssm_done);
@@ -392,7 +388,7 @@ fpc_dev_release_interface (FpiDeviceFpcMoc *self,
} }
/* Notify close complete */ /* Notify close complete */
fpi_device_close_complete (FP_DEVICE (self), g_steal_pointer (&release_error)); fpi_device_close_complete (FP_DEVICE (self), release_error);
} }
static gboolean static gboolean
@@ -450,16 +446,10 @@ fpc_evt_cb (FpiDeviceFpcMoc *self,
break; break;
case FPC_EVT_FINGER_DWN: case FPC_EVT_FINGER_DWN:
fp_dbg ("%s Got finger down event (%d)", G_STRFUNC, presp->evt_hdr.status); fp_dbg ("%s Got finger down event", G_STRFUNC);
fpi_device_report_finger_status_changes (FP_DEVICE (self), fpi_device_report_finger_status_changes (FP_DEVICE (self),
FP_FINGER_STATUS_PRESENT, FP_FINGER_STATUS_PRESENT,
FP_FINGER_STATUS_NONE); FP_FINGER_STATUS_NONE);
if (presp->evt_hdr.status != 0)
{
/* Redo the current task state if capture failed */
fpi_ssm_jump_to_state (self->task_ssm, fpi_ssm_get_cur_state (self->task_ssm));
return;
}
break; break;
case FPC_EVT_IMG: case FPC_EVT_IMG:
@@ -744,7 +734,7 @@ fpc_enroll_update_cb (FpiDeviceFpcMoc *self,
case FPC_ENROL_STATUS_COMPLETED: case FPC_ENROL_STATUS_COMPLETED:
self->enroll_stage++; self->enroll_stage++;
fpi_device_enroll_progress (FP_DEVICE (self), self->enroll_stage, NULL, NULL); fpi_device_enroll_progress (FP_DEVICE (self), self->enroll_stage, NULL, NULL);
fpi_ssm_jump_to_state (self->task_ssm, FPC_ENROLL_COMPLETE); fpi_ssm_jump_to_state (self->task_ssm, FP_ENROLL_COMPLETE);
return; return;
case FPC_ENROL_STATUS_IMAGE_TOO_SIMILAR: case FPC_ENROL_STATUS_IMAGE_TOO_SIMILAR:
@@ -752,22 +742,15 @@ fpc_enroll_update_cb (FpiDeviceFpcMoc *self,
/* here should tips remove finger and try again */ /* here should tips remove finger and try again */
if (self->max_immobile_stage) if (self->max_immobile_stage)
{ {
self->immobile_stage++; if (self->immobile_stage >= self->max_immobile_stage)
if (self->immobile_stage > self->max_immobile_stage)
{ {
fp_dbg ("Skip similar handle due to customer enrollment %d(%d)", fp_dbg ("Skip similar handle due to customer enrollment %d(%d)",
self->immobile_stage, self->max_immobile_stage); self->immobile_stage, self->max_immobile_stage);
/* Skip too similar handle, treat as normal enroll progress. */ /* Skip too similar handle, treat as normal enroll progress. */
self->enroll_stage++; fpi_ssm_jump_to_state (self->task_ssm, FPC_ENROL_STATUS_PROGRESS);
fpi_device_enroll_progress (FP_DEVICE (self), self->enroll_stage, NULL, NULL);
/* Used for customer enrollment scheme */
if (self->enroll_stage >= (self->max_enroll_stage - self->max_immobile_stage))
{
fpi_ssm_jump_to_state (self->task_ssm, FPC_ENROLL_COMPLETE);
return;
}
break; break;
} }
self->immobile_stage++;
} }
fpi_device_enroll_progress (FP_DEVICE (self), fpi_device_enroll_progress (FP_DEVICE (self),
self->enroll_stage, self->enroll_stage,
@@ -780,10 +763,7 @@ fpc_enroll_update_cb (FpiDeviceFpcMoc *self,
fpi_device_enroll_progress (FP_DEVICE (self), self->enroll_stage, NULL, NULL); fpi_device_enroll_progress (FP_DEVICE (self), self->enroll_stage, NULL, NULL);
/* Used for customer enrollment scheme */ /* Used for customer enrollment scheme */
if (self->enroll_stage >= (self->max_enroll_stage - self->max_immobile_stage)) if (self->enroll_stage >= (self->max_enroll_stage - self->max_immobile_stage))
{ fpi_ssm_jump_to_state (self->task_ssm, FP_ENROLL_COMPLETE);
fpi_ssm_jump_to_state (self->task_ssm, FPC_ENROLL_COMPLETE);
return;
}
break; break;
case FPC_ENROL_STATUS_IMAGE_LOW_COVERAGE: case FPC_ENROL_STATUS_IMAGE_LOW_COVERAGE:
@@ -816,7 +796,7 @@ fpc_enroll_update_cb (FpiDeviceFpcMoc *self,
} }
else else
{ {
fpi_ssm_jump_to_state (self->task_ssm, FPC_ENROLL_CAPTURE); fpi_ssm_jump_to_state (self->task_ssm, FP_ENROLL_CAPTURE);
} }
} }
@@ -944,7 +924,7 @@ fpc_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device)
switch (fpi_ssm_get_cur_state (ssm)) switch (fpi_ssm_get_cur_state (ssm))
{ {
case FPC_ENROLL_ENUM: case FP_ENROLL_ENUM:
{ {
FPC_FID_DATA pquery_data = {0}; FPC_FID_DATA pquery_data = {0};
gsize query_data_len = 0; gsize query_data_len = 0;
@@ -969,7 +949,7 @@ fpc_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device)
} }
break; break;
case FPC_ENROLL_CREATE: case FP_ENROLL_CREATE:
{ {
recv_data_len = sizeof (FPC_BEGIN_ENROL); recv_data_len = sizeof (FPC_BEGIN_ENROL);
cmd_data.cmdtype = FPC_CMDTYPE_FROM_DEVICE; cmd_data.cmdtype = FPC_CMDTYPE_FROM_DEVICE;
@@ -984,7 +964,7 @@ fpc_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device)
} }
break; break;
case FPC_ENROLL_CAPTURE: case FP_ENROLL_CAPTURE:
{ {
guint32 capture_id = FPC_CAPTUREID_RESERVED; guint32 capture_id = FPC_CAPTUREID_RESERVED;
fpi_device_report_finger_status_changes (device, fpi_device_report_finger_status_changes (device,
@@ -1002,7 +982,7 @@ fpc_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device)
} }
break; break;
case FPC_ENROLL_GET_IMG: case FP_ENROLL_GET_IMG:
{ {
cmd_data.cmdtype = FPC_CMDTYPE_TO_DEVICE_EVTDATA; cmd_data.cmdtype = FPC_CMDTYPE_TO_DEVICE_EVTDATA;
cmd_data.request = FPC_CMD_GET_IMG; cmd_data.request = FPC_CMD_GET_IMG;
@@ -1016,7 +996,7 @@ fpc_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device)
} }
break; break;
case FPC_ENROLL_UPDATE: case FP_ENROLL_UPDATE:
{ {
recv_data_len = sizeof (FPC_ENROL); recv_data_len = sizeof (FPC_ENROL);
cmd_data.cmdtype = FPC_CMDTYPE_FROM_DEVICE; cmd_data.cmdtype = FPC_CMDTYPE_FROM_DEVICE;
@@ -1031,7 +1011,7 @@ fpc_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device)
} }
break; break;
case FPC_ENROLL_COMPLETE: case FP_ENROLL_COMPLETE:
{ {
recv_data_len = sizeof (FPC_END_ENROL); recv_data_len = sizeof (FPC_END_ENROL);
cmd_data.cmdtype = FPC_CMDTYPE_FROM_DEVICE; cmd_data.cmdtype = FPC_CMDTYPE_FROM_DEVICE;
@@ -1046,7 +1026,7 @@ fpc_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device)
} }
break; break;
case FPC_ENROLL_CHECK_DUPLICATE: case FP_ENROLL_CHECK_DUPLICATE:
{ {
recv_data_len = sizeof (FPC_IDENTIFY); recv_data_len = sizeof (FPC_IDENTIFY);
cmd_data.cmdtype = FPC_CMDTYPE_FROM_DEVICE; cmd_data.cmdtype = FPC_CMDTYPE_FROM_DEVICE;
@@ -1061,7 +1041,7 @@ fpc_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device)
} }
break; break;
case FPC_ENROLL_BINDID: case FP_ENROLL_BINDID:
{ {
FPC_FID_DATA data = {0}; FPC_FID_DATA data = {0};
gsize data_len = 0; gsize data_len = 0;
@@ -1115,7 +1095,7 @@ fpc_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device)
} }
break; break;
case FPC_ENROLL_COMMIT: case FP_ENROLL_COMMIT:
{ {
recv_data_len = sizeof (gint32); recv_data_len = sizeof (gint32);
cmd_data.cmdtype = FPC_CMDTYPE_FROM_DEVICE; cmd_data.cmdtype = FPC_CMDTYPE_FROM_DEVICE;
@@ -1130,7 +1110,7 @@ fpc_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device)
} }
break; break;
case FPC_ENROLL_DICARD: case FP_ENROLL_DICARD:
{ {
cmd_data.cmdtype = FPC_CMDTYPE_TO_DEVICE; cmd_data.cmdtype = FPC_CMDTYPE_TO_DEVICE;
cmd_data.request = FPC_CMD_ABORT; cmd_data.request = FPC_CMD_ABORT;
@@ -1143,7 +1123,7 @@ fpc_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device)
} }
break; break;
case FPC_ENROLL_CLEANUP: case FP_ENROLL_CLEANUP:
{ {
if (self->do_cleanup == TRUE) if (self->do_cleanup == TRUE)
{ {
@@ -1288,7 +1268,7 @@ fpc_verify_sm_run_state (FpiSsm *ssm, FpDevice *device)
switch (fpi_ssm_get_cur_state (ssm)) switch (fpi_ssm_get_cur_state (ssm))
{ {
case FPC_VERIFY_CAPTURE: case FP_VERIFY_CAPTURE:
{ {
guint32 capture_id = FPC_CAPTUREID_RESERVED; guint32 capture_id = FPC_CAPTUREID_RESERVED;
fpi_device_report_finger_status_changes (device, fpi_device_report_finger_status_changes (device,
@@ -1306,7 +1286,7 @@ fpc_verify_sm_run_state (FpiSsm *ssm, FpDevice *device)
} }
break; break;
case FPC_VERIFY_GET_IMG: case FP_VERIFY_GET_IMG:
{ {
cmd_data.cmdtype = FPC_CMDTYPE_TO_DEVICE_EVTDATA; cmd_data.cmdtype = FPC_CMDTYPE_TO_DEVICE_EVTDATA;
cmd_data.request = FPC_CMD_GET_IMG; cmd_data.request = FPC_CMD_GET_IMG;
@@ -1320,7 +1300,7 @@ fpc_verify_sm_run_state (FpiSsm *ssm, FpDevice *device)
} }
break; break;
case FPC_VERIFY_IDENTIFY: case FP_VERIFY_IDENTIFY:
{ {
gsize recv_data_len = sizeof (FPC_IDENTIFY); gsize recv_data_len = sizeof (FPC_IDENTIFY);
cmd_data.cmdtype = FPC_CMDTYPE_FROM_DEVICE; cmd_data.cmdtype = FPC_CMDTYPE_FROM_DEVICE;
@@ -1335,7 +1315,7 @@ fpc_verify_sm_run_state (FpiSsm *ssm, FpDevice *device)
} }
break; break;
case FPC_VERIFY_CANCEL: case FP_VERIFY_CANCEL:
{ {
cmd_data.cmdtype = FPC_CMDTYPE_TO_DEVICE; cmd_data.cmdtype = FPC_CMDTYPE_TO_DEVICE;
cmd_data.request = FPC_CMD_ABORT; cmd_data.request = FPC_CMD_ABORT;
@@ -1405,7 +1385,7 @@ fpc_clear_sm_run_state (FpiSsm *ssm, FpDevice *device)
switch (fpi_ssm_get_cur_state (ssm)) switch (fpi_ssm_get_cur_state (ssm))
{ {
case FPC_CLEAR_DELETE_DB: case FP_CLEAR_DELETE_DB:
{ {
if (self->dbid) if (self->dbid)
{ {
@@ -1432,7 +1412,7 @@ fpc_clear_sm_run_state (FpiSsm *ssm, FpDevice *device)
} }
break; break;
case FPC_CLEAR_CREATE_DB: case FP_CLEAR_CREATE_DB:
{ {
if (self->dbid) if (self->dbid)
{ {
@@ -1537,7 +1517,7 @@ fpc_init_sm_run_state (FpiSsm *ssm, FpDevice *device)
switch (fpi_ssm_get_cur_state (ssm)) switch (fpi_ssm_get_cur_state (ssm))
{ {
case FPC_INIT: case FP_INIT:
cmd_data.cmdtype = FPC_CMDTYPE_TO_DEVICE_EVTDATA; cmd_data.cmdtype = FPC_CMDTYPE_TO_DEVICE_EVTDATA;
cmd_data.request = FPC_CMD_INIT; cmd_data.request = FPC_CMD_INIT;
cmd_data.value = 0x1; cmd_data.value = 0x1;
@@ -1549,7 +1529,7 @@ fpc_init_sm_run_state (FpiSsm *ssm, FpDevice *device)
fpc_sensor_cmd (self, FALSE, &cmd_data); fpc_sensor_cmd (self, FALSE, &cmd_data);
break; break;
case FPC_INIT_LOAD_DB: case FP_LOAD_DB:
{ {
gsize recv_data_len = sizeof (FPC_LOAD_DB); gsize recv_data_len = sizeof (FPC_LOAD_DB);
cmd_data.cmdtype = FPC_CMDTYPE_FROM_DEVICE; cmd_data.cmdtype = FPC_CMDTYPE_FROM_DEVICE;
@@ -1640,13 +1620,9 @@ fpc_dev_probe (FpDevice *device)
{ {
case 0xFFE0: case 0xFFE0:
case 0xA305: case 0xA305:
case 0xA306:
case 0xD805: case 0xD805:
case 0xDA04: case 0xDA04:
case 0xD205: case 0xD205:
case 0x9524:
case 0x9544:
case 0xC844:
self->max_enroll_stage = MAX_ENROLL_SAMPLES; self->max_enroll_stage = MAX_ENROLL_SAMPLES;
break; break;
@@ -1683,7 +1659,7 @@ fpc_dev_open (FpDevice *device)
} }
self->task_ssm = fpi_ssm_new (device, fpc_init_sm_run_state, self->task_ssm = fpi_ssm_new (device, fpc_init_sm_run_state,
FPC_INIT_NUM_STATES); FP_INIT_NUM_STATES);
fpi_ssm_start (self->task_ssm, fpc_init_ssm_done); fpi_ssm_start (self->task_ssm, fpc_init_ssm_done);
} }
@@ -1695,7 +1671,6 @@ fpc_dev_close (FpDevice *device)
fp_dbg ("%s enter -->", G_STRFUNC); fp_dbg ("%s enter -->", G_STRFUNC);
g_clear_pointer (&self->dbid, g_free); g_clear_pointer (&self->dbid, g_free);
g_cancellable_cancel (self->interrupt_cancellable);
g_clear_object (&self->interrupt_cancellable); g_clear_object (&self->interrupt_cancellable);
fpc_dev_release_interface (self, NULL); fpc_dev_release_interface (self, NULL);
} }
@@ -1707,8 +1682,8 @@ fpc_dev_verify_identify (FpDevice *device)
fp_dbg ("%s enter -->", G_STRFUNC); fp_dbg ("%s enter -->", G_STRFUNC);
self->task_ssm = fpi_ssm_new_full (device, fpc_verify_sm_run_state, self->task_ssm = fpi_ssm_new_full (device, fpc_verify_sm_run_state,
FPC_VERIFY_NUM_STATES, FP_VERIFY_NUM_STATES,
FPC_VERIFY_CANCEL, FP_VERIFY_CANCEL,
"verify_identify"); "verify_identify");
fpi_ssm_start (self->task_ssm, fpc_verify_ssm_done); fpi_ssm_start (self->task_ssm, fpc_verify_ssm_done);
@@ -1724,8 +1699,8 @@ fpc_dev_enroll (FpDevice *device)
self->enroll_stage = 0; self->enroll_stage = 0;
self->immobile_stage = 0; self->immobile_stage = 0;
self->task_ssm = fpi_ssm_new_full (device, fpc_enroll_sm_run_state, self->task_ssm = fpi_ssm_new_full (device, fpc_enroll_sm_run_state,
FPC_ENROLL_NUM_STATES, FP_ENROLL_NUM_STATES,
FPC_ENROLL_DICARD, FP_ENROLL_DICARD,
"enroll"); "enroll");
fpi_ssm_start (self->task_ssm, fpc_enroll_ssm_done); fpi_ssm_start (self->task_ssm, fpc_enroll_ssm_done);
@@ -1776,7 +1751,7 @@ fpc_dev_suspend (FpDevice *device)
} }
g_assert (self->cmd_ssm); g_assert (self->cmd_ssm);
g_assert (fpi_ssm_get_cur_state (self->cmd_ssm) == FPC_CMD_GET_DATA); g_assert (fpi_ssm_get_cur_state (self->cmd_ssm) == FP_CMD_GET_DATA);
self->cmd_suspended = TRUE; self->cmd_suspended = TRUE;
g_cancellable_cancel (self->interrupt_cancellable); g_cancellable_cancel (self->interrupt_cancellable);
} }
@@ -1798,12 +1773,10 @@ fpc_dev_resume (FpDevice *device)
g_assert (self->cmd_ssm); g_assert (self->cmd_ssm);
g_assert (self->cmd_suspended); g_assert (self->cmd_suspended);
g_assert (fpi_ssm_get_cur_state (self->cmd_ssm) == FPC_CMD_SUSPENDED); g_assert (fpi_ssm_get_cur_state (self->cmd_ssm) == FP_CMD_SUSPENDED);
self->cmd_suspended = FALSE; self->cmd_suspended = FALSE;
g_set_object (&self->interrupt_cancellable, g_cancellable_new ());
g_clear_object (&self->interrupt_cancellable); fpi_ssm_jump_to_state (self->cmd_ssm, FP_CMD_RESUME);
self->interrupt_cancellable = g_cancellable_new ();
fpi_ssm_jump_to_state (self->cmd_ssm, FPC_CMD_RESUME);
} }
static void static void
@@ -1867,8 +1840,8 @@ fpc_dev_clear_storage (FpDevice *device)
fp_dbg ("%s enter -->", G_STRFUNC); fp_dbg ("%s enter -->", G_STRFUNC);
self->task_ssm = fpi_ssm_new_full (device, fpc_clear_sm_run_state, self->task_ssm = fpi_ssm_new_full (device, fpc_clear_sm_run_state,
FPC_CLEAR_NUM_STATES, FP_CLEAR_NUM_STATES,
FPC_CLEAR_NUM_STATES, FP_CLEAR_NUM_STATES,
"Clear storage"); "Clear storage");
fpi_ssm_start (self->task_ssm, fpc_clear_ssm_done); fpi_ssm_start (self->task_ssm, fpc_clear_ssm_done);
+32 -32
View File
@@ -178,44 +178,44 @@ typedef enum {
} FpcCmdType; } FpcCmdType;
typedef enum { typedef enum {
FPC_CMD_SEND = 0, FP_CMD_SEND = 0,
FPC_CMD_GET_DATA, FP_CMD_GET_DATA,
FPC_CMD_SUSPENDED, FP_CMD_SUSPENDED,
FPC_CMD_RESUME, FP_CMD_RESUME,
FPC_CMD_NUM_STATES, FP_CMD_NUM_STATES,
} FpcCmdState; } FpCmdState;
typedef enum { typedef enum {
FPC_INIT = 0, FP_INIT = 0,
FPC_INIT_LOAD_DB, FP_LOAD_DB,
FPC_INIT_NUM_STATES, FP_INIT_NUM_STATES,
} FpcInitState; } FpInitState;
typedef enum { typedef enum {
FPC_ENROLL_ENUM = 0, FP_ENROLL_ENUM = 0,
FPC_ENROLL_CREATE, FP_ENROLL_CREATE,
FPC_ENROLL_CAPTURE, FP_ENROLL_CAPTURE,
FPC_ENROLL_GET_IMG, FP_ENROLL_GET_IMG,
FPC_ENROLL_UPDATE, FP_ENROLL_UPDATE,
FPC_ENROLL_COMPLETE, FP_ENROLL_COMPLETE,
FPC_ENROLL_CHECK_DUPLICATE, FP_ENROLL_CHECK_DUPLICATE,
FPC_ENROLL_BINDID, FP_ENROLL_BINDID,
FPC_ENROLL_COMMIT, FP_ENROLL_COMMIT,
FPC_ENROLL_DICARD, FP_ENROLL_DICARD,
FPC_ENROLL_CLEANUP, FP_ENROLL_CLEANUP,
FPC_ENROLL_NUM_STATES, FP_ENROLL_NUM_STATES,
} FpcEnrollState; } FpEnrollState;
typedef enum { typedef enum {
FPC_VERIFY_CAPTURE = 0, FP_VERIFY_CAPTURE = 0,
FPC_VERIFY_GET_IMG, FP_VERIFY_GET_IMG,
FPC_VERIFY_IDENTIFY, FP_VERIFY_IDENTIFY,
FPC_VERIFY_CANCEL, FP_VERIFY_CANCEL,
FPC_VERIFY_NUM_STATES, FP_VERIFY_NUM_STATES,
} FpcVerifyState; } FpVerifyState;
typedef enum { typedef enum {
FPC_CLEAR_DELETE_DB = 0, FP_CLEAR_DELETE_DB = 0,
FPC_CLEAR_CREATE_DB, FP_CLEAR_CREATE_DB,
FPC_CLEAR_NUM_STATES, FP_CLEAR_NUM_STATES,
} FpClearState; } FpClearState;
+41 -66
View File
@@ -128,13 +128,11 @@ fp_cmd_receive_cb (FpiUsbTransfer *transfer,
GError *error) GError *error)
{ {
FpiDeviceGoodixMoc *self = FPI_DEVICE_GOODIXMOC (device); FpiDeviceGoodixMoc *self = FPI_DEVICE_GOODIXMOC (device);
FpiByteReader reader = {0};
CommandData *data = user_data; CommandData *data = user_data;
int ssm_state = 0; int ret = -1, ssm_state = 0;
gxfp_cmd_response_t cmd_reponse = {0, }; gxfp_cmd_response_t cmd_reponse = {0, };
pack_header header; pack_header header;
guint32 crc32_calc = 0; guint32 crc32_calc = 0;
guint32 crc32 = 0;
guint16 cmd = 0; guint16 cmd = 0;
if (error) if (error)
@@ -156,10 +154,8 @@ fp_cmd_receive_cb (FpiUsbTransfer *transfer,
return; return;
} }
reader.data = transfer->buffer; ret = gx_proto_parse_header (transfer->buffer, transfer->actual_length, &header);
reader.size = transfer->actual_length; if (ret != 0)
if (gx_proto_parse_header (&reader, &header) != 0)
{ {
fpi_ssm_mark_failed (transfer->ssm, fpi_ssm_mark_failed (transfer->ssm,
fpi_device_error_new_msg (FP_DEVICE_ERROR_PROTO, fpi_device_error_new_msg (FP_DEVICE_ERROR_PROTO,
@@ -167,17 +163,8 @@ fp_cmd_receive_cb (FpiUsbTransfer *transfer,
return; return;
} }
if (!fpi_byte_reader_set_pos (&reader, PACKAGE_HEADER_SIZE + header.len))
{
fpi_ssm_mark_failed (transfer->ssm,
fpi_device_error_new_msg (FP_DEVICE_ERROR_PROTO,
"Package crc read failed"));
}
gx_proto_crc32_calc (transfer->buffer, PACKAGE_HEADER_SIZE + header.len, (uint8_t *) &crc32_calc); gx_proto_crc32_calc (transfer->buffer, PACKAGE_HEADER_SIZE + header.len, (uint8_t *) &crc32_calc);
if(crc32_calc != GUINT32_FROM_LE (*(uint32_t *) (transfer->buffer + PACKAGE_HEADER_SIZE + header.len)))
if (!fpi_byte_reader_get_uint32_le (&reader, &crc32) ||
crc32_calc != crc32)
{ {
fpi_ssm_mark_failed (transfer->ssm, fpi_ssm_mark_failed (transfer->ssm,
fpi_device_error_new_msg (FP_DEVICE_ERROR_PROTO, fpi_device_error_new_msg (FP_DEVICE_ERROR_PROTO,
@@ -187,11 +174,8 @@ fp_cmd_receive_cb (FpiUsbTransfer *transfer,
cmd = MAKE_CMD_EX (header.cmd0, header.cmd1); cmd = MAKE_CMD_EX (header.cmd0, header.cmd1);
fpi_byte_reader_set_pos (&reader, 0); ret = gx_proto_parse_body (cmd, &transfer->buffer[PACKAGE_HEADER_SIZE], header.len, &cmd_reponse);
reader.data = &transfer->buffer[PACKAGE_HEADER_SIZE]; if (ret != 0)
reader.size = header.len;
if (gx_proto_parse_body (cmd, &reader, &cmd_reponse) != 0)
{ {
fpi_ssm_mark_failed (transfer->ssm, fpi_ssm_mark_failed (transfer->ssm,
fpi_device_error_new_msg (FP_DEVICE_ERROR_PROTO, fpi_device_error_new_msg (FP_DEVICE_ERROR_PROTO,
@@ -238,7 +222,7 @@ fp_cmd_run_state (FpiSsm *ssm,
switch (fpi_ssm_get_cur_state (ssm)) switch (fpi_ssm_get_cur_state (ssm))
{ {
case GOODIX_CMD_SEND: case FP_CMD_SEND:
if (self->cmd_transfer) if (self->cmd_transfer)
{ {
self->cmd_transfer->ssm = ssm; self->cmd_transfer->ssm = ssm;
@@ -254,7 +238,7 @@ fp_cmd_run_state (FpiSsm *ssm,
} }
break; break;
case GOODIX_CMD_GET_ACK: case FP_CMD_GET_ACK:
transfer = fpi_usb_transfer_new (dev); transfer = fpi_usb_transfer_new (dev);
transfer->ssm = ssm; transfer->ssm = ssm;
fpi_usb_transfer_fill_bulk (transfer, EP_IN, EP_IN_MAX_BUF_SIZE); fpi_usb_transfer_fill_bulk (transfer, EP_IN, EP_IN_MAX_BUF_SIZE);
@@ -266,7 +250,7 @@ fp_cmd_run_state (FpiSsm *ssm,
break; break;
case GOODIX_CMD_GET_DATA: case FP_CMD_GET_DATA:
transfer = fpi_usb_transfer_new (dev); transfer = fpi_usb_transfer_new (dev);
transfer->ssm = ssm; transfer->ssm = ssm;
fpi_usb_transfer_fill_bulk (transfer, EP_IN, EP_IN_MAX_BUF_SIZE); fpi_usb_transfer_fill_bulk (transfer, EP_IN, EP_IN_MAX_BUF_SIZE);
@@ -354,7 +338,7 @@ goodix_sensor_cmd (FpiDeviceGoodixMoc *self,
self->cmd_ssm = fpi_ssm_new (FP_DEVICE (self), self->cmd_ssm = fpi_ssm_new (FP_DEVICE (self),
fp_cmd_run_state, fp_cmd_run_state,
GOODIX_CMD_NUM_STATES); FP_CMD_NUM_STATES);
fpi_ssm_set_data (self->cmd_ssm, data, (GDestroyNotify) fp_cmd_ssm_done_data_free); fpi_ssm_set_data (self->cmd_ssm, data, (GDestroyNotify) fp_cmd_ssm_done_data_free);
@@ -493,7 +477,7 @@ fp_verify_sm_run_state (FpiSsm *ssm, FpDevice *device)
switch (fpi_ssm_get_cur_state (ssm)) switch (fpi_ssm_get_cur_state (ssm))
{ {
case GOODIX_VERIFY_PWR_BTN_SHIELD_ON: case FP_VERIFY_PWR_BTN_SHIELD_ON:
goodix_sensor_cmd (self, MOC_CMD0_PWR_BTN_SHIELD, MOC_CMD1_PWR_BTN_SHIELD_ON, goodix_sensor_cmd (self, MOC_CMD0_PWR_BTN_SHIELD, MOC_CMD1_PWR_BTN_SHIELD_ON,
false, false,
NULL, NULL,
@@ -501,7 +485,7 @@ fp_verify_sm_run_state (FpiSsm *ssm, FpDevice *device)
fp_pwr_btn_shield_cb); fp_pwr_btn_shield_cb);
break; break;
case GOODIX_VERIFY_CAPTURE: case FP_VERIFY_CAPTURE:
fpi_device_report_finger_status_changes (device, fpi_device_report_finger_status_changes (device,
FP_FINGER_STATUS_NEEDED, FP_FINGER_STATUS_NEEDED,
FP_FINGER_STATUS_NONE); FP_FINGER_STATUS_NONE);
@@ -512,7 +496,7 @@ fp_verify_sm_run_state (FpiSsm *ssm, FpDevice *device)
fp_verify_capture_cb); fp_verify_capture_cb);
break; break;
case GOODIX_VERIFY_IDENTIFY: case FP_VERIFY_IDENTIFY:
goodix_sensor_cmd (self, MOC_CMD0_IDENTIFY, MOC_CMD1_DEFAULT, goodix_sensor_cmd (self, MOC_CMD0_IDENTIFY, MOC_CMD1_DEFAULT,
false, false,
(const guint8 *) nonce, (const guint8 *) nonce,
@@ -520,7 +504,7 @@ fp_verify_sm_run_state (FpiSsm *ssm, FpDevice *device)
fp_verify_cb); fp_verify_cb);
break; break;
case GOODIX_VERIFY_PWR_BTN_SHIELD_OFF: case FP_VERIFY_PWR_BTN_SHIELD_OFF:
goodix_sensor_cmd (self, MOC_CMD0_PWR_BTN_SHIELD, MOC_CMD1_PWR_BTN_SHIELD_OFF, goodix_sensor_cmd (self, MOC_CMD0_PWR_BTN_SHIELD, MOC_CMD1_PWR_BTN_SHIELD_OFF,
false, false,
NULL, NULL,
@@ -682,7 +666,7 @@ fp_enroll_capture_cb (FpiDeviceGoodixMoc *self,
self->enroll_stage, self->enroll_stage,
NULL, NULL,
fpi_device_retry_new (FP_DEVICE_RETRY_GENERAL)); fpi_device_retry_new (FP_DEVICE_RETRY_GENERAL));
fpi_ssm_jump_to_state (self->task_ssm, GOODIX_ENROLL_CAPTURE); fpi_ssm_jump_to_state (self->task_ssm, FP_ENROLL_CAPTURE);
return; return;
} }
fpi_device_report_finger_status_changes (FP_DEVICE (self), fpi_device_report_finger_status_changes (FP_DEVICE (self),
@@ -700,7 +684,7 @@ fp_enroll_capture_cb (FpiDeviceGoodixMoc *self,
self->enroll_stage, self->enroll_stage,
NULL, NULL,
fpi_device_retry_new (FP_DEVICE_RETRY_CENTER_FINGER)); fpi_device_retry_new (FP_DEVICE_RETRY_CENTER_FINGER));
fpi_ssm_jump_to_state (self->task_ssm, GOODIX_ENROLL_CAPTURE); fpi_ssm_jump_to_state (self->task_ssm, FP_ENROLL_CAPTURE);
return; return;
} }
else else
@@ -746,7 +730,7 @@ fp_enroll_update_cb (FpiDeviceGoodixMoc *self,
/* if enroll complete, no need to wait finger up */ /* if enroll complete, no need to wait finger up */
if (self->enroll_stage >= self->max_enroll_stage) if (self->enroll_stage >= self->max_enroll_stage)
{ {
fpi_ssm_jump_to_state (self->task_ssm, GOODIX_ENROLL_CHECK_DUPLICATE); fpi_ssm_jump_to_state (self->task_ssm, FP_ENROLL_CHECK_DUPLICATE);
return; return;
} }
@@ -812,7 +796,7 @@ fp_finger_mode_cb (FpiDeviceGoodixMoc *self,
/* if reach max timeout(5sec) finger not up, switch to finger up again */ /* if reach max timeout(5sec) finger not up, switch to finger up again */
if (resp->finger_status.status == GX_ERROR_WAIT_FINGER_UP_TIMEOUT) if (resp->finger_status.status == GX_ERROR_WAIT_FINGER_UP_TIMEOUT)
{ {
fpi_ssm_jump_to_state (self->task_ssm, GOODIX_ENROLL_WAIT_FINGER_UP); fpi_ssm_jump_to_state (self->task_ssm, FP_ENROLL_WAIT_FINGER_UP);
return; return;
} }
else if (resp->finger_status.status != GX_SUCCESS) else if (resp->finger_status.status != GX_SUCCESS)
@@ -827,7 +811,7 @@ fp_finger_mode_cb (FpiDeviceGoodixMoc *self,
FP_FINGER_STATUS_PRESENT); FP_FINGER_STATUS_PRESENT);
if (self->enroll_stage < self->max_enroll_stage) if (self->enroll_stage < self->max_enroll_stage)
{ {
fpi_ssm_jump_to_state (self->task_ssm, GOODIX_ENROLL_CAPTURE); fpi_ssm_jump_to_state (self->task_ssm, FP_ENROLL_CAPTURE);
return; return;
} }
fpi_ssm_next_state (self->task_ssm); fpi_ssm_next_state (self->task_ssm);
@@ -853,7 +837,7 @@ fp_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device)
switch (fpi_ssm_get_cur_state (ssm)) switch (fpi_ssm_get_cur_state (ssm))
{ {
case GOODIX_ENROLL_PWR_BTN_SHIELD_ON: case FP_ENROLL_PWR_BTN_SHIELD_ON:
{ {
goodix_sensor_cmd (self, MOC_CMD0_PWR_BTN_SHIELD, MOC_CMD1_PWR_BTN_SHIELD_ON, goodix_sensor_cmd (self, MOC_CMD0_PWR_BTN_SHIELD, MOC_CMD1_PWR_BTN_SHIELD_ON,
false, false,
@@ -863,7 +847,7 @@ fp_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device)
} }
break; break;
case GOODIX_ENROLL_ENUM: case FP_ENROLL_ENUM:
{ {
goodix_sensor_cmd (self, MOC_CMD0_GETFINGERLIST, MOC_CMD1_DEFAULT, goodix_sensor_cmd (self, MOC_CMD0_GETFINGERLIST, MOC_CMD1_DEFAULT,
false, false,
@@ -873,7 +857,7 @@ fp_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device)
} }
break; break;
case GOODIX_ENROLL_CREATE: case FP_ENROLL_CREATE:
{ {
goodix_sensor_cmd (self, MOC_CMD0_ENROLL_INIT, MOC_CMD1_DEFAULT, goodix_sensor_cmd (self, MOC_CMD0_ENROLL_INIT, MOC_CMD1_DEFAULT,
false, false,
@@ -883,7 +867,7 @@ fp_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device)
} }
break; break;
case GOODIX_ENROLL_CAPTURE: case FP_ENROLL_CAPTURE:
fpi_device_report_finger_status_changes (device, fpi_device_report_finger_status_changes (device,
FP_FINGER_STATUS_NEEDED, FP_FINGER_STATUS_NEEDED,
FP_FINGER_STATUS_NONE); FP_FINGER_STATUS_NONE);
@@ -894,7 +878,7 @@ fp_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device)
fp_enroll_capture_cb); fp_enroll_capture_cb);
break; break;
case GOODIX_ENROLL_UPDATE: case FP_ENROLL_UPDATE:
dummy[0] = 1; dummy[0] = 1;
dummy[1] = self->sensorcfg->config[2]; dummy[1] = self->sensorcfg->config[2];
dummy[2] = self->sensorcfg->config[3]; dummy[2] = self->sensorcfg->config[3];
@@ -905,7 +889,7 @@ fp_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device)
fp_enroll_update_cb); fp_enroll_update_cb);
break; break;
case GOODIX_ENROLL_WAIT_FINGER_UP: case FP_ENROLL_WAIT_FINGER_UP:
dummy[0] = 0; dummy[0] = 0;
goodix_sensor_cmd (self, MOC_CMD0_FINGER_MODE, MOC_CMD1_SET_FINGER_UP, goodix_sensor_cmd (self, MOC_CMD0_FINGER_MODE, MOC_CMD1_SET_FINGER_UP,
true, true,
@@ -914,7 +898,7 @@ fp_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device)
fp_finger_mode_cb); fp_finger_mode_cb);
break; break;
case GOODIX_ENROLL_CHECK_DUPLICATE: case FP_ENROLL_CHECK_DUPLICATE:
goodix_sensor_cmd (self, MOC_CMD0_CHECK4DUPLICATE, MOC_CMD1_DEFAULT, goodix_sensor_cmd (self, MOC_CMD0_CHECK4DUPLICATE, MOC_CMD1_DEFAULT,
false, false,
(const guint8 *) &dummy, (const guint8 *) &dummy,
@@ -922,7 +906,7 @@ fp_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device)
fp_enroll_check_duplicate_cb); fp_enroll_check_duplicate_cb);
break; break;
case GOODIX_ENROLL_COMMIT: case FP_ENROLL_COMMIT:
{ {
fpi_device_get_enroll_data (device, &print); fpi_device_get_enroll_data (device, &print);
user_id = fpi_print_generate_user_id (print); user_id = fpi_print_generate_user_id (print);
@@ -975,7 +959,7 @@ fp_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device)
} }
break; break;
case GOODIX_ENROLL_PWR_BTN_SHIELD_OFF: case FP_ENROLL_PWR_BTN_SHIELD_OFF:
{ {
goodix_sensor_cmd (self, MOC_CMD0_PWR_BTN_SHIELD, MOC_CMD1_PWR_BTN_SHIELD_OFF, goodix_sensor_cmd (self, MOC_CMD0_PWR_BTN_SHIELD, MOC_CMD1_PWR_BTN_SHIELD_OFF,
false, false,
@@ -1066,7 +1050,7 @@ fp_init_cb_reset_or_complete (FpiDeviceGoodixMoc *self,
{ {
fp_warn ("Template storage appears to have been corrupted! Error was: %s", error->message); fp_warn ("Template storage appears to have been corrupted! Error was: %s", error->message);
fp_warn ("A known reason for this to happen is a firmware bug triggered by another storage area being initialized."); fp_warn ("A known reason for this to happen is a firmware bug triggered by another storage area being initialized.");
fpi_ssm_jump_to_state (self->task_ssm, GOODIX_INIT_RESET_DEVICE); fpi_ssm_jump_to_state (self->task_ssm, FP_INIT_RESET_DEVICE);
} }
else else
{ {
@@ -1107,7 +1091,7 @@ fp_init_sm_run_state (FpiSsm *ssm, FpDevice *device)
switch (fpi_ssm_get_cur_state (ssm)) switch (fpi_ssm_get_cur_state (ssm))
{ {
case GOODIX_INIT_VERSION: case FP_INIT_VERSION:
goodix_sensor_cmd (self, MOC_CMD0_GET_VERSION, MOC_CMD1_DEFAULT, goodix_sensor_cmd (self, MOC_CMD0_GET_VERSION, MOC_CMD1_DEFAULT,
false, false,
&dummy, &dummy,
@@ -1115,7 +1099,7 @@ fp_init_sm_run_state (FpiSsm *ssm, FpDevice *device)
fp_init_version_cb); fp_init_version_cb);
break; break;
case GOODIX_INIT_CONFIG: case FP_INIT_CONFIG:
goodix_sensor_cmd (self, MOC_CMD0_UPDATE_CONFIG, MOC_CMD1_WRITE_CFG_TO_FLASH, goodix_sensor_cmd (self, MOC_CMD0_UPDATE_CONFIG, MOC_CMD1_WRITE_CFG_TO_FLASH,
false, false,
(guint8 *) self->sensorcfg, (guint8 *) self->sensorcfg,
@@ -1123,7 +1107,7 @@ fp_init_sm_run_state (FpiSsm *ssm, FpDevice *device)
fp_init_config_cb); fp_init_config_cb);
break; break;
case GOODIX_INIT_TEMPLATE_LIST: case FP_INIT_TEMPLATE_LIST:
/* List prints to check whether the template DB was corrupted. /* List prints to check whether the template DB was corrupted.
* As of 2022-06-13 there is a known firmware issue that can cause the * As of 2022-06-13 there is a known firmware issue that can cause the
* stored templates for Linux to be corrupted when the Windows storage * stored templates for Linux to be corrupted when the Windows storage
@@ -1138,7 +1122,7 @@ fp_init_sm_run_state (FpiSsm *ssm, FpDevice *device)
fp_init_cb_reset_or_complete); fp_init_cb_reset_or_complete);
break; break;
case GOODIX_INIT_RESET_DEVICE: case FP_INIT_RESET_DEVICE:
fp_warn ("Resetting device storage, you will need to enroll all prints again!"); fp_warn ("Resetting device storage, you will need to enroll all prints again!");
goodix_sensor_cmd (self, MOC_CMD0_DELETETEMPLATE, MOC_CMD1_DELETE_ALL, goodix_sensor_cmd (self, MOC_CMD0_DELETETEMPLATE, MOC_CMD1_DELETE_ALL,
FALSE, FALSE,
@@ -1379,10 +1363,8 @@ gx_fp_probe (FpDevice *device)
case 0x6014: case 0x6014:
case 0x6092: case 0x6092:
case 0x6094: case 0x6094:
case 0x609A:
case 0x609C: case 0x609C:
case 0x60BC: case 0x60BC:
case 0x60C2:
case 0x6304: case 0x6304:
case 0x631C: case 0x631C:
case 0x633C: case 0x633C:
@@ -1392,8 +1374,6 @@ gx_fp_probe (FpDevice *device)
case 0x63AC: case 0x63AC:
case 0x63BC: case 0x63BC:
case 0x63CC: case 0x63CC:
case 0x650A:
case 0x650C:
case 0x6582: case 0x6582:
case 0x6A94: case 0x6A94:
case 0x659A: case 0x659A:
@@ -1452,7 +1432,7 @@ gx_fp_init (FpDevice *device)
} }
self->task_ssm = fpi_ssm_new (device, fp_init_sm_run_state, self->task_ssm = fpi_ssm_new (device, fp_init_sm_run_state,
GOODIX_INIT_NUM_STATES); FP_INIT_NUM_STATES);
fpi_ssm_start (self->task_ssm, fp_init_ssm_done); fpi_ssm_start (self->task_ssm, fp_init_ssm_done);
@@ -1483,7 +1463,9 @@ gx_fp_exit_cb (FpiDeviceGoodixMoc *self,
gxfp_cmd_response_t *resp, gxfp_cmd_response_t *resp,
GError *error) GError *error)
{ {
if (resp && resp->result >= GX_FAILED)
if (resp->result >= GX_FAILED)
fp_dbg ("Setting power button shield failed, result: 0x%x", resp->result); fp_dbg ("Setting power button shield failed, result: 0x%x", resp->result);
self->is_power_button_shield_on = false; self->is_power_button_shield_on = false;
gx_fp_release_interface (self, error); gx_fp_release_interface (self, error);
@@ -1518,8 +1500,8 @@ gx_fp_verify_identify (FpDevice *device)
FpiDeviceGoodixMoc *self = FPI_DEVICE_GOODIXMOC (device); FpiDeviceGoodixMoc *self = FPI_DEVICE_GOODIXMOC (device);
self->task_ssm = fpi_ssm_new_full (device, fp_verify_sm_run_state, self->task_ssm = fpi_ssm_new_full (device, fp_verify_sm_run_state,
GOODIX_VERIFY_NUM_STATES, FP_VERIFY_NUM_STATES,
GOODIX_VERIFY_PWR_BTN_SHIELD_OFF, FP_VERIFY_PWR_BTN_SHIELD_OFF,
"verify"); "verify");
fpi_ssm_start (self->task_ssm, fp_verify_ssm_done); fpi_ssm_start (self->task_ssm, fp_verify_ssm_done);
@@ -1535,8 +1517,8 @@ gx_fp_enroll (FpDevice *device)
self->enroll_stage = 0; self->enroll_stage = 0;
self->task_ssm = fpi_ssm_new_full (device, fp_enroll_sm_run_state, self->task_ssm = fpi_ssm_new_full (device, fp_enroll_sm_run_state,
GOODIX_ENROLL_NUM_STATES, FP_ENROLL_NUM_STATES,
GOODIX_ENROLL_PWR_BTN_SHIELD_OFF, FP_ENROLL_PWR_BTN_SHIELD_OFF,
"enroll"); "enroll");
fpi_ssm_start (self->task_ssm, fp_enroll_ssm_done); fpi_ssm_start (self->task_ssm, fp_enroll_ssm_done);
@@ -1628,12 +1610,10 @@ static const FpIdEntry id_table[] = {
{ .vid = 0x27c6, .pid = 0x6014, }, { .vid = 0x27c6, .pid = 0x6014, },
{ .vid = 0x27c6, .pid = 0x6092, }, { .vid = 0x27c6, .pid = 0x6092, },
{ .vid = 0x27c6, .pid = 0x6094, }, { .vid = 0x27c6, .pid = 0x6094, },
{ .vid = 0x27c6, .pid = 0x609A, },
{ .vid = 0x27c6, .pid = 0x609C, }, { .vid = 0x27c6, .pid = 0x609C, },
{ .vid = 0x27c6, .pid = 0x60A2, }, { .vid = 0x27c6, .pid = 0x60A2, },
{ .vid = 0x27c6, .pid = 0x60A4, }, { .vid = 0x27c6, .pid = 0x60A4, },
{ .vid = 0x27c6, .pid = 0x60BC, }, { .vid = 0x27c6, .pid = 0x60BC, },
{ .vid = 0x27c6, .pid = 0x60C2, },
{ .vid = 0x27c6, .pid = 0x6304, }, { .vid = 0x27c6, .pid = 0x6304, },
{ .vid = 0x27c6, .pid = 0x631C, }, { .vid = 0x27c6, .pid = 0x631C, },
{ .vid = 0x27c6, .pid = 0x633C, }, { .vid = 0x27c6, .pid = 0x633C, },
@@ -1644,8 +1624,6 @@ static const FpIdEntry id_table[] = {
{ .vid = 0x27c6, .pid = 0x63BC, }, { .vid = 0x27c6, .pid = 0x63BC, },
{ .vid = 0x27c6, .pid = 0x63CC, }, { .vid = 0x27c6, .pid = 0x63CC, },
{ .vid = 0x27c6, .pid = 0x6496, }, { .vid = 0x27c6, .pid = 0x6496, },
{ .vid = 0x27c6, .pid = 0x650A, },
{ .vid = 0x27c6, .pid = 0x650C, },
{ .vid = 0x27c6, .pid = 0x6582, }, { .vid = 0x27c6, .pid = 0x6582, },
{ .vid = 0x27c6, .pid = 0x6584, }, { .vid = 0x27c6, .pid = 0x6584, },
{ .vid = 0x27c6, .pid = 0x658C, }, { .vid = 0x27c6, .pid = 0x658C, },
@@ -1654,9 +1632,6 @@ static const FpIdEntry id_table[] = {
{ .vid = 0x27c6, .pid = 0x659A, }, { .vid = 0x27c6, .pid = 0x659A, },
{ .vid = 0x27c6, .pid = 0x659C, }, { .vid = 0x27c6, .pid = 0x659C, },
{ .vid = 0x27c6, .pid = 0x6A94, }, { .vid = 0x27c6, .pid = 0x6A94, },
{ .vid = 0x27c6, .pid = 0x6512, },
{ .vid = 0x27c6, .pid = 0x689A, },
{ .vid = 0x27c6, .pid = 0x66A9, },
{ .vid = 0, .pid = 0, .driver_data = 0 }, /* terminating entry */ { .vid = 0, .pid = 0, .driver_data = 0 }, /* terminating entry */
}; };
+28 -28
View File
@@ -25,39 +25,39 @@
G_DECLARE_FINAL_TYPE (FpiDeviceGoodixMoc, fpi_device_goodixmoc, FPI, DEVICE_GOODIXMOC, FpDevice) G_DECLARE_FINAL_TYPE (FpiDeviceGoodixMoc, fpi_device_goodixmoc, FPI, DEVICE_GOODIXMOC, FpDevice)
typedef enum { typedef enum {
GOODIX_CMD_SEND = 0, FP_CMD_SEND = 0,
GOODIX_CMD_GET_ACK, FP_CMD_GET_ACK,
GOODIX_CMD_GET_DATA, FP_CMD_GET_DATA,
GOODIX_CMD_NUM_STATES, FP_CMD_NUM_STATES,
} GoodixCmdState; } FpCmdState;
typedef enum { typedef enum {
GOODIX_INIT_VERSION = 0, FP_INIT_VERSION = 0,
GOODIX_INIT_CONFIG, FP_INIT_CONFIG,
GOODIX_INIT_TEMPLATE_LIST, FP_INIT_TEMPLATE_LIST,
GOODIX_INIT_RESET_DEVICE, FP_INIT_RESET_DEVICE,
GOODIX_INIT_NUM_STATES, FP_INIT_NUM_STATES,
} GoodixInitState; } FpInitState;
typedef enum { typedef enum {
GOODIX_ENROLL_PWR_BTN_SHIELD_ON = 0, FP_ENROLL_PWR_BTN_SHIELD_ON = 0,
GOODIX_ENROLL_ENUM, FP_ENROLL_ENUM,
GOODIX_ENROLL_CREATE, FP_ENROLL_CREATE,
GOODIX_ENROLL_CAPTURE, FP_ENROLL_CAPTURE,
GOODIX_ENROLL_UPDATE, FP_ENROLL_UPDATE,
GOODIX_ENROLL_WAIT_FINGER_UP, FP_ENROLL_WAIT_FINGER_UP,
GOODIX_ENROLL_CHECK_DUPLICATE, FP_ENROLL_CHECK_DUPLICATE,
GOODIX_ENROLL_COMMIT, FP_ENROLL_COMMIT,
GOODIX_ENROLL_PWR_BTN_SHIELD_OFF, FP_ENROLL_PWR_BTN_SHIELD_OFF,
GOODIX_ENROLL_NUM_STATES, FP_ENROLL_NUM_STATES,
} GoodixEnrollState; } FpEnrollState;
typedef enum { typedef enum {
GOODIX_VERIFY_PWR_BTN_SHIELD_ON = 0, FP_VERIFY_PWR_BTN_SHIELD_ON = 0,
GOODIX_VERIFY_CAPTURE, FP_VERIFY_CAPTURE,
GOODIX_VERIFY_IDENTIFY, FP_VERIFY_IDENTIFY,
GOODIX_VERIFY_PWR_BTN_SHIELD_OFF, FP_VERIFY_PWR_BTN_SHIELD_OFF,
GOODIX_VERIFY_NUM_STATES, FP_VERIFY_NUM_STATES,
} GoodixVerifyState; } FpVerifyState;
+113 -156
View File
@@ -18,8 +18,6 @@
*/ */
#include <glib.h> #include <glib.h>
#include <stdint.h>
#include "goodix_proto.h" #include "goodix_proto.h"
/* /*
@@ -109,7 +107,7 @@ reflect (uint32_t data, uint8_t n_bits)
* If the LSB bit is set, set the reflection of it. * If the LSB bit is set, set the reflection of it.
*/ */
if (data & 0x01) if (data & 0x01)
reflection |= (1LU << ((n_bits - 1) - bit)); reflection |= (1 << ((n_bits - 1) - bit));
data = (data >> 1); data = (data >> 1);
} }
@@ -213,11 +211,7 @@ gx_proto_build_package (uint8_t *ppackage,
init_pack_header (&header, payload_size, cmd, 0); init_pack_header (&header, payload_size, cmd, 0);
memcpy (ppackage, &header, PACKAGE_HEADER_SIZE); memcpy (ppackage, &header, PACKAGE_HEADER_SIZE);
if (payload)
memcpy (ppackage + PACKAGE_HEADER_SIZE, payload, payload_size); memcpy (ppackage + PACKAGE_HEADER_SIZE, payload, payload_size);
else
ppackage[PACKAGE_HEADER_SIZE] = 0;
gx_proto_crc32_calc (ppackage, PACKAGE_HEADER_SIZE + payload_size, ppackage + PACKAGE_HEADER_SIZE + payload_size); gx_proto_crc32_calc (ppackage, PACKAGE_HEADER_SIZE + payload_size, ppackage + PACKAGE_HEADER_SIZE + payload_size);
@@ -226,108 +220,94 @@ gx_proto_build_package (uint8_t *ppackage,
int int
gx_proto_parse_header (FpiByteReader *reader, gx_proto_parse_header (
uint8_t *buffer,
uint32_t buffer_len,
pack_header *pheader) pack_header *pheader)
{ {
if (!pheader) if (!buffer || !pheader)
return -1;
if (buffer_len < PACKAGE_HEADER_SIZE + PACKAGE_CRC_SIZE)
return -1; return -1;
if (!fpi_byte_reader_get_uint8 (reader, &pheader->cmd0)) memcpy (pheader, buffer, sizeof (pack_header));
g_return_val_if_reached (-1); pheader->len = GUINT16_FROM_LE (pheader->len);
if (buffer_len < pheader->len + PACKAGE_HEADER_SIZE)
if (!fpi_byte_reader_get_uint8 (reader, &pheader->cmd1)) return -1;
g_return_val_if_reached (-1);
if (!fpi_byte_reader_get_uint8 (reader, &pheader->packagenum))
g_return_val_if_reached (-1);
if (!fpi_byte_reader_get_uint8 (reader, &pheader->reserved))
g_return_val_if_reached (-1);
if (!fpi_byte_reader_get_uint16_le (reader, &pheader->len))
g_return_val_if_reached (-1);
if (!fpi_byte_reader_get_uint8 (reader, &pheader->crc8))
g_return_val_if_reached (-1);
if (!fpi_byte_reader_get_uint8 (reader, &pheader->rev_crc8))
g_return_val_if_reached (-1);
pheader->len -= PACKAGE_CRC_SIZE; pheader->len -= PACKAGE_CRC_SIZE;
return 0; return 0;
} }
static int static int
gx_proto_parse_fingerid (FpiByteReader *reader, gx_proto_parse_fingerid (
ptemplate_format_t template) uint8_t * fid_buffer,
uint16_t fid_buffer_size,
ptemplate_format_t template
)
{ {
uint8_t byte; uint8_t * buffer = NULL;
const uint8_t *buffer; uint16_t Offset = 0;
if (!template) if (!template || !fid_buffer)
return -1; return -1;
if (!fpi_byte_reader_get_uint8 (reader, &byte) || byte != 67) if (fid_buffer_size < G_STRUCT_OFFSET (template_format_t, payload) + sizeof (uint32_t))
g_return_val_if_reached (-1); return -1;
if (!fpi_byte_reader_get_uint8 (reader, &template->type)) buffer = fid_buffer;
g_return_val_if_reached (-1); Offset = 0;
if (!fpi_byte_reader_get_uint8 (reader, &template->finger_index)) if (buffer[Offset++] != 67)
g_return_val_if_reached (-1); return -1;
if (!fpi_byte_reader_skip (reader, 1)) template->type = buffer[Offset++];
g_return_val_if_reached (-1); template->finger_index = buffer[Offset++];
Offset++;
if (!fpi_byte_reader_get_data (reader, sizeof (template->accountid), &buffer)) memcpy (template->accountid, &buffer[Offset], sizeof (template->accountid));
g_return_val_if_reached (-1); Offset += sizeof (template->accountid);
memcpy (template->tid, &buffer[Offset], sizeof (template->tid));
memcpy (template->accountid, buffer, sizeof (template->accountid)); Offset += sizeof (template->tid); // Offset == 68
template->payload.size = buffer[Offset++];
if (!fpi_byte_reader_get_data (reader, sizeof (template->tid), &buffer)) if (template->payload.size > sizeof (template->payload.data))
g_return_val_if_reached (-1); return -1;
if (template->payload.size + Offset > fid_buffer_size)
memcpy (template->tid, buffer, sizeof (template->tid)); return -1;
memset (template->payload.data, 0, template->payload.size);
if (!fpi_byte_reader_get_uint8 (reader, &template->payload.size)) memcpy (template->payload.data, &buffer[Offset], template->payload.size);
g_return_val_if_reached (-1);
if (!fpi_byte_reader_get_data (reader, template->payload.size, &buffer))
g_return_val_if_reached (-1);
memcpy (template->payload.data, buffer, template->payload.size);
return 0; return 0;
} }
int int
gx_proto_parse_body (uint16_t cmd, FpiByteReader *byte_reader, pgxfp_cmd_response_t presp) gx_proto_parse_body (uint16_t cmd, uint8_t *buffer, uint16_t buffer_len, pgxfp_cmd_response_t presp)
{ {
if (!presp) uint16_t offset = 0;
uint8_t *fingerlist = NULL;
if (!buffer || !presp)
return -1; return -1;
if (buffer_len < 1)
if (!fpi_byte_reader_get_uint8 (byte_reader, &presp->result)) return -1;
g_return_val_if_reached (-1); presp->result = buffer[0];
switch (HIBYTE (cmd)) switch (HIBYTE (cmd))
{ {
case RESPONSE_PACKAGE_CMD: case RESPONSE_PACKAGE_CMD:
{ {
if (!fpi_byte_reader_get_uint8 (byte_reader, &presp->parse_msg.ack_cmd)) if (buffer_len < sizeof (gxfp_parse_msg_t) + 1)
g_return_val_if_reached (-1); return -1;
presp->parse_msg.ack_cmd = buffer[1];
} }
break; break;
case MOC_CMD0_UPDATE_CONFIG: case MOC_CMD0_UPDATE_CONFIG:
{ {
presp->finger_config.status = presp->result; presp->finger_config.status = buffer[0];
if (buffer_len >= 3)
presp->finger_config.max_stored_prints = buffer[2];
else
/* to compatiable old version firmware */ /* to compatiable old version firmware */
presp->finger_config.max_stored_prints = FP_MAX_FINGERNUM; presp->finger_config.max_stored_prints = FP_MAX_FINGERNUM;
if (fpi_byte_reader_skip (byte_reader, 1))
fpi_byte_reader_get_uint8 (byte_reader,
&presp->finger_config.max_stored_prints);
} }
break; break;
@@ -338,99 +318,85 @@ gx_proto_parse_body (uint16_t cmd, FpiByteReader *byte_reader, pgxfp_cmd_respons
case MOC_CMD0_PWR_BTN_SHIELD: case MOC_CMD0_PWR_BTN_SHIELD:
presp->power_button_shield_resp.resp_cmd1 = LOBYTE (cmd); presp->power_button_shield_resp.resp_cmd1 = LOBYTE (cmd);
uint8_t support_pwr_shield; if (buffer_len >= 2)
{
if (fpi_byte_reader_get_uint8 (byte_reader, &support_pwr_shield) && uint8_t support_pwr_shield = buffer[1];
support_pwr_shield == 0xFF) if (support_pwr_shield == 0xFF)
g_debug ("Power button shield feature not supported!\n"); g_debug ("Power button shield feature not supported!\n");
}
break; break;
case MOC_CMD0_GET_VERSION: case MOC_CMD0_GET_VERSION:
const uint8_t *version_info; if (buffer_len < sizeof (gxfp_version_info_t) + 1)
return -1;
if (!fpi_byte_reader_get_data (byte_reader, sizeof (gxfp_version_info_t), &version_info)) memcpy (&presp->version_info, buffer + 1, sizeof (gxfp_version_info_t));
g_return_val_if_reached (-1);
memcpy (&presp->version_info, version_info, sizeof (gxfp_version_info_t));
break; break;
case MOC_CMD0_CAPTURE_DATA: case MOC_CMD0_CAPTURE_DATA:
if (LOBYTE (cmd) == MOC_CMD1_DEFAULT) if (LOBYTE (cmd) == MOC_CMD1_DEFAULT)
{ {
if (!fpi_byte_reader_get_uint8 (byte_reader, if (buffer_len < sizeof (gxfp_capturedata_t) + 1)
&presp->capture_data_resp.img_quality)) return -1;
g_return_val_if_reached (-1); presp->capture_data_resp.img_quality = buffer[1];
presp->capture_data_resp.img_coverage = buffer[2];
if (!fpi_byte_reader_get_uint8 (byte_reader,
&presp->capture_data_resp.img_coverage))
g_return_val_if_reached (-1);
} }
break; break;
case MOC_CMD0_ENROLL_INIT: case MOC_CMD0_ENROLL_INIT:
if (presp->result != GX_SUCCESS) if (buffer_len < sizeof (gxfp_enroll_create_t) + 1)
break; return -1;
const uint8_t *tid; if (presp->result == GX_SUCCESS)
if (!fpi_byte_reader_get_data (byte_reader, TEMPLATE_ID_SIZE, &tid)) memcpy (&presp->enroll_create.tid, &buffer[1], TEMPLATE_ID_SIZE);
g_return_val_if_reached (-1);
memcpy (presp->enroll_create.tid, tid, TEMPLATE_ID_SIZE);
break; break;
case MOC_CMD0_ENROLL: case MOC_CMD0_ENROLL:
presp->enroll_update.rollback = (presp->result < 0x80) ? false : true; if (buffer_len < sizeof (gxfp_enroll_update_t))
if (!fpi_byte_reader_get_uint8 (byte_reader, return -1;
&presp->enroll_update.img_overlay)) presp->enroll_update.rollback = (buffer[0] < 0x80) ? false : true;
g_return_val_if_reached (-1); presp->enroll_update.img_overlay = buffer[1];
presp->enroll_update.img_preoverlay = buffer[2];
if (!fpi_byte_reader_get_uint8 (byte_reader,
&presp->enroll_update.img_preoverlay))
g_return_val_if_reached (-1);
break; break;
case MOC_CMD0_CHECK4DUPLICATE: case MOC_CMD0_CHECK4DUPLICATE:
presp->check_duplicate_resp.duplicate = (presp->result == 0) ? false : true; presp->check_duplicate_resp.duplicate = (presp->result == 0) ? false : true;
if (presp->check_duplicate_resp.duplicate) if (presp->check_duplicate_resp.duplicate)
{ {
uint16_t tid_size; if (buffer_len < 3)
FpiByteReader tid_reader; return -1;
uint16_t tid_size = GUINT16_FROM_LE (*(uint16_t *) (buffer + 1));
offset += 3;
if (!fpi_byte_reader_get_uint16_le (byte_reader, &tid_size)) if (buffer_len < tid_size + offset)
g_return_val_if_reached (-1); return -1;
if (gx_proto_parse_fingerid (buffer + offset, tid_size, &presp->check_duplicate_resp.template) != 0)
if (!fpi_byte_reader_get_sub_reader (byte_reader, &tid_reader, tid_size)) return -1;
g_return_val_if_reached (-1);
if (gx_proto_parse_fingerid (&tid_reader, &presp->check_duplicate_resp.template) != 0)
g_return_val_if_reached (-1);
} }
break; break;
case MOC_CMD0_GETFINGERLIST: case MOC_CMD0_GETFINGERLIST:
if (presp->result != GX_SUCCESS) if (presp->result != GX_SUCCESS)
break; break;
if (buffer_len < 2)
if (!fpi_byte_reader_get_uint8 (byte_reader, return -1;
&presp->finger_list_resp.finger_num)) presp->finger_list_resp.finger_num = buffer[1];
g_return_val_if_reached (-1); fingerlist = buffer + 2;
for(uint8_t num = 0; num < presp->finger_list_resp.finger_num; num++) for(uint8_t num = 0; num < presp->finger_list_resp.finger_num; num++)
{ {
uint16_t fingerid_length; uint16_t fingerid_length;
FpiByteReader fingerid_reader; if (buffer_len < offset + 2)
return -1;
if (!fpi_byte_reader_get_uint16_le (byte_reader, &fingerid_length)) fingerid_length = GUINT16_FROM_LE (*(uint16_t *) (fingerlist + offset));
g_return_val_if_reached (-1); offset += 2;
if (buffer_len < fingerid_length + offset)
if (!fpi_byte_reader_get_sub_reader (byte_reader, &fingerid_reader, return -1;
fingerid_length)) if (gx_proto_parse_fingerid (fingerlist + offset,
g_return_val_if_reached (-1); fingerid_length,
if (gx_proto_parse_fingerid (&fingerid_reader,
&presp->finger_list_resp.finger_list[num]) != 0) &presp->finger_list_resp.finger_list[num]) != 0)
{ {
g_warning ("Failed to parse finger list"); g_warning ("Failed to parse finger list");
g_return_val_if_reached (-1); return -1;
} }
offset += fingerid_length;
} }
break; break;
@@ -439,32 +405,23 @@ gx_proto_parse_body (uint16_t cmd, FpiByteReader *byte_reader, pgxfp_cmd_respons
uint32_t score = 0; uint32_t score = 0;
uint8_t study = 0; uint8_t study = 0;
uint16_t fingerid_size = 0; uint16_t fingerid_size = 0;
presp->verify.match = (buffer[0] == 0) ? true : false;
presp->verify.match = (presp->result == 0) ? true : false;
if (presp->verify.match) if (presp->verify.match)
{ {
FpiByteReader finger_reader; if (buffer_len < 10)
return -1;
if (!fpi_byte_reader_get_uint16_le (byte_reader, offset += 1;
&presp->verify.rejectdetail)) presp->verify.rejectdetail = GUINT16_FROM_LE (*(uint16_t *) (buffer + offset));
g_return_val_if_reached (-1); offset += 2;
score = GUINT32_FROM_LE (*(uint32_t *) (buffer + offset));
if (!fpi_byte_reader_get_uint32_le (byte_reader, &score)) offset += 4;
g_return_val_if_reached (-1); study = buffer[offset];
offset += 1;
if (!fpi_byte_reader_get_uint8 (byte_reader, &study)) fingerid_size = GUINT16_FROM_LE (*(uint16_t *) (buffer + offset));
g_return_val_if_reached (-1); offset += 2;
if (buffer_len < fingerid_size + offset)
if (!fpi_byte_reader_get_uint16_le (byte_reader, &fingerid_size)) return -1;
g_return_val_if_reached (-1); if (gx_proto_parse_fingerid (buffer + offset, fingerid_size, &presp->verify.template) != 0)
if (!fpi_byte_reader_get_sub_reader (byte_reader, &finger_reader,
fingerid_size))
g_return_val_if_reached (-1);
if (gx_proto_parse_fingerid (&finger_reader,
&presp->verify.template) != 0)
{ {
presp->result = GX_FAILED; presp->result = GX_FAILED;
break; break;
@@ -475,7 +432,7 @@ gx_proto_parse_body (uint16_t cmd, FpiByteReader *byte_reader, pgxfp_cmd_respons
break; break;
case MOC_CMD0_FINGER_MODE: case MOC_CMD0_FINGER_MODE:
presp->finger_status.status = presp->result; presp->finger_status.status = buffer[0];
break; break;
default: default:
+5 -5
View File
@@ -22,8 +22,6 @@
#include <stdbool.h> #include <stdbool.h>
#include <string.h> #include <string.h>
#include "fpi-byte-reader.h"
#define PACKAGE_CRC_SIZE (4) #define PACKAGE_CRC_SIZE (4)
#define PACKAGE_HEADER_SIZE (8) #define PACKAGE_HEADER_SIZE (8)
@@ -135,7 +133,7 @@ typedef struct _template_format
typedef struct _gxfp_verify typedef struct _gxfp_verify
{ {
bool match; bool match;
uint16_t rejectdetail; uint32_t rejectdetail;
template_format_t template; template_format_t template;
} gxfp_verify_t, *pgxfp_verify_t; } gxfp_verify_t, *pgxfp_verify_t;
@@ -234,11 +232,13 @@ int gx_proto_build_package (uint8_t *ppackage,
const uint8_t *payload, const uint8_t *payload,
uint32_t payload_size); uint32_t payload_size);
int gx_proto_parse_header (FpiByteReader *reader, int gx_proto_parse_header (uint8_t *buffer,
uint32_t buffer_len,
pack_header *pheader); pack_header *pheader);
int gx_proto_parse_body (uint16_t cmd, int gx_proto_parse_body (uint16_t cmd,
FpiByteReader *byte_reader, uint8_t *buffer,
uint16_t buffer_len,
pgxfp_cmd_response_t presponse); pgxfp_cmd_response_t presponse);
int gx_proto_init_sensor_config (pgxfp_sensor_cfg_t pconfig); int gx_proto_init_sensor_config (pgxfp_sensor_cfg_t pconfig);
+62 -228
View File
@@ -28,8 +28,6 @@ G_DEFINE_TYPE (FpiDeviceRealtek, fpi_device_realtek, FP_TYPE_DEVICE)
static const FpIdEntry id_table[] = { static const FpIdEntry id_table[] = {
{ .vid = 0x0bda, .pid = 0x5813, }, { .vid = 0x0bda, .pid = 0x5813, },
{ .vid = 0x0bda, .pid = 0x5816, },
{ .vid = 0x2541, .pid = 0xfa03, },
{ .vid = 0, .pid = 0, .driver_data = 0 }, /* terminating entry */ { .vid = 0, .pid = 0, .driver_data = 0 }, /* terminating entry */
}; };
@@ -94,50 +92,6 @@ fp_task_ssm_generic_cb (FpiDeviceRealtek *self,
fpi_ssm_next_state (self->task_ssm); fpi_ssm_next_state (self->task_ssm);
} }
static void
fp_get_device_info_cb (FpiDeviceRealtek *self,
uint8_t *buffer_in,
GError *error)
{
if (error)
{
fpi_ssm_mark_failed (self->task_ssm, error);
return;
}
self->template_len = TEMPLATE_LEN_COMMON;
fpi_ssm_next_state (self->task_ssm);
}
static void
fp_update_template_cb (FpiDeviceRealtek *self,
uint8_t *buffer_in,
GError *error)
{
if (error)
{
fpi_ssm_mark_failed (self->task_ssm, error);
return;
}
fpi_ssm_jump_to_state (self->task_ssm, FP_RTK_VERIFY_NUM_STATES);
}
static void
fp_enroll_commit_cb (FpiDeviceRealtek *self,
uint8_t *buffer_in,
GError *error)
{
if (error)
{
fpi_ssm_mark_failed (self->task_ssm, error);
return;
}
fpi_ssm_jump_to_state (self->task_ssm, FP_RTK_ENROLL_NUM_STATES);
}
static void static void
fp_finish_capture_cb (FpiDeviceRealtek *self, fp_finish_capture_cb (FpiDeviceRealtek *self,
uint8_t *buffer_in, uint8_t *buffer_in,
@@ -149,17 +103,8 @@ fp_finish_capture_cb (FpiDeviceRealtek *self,
return; return;
} }
/* We hope this polling CMD can be completed before the action is cancelled */
GCancellable *cancellable = fpi_device_get_cancellable (FP_DEVICE (self));
if (g_cancellable_is_cancelled (cancellable))
{
fpi_ssm_mark_failed (self->task_ssm,
fpi_device_error_new_msg (FP_DEVICE_ERROR_PROTO,
"Action is cancelled!"));
return;
}
gint capture_status = buffer_in[0]; gint capture_status = buffer_in[0];
if (capture_status == 0) if (capture_status == 0)
{ {
fpi_device_report_finger_status_changes (FP_DEVICE (self), fpi_device_report_finger_status_changes (FP_DEVICE (self),
@@ -293,6 +238,7 @@ fp_identify_feature_cb (FpiDeviceRealtek *self,
} }
gint in_status = buffer_in[0]; gint in_status = buffer_in[0];
if (in_status == FP_RTK_CMD_ERR) if (in_status == FP_RTK_CMD_ERR)
{ {
fpi_ssm_mark_failed (self->task_ssm, fpi_ssm_mark_failed (self->task_ssm,
@@ -345,7 +291,7 @@ fp_identify_feature_cb (FpiDeviceRealtek *self,
else else
{ {
fpi_device_identify_report (device, print, match, error); fpi_device_identify_report (device, print, match, error);
fpi_ssm_jump_to_state (self->task_ssm, FP_RTK_VERIFY_NUM_STATES); fpi_ssm_mark_completed (self->task_ssm);
} }
return; return;
} }
@@ -394,9 +340,9 @@ fp_get_delete_pos_cb (FpiDeviceRealtek *self,
for (gint i = 0; i < self->template_num; i++) for (gint i = 0; i < self->template_num; i++)
{ {
if (buffer_in[i * self->template_len] != 0) if (buffer_in[i * TEMPLATE_LEN] != 0)
{ {
memcpy (temp_userid, buffer_in + i * self->template_len + UID_OFFSET, DEFAULT_UID_LEN); memcpy (temp_userid, buffer_in + i * TEMPLATE_LEN + UID_OFFSET, DEFAULT_UID_LEN);
if (g_strcmp0 (fp_print_get_description (print), (const char *) temp_userid) == 0) if (g_strcmp0 (fp_print_get_description (print), (const char *) temp_userid) == 0)
{ {
self->pos_index = i; self->pos_index = i;
@@ -434,25 +380,10 @@ fp_get_enroll_num_cb (FpiDeviceRealtek *self,
} }
static void static void
fp_verify_get_template_cb (FpiDeviceRealtek *self, fp_get_template_cb (FpiDeviceRealtek *self,
uint8_t *buffer_in, uint8_t *buffer_in,
GError *error) GError *error)
{ {
if (error)
{
fpi_ssm_mark_failed (self->task_ssm, error);
return;
}
fpi_ssm_next_state (self->task_ssm);
}
static void
fp_enroll_get_template_cb (FpiDeviceRealtek *self,
uint8_t *buffer_in,
GError *error)
{
g_autofree guchar *seq_list = NULL;
gboolean found = FALSE; gboolean found = FALSE;
if (error) if (error)
@@ -463,7 +394,7 @@ fp_enroll_get_template_cb (FpiDeviceRealtek *self,
for (gint i = 0; i < self->template_num; i++) for (gint i = 0; i < self->template_num; i++)
{ {
if (buffer_in[i * self->template_len] == 0) if (buffer_in[i * TEMPLATE_LEN] == 0)
{ {
self->pos_index = i; self->pos_index = i;
found = TRUE; found = TRUE;
@@ -494,6 +425,7 @@ fp_check_duplicate_cb (FpiDeviceRealtek *self,
} }
gint in_status = buffer_in[0]; gint in_status = buffer_in[0];
if (in_status == FP_RTK_CMD_ERR) if (in_status == FP_RTK_CMD_ERR)
{ {
fpi_ssm_mark_failed (self->task_ssm, fpi_ssm_mark_failed (self->task_ssm,
@@ -539,10 +471,10 @@ fp_list_cb (FpiDeviceRealtek *self,
for (gint i = 0; i < self->template_num; i++) for (gint i = 0; i < self->template_num; i++)
{ {
if (buffer_in[i * self->template_len] != 0) if (buffer_in[i * TEMPLATE_LEN] != 0)
{ {
FpPrint *print = NULL; FpPrint *print = NULL;
print = fp_print_from_data (self, buffer_in + i * self->template_len + SUBFACTOR_OFFSET); print = fp_print_from_data (self, buffer_in + i * TEMPLATE_LEN + SUBFACTOR_OFFSET);
g_ptr_array_add (list_result, g_object_ref_sink (print)); g_ptr_array_add (list_result, g_object_ref_sink (print));
found = TRUE; found = TRUE;
} }
@@ -586,11 +518,11 @@ parse_status (guint8 *buffer, gint status_type)
{ {
switch (status_type) switch (status_type)
{ {
case FP_RTK_MSG_NO_STATUS: case FP_RTK_MSG_PLAINTEXT_NO_STATUS:
return 0; return 0;
break; break;
case FP_RTK_MSG_DEFAULT: case FP_RTK_MSG_PLAINTEXT:
return buffer[0]; return buffer[0];
break; break;
@@ -689,13 +621,13 @@ fp_cmd_run_state (FpiSsm *ssm, FpDevice *dev)
break; break;
case FP_RTK_CMD_TRANS_DATA: case FP_RTK_CMD_TRANS_DATA:
if (self->cmd_type == FP_RTK_CMD_BULK_ONLY) if (self->cmd_type == FP_RTK_CMD_ONLY)
{ {
fpi_ssm_jump_to_state (ssm, FP_RTK_CMD_GET_STATUS); fpi_ssm_jump_to_state (ssm, FP_RTK_CMD_GET_STATUS);
break; break;
} }
if (self->cmd_type == FP_RTK_CMD_BULK_WRITE) if (self->cmd_type == FP_RTK_CMD_WRITE)
{ {
if (self->data_transfer) if (self->data_transfer)
{ {
@@ -756,7 +688,7 @@ fp_cmd_ssm_done (FpiSsm *ssm, FpDevice *dev, GError *error)
} }
static FpiUsbTransfer * static FpiUsbTransfer *
prepare_bulk_transfer (FpDevice *dev, prepare_transfer (FpDevice *dev,
guint8 *data, guint8 *data,
gsize data_len, gsize data_len,
GDestroyNotify free_func) GDestroyNotify free_func)
@@ -776,79 +708,8 @@ prepare_bulk_transfer (FpDevice *dev,
return g_steal_pointer (&transfer); return g_steal_pointer (&transfer);
} }
static void static void
fp_ctrl_cmd_cb (FpiUsbTransfer *transfer, realtek_sensor_cmd (FpiDeviceRealtek *self,
FpDevice *device,
gpointer user_data,
GError *error)
{
FpiDeviceRealtek *self = FPI_DEVICE_REALTEK (device);
g_autofree CommandData *data = g_steal_pointer (&user_data);
g_return_if_fail (data != NULL);
if (error)
{
fpi_ssm_mark_failed (transfer->ssm, error);
return;
}
if (transfer->direction == G_USB_DEVICE_DIRECTION_HOST_TO_DEVICE)
{
if (data->callback)
data->callback (self, NULL, NULL);
}
else
{
if (transfer->actual_length == 0)
{
fp_info ("Control transfer receive data failed!");
fpi_ssm_mark_failed (transfer->ssm,
fpi_device_error_new (FP_DEVICE_ERROR_DATA_INVALID));
return;
}
if (data->callback)
data->callback (self, transfer->buffer, NULL);
}
}
static void
rtk_send_ctrl_cmd (FpiDeviceRealtek *self,
struct rtk_cmd_ctrl *ctrl_cmd,
guint8 *cmd_data,
SynCmdMsgCallback callback)
{
FpiUsbTransfer *transfer = NULL;
g_autofree CommandData *data = g_new0 (CommandData, 1);
data->callback = callback;
transfer = fpi_usb_transfer_new (FP_DEVICE (self));
fpi_usb_transfer_fill_control (transfer,
ctrl_cmd->direction,
G_USB_DEVICE_REQUEST_TYPE_VENDOR,
G_USB_DEVICE_RECIPIENT_DEVICE,
ctrl_cmd->request,
ctrl_cmd->value,
ctrl_cmd->index,
ctrl_cmd->len);
transfer->ssm = self->task_ssm;
if (ctrl_cmd->direction == G_USB_DEVICE_DIRECTION_DEVICE_TO_HOST &&
cmd_data != NULL && ctrl_cmd->len != 0)
memcpy (transfer->buffer, cmd_data, ctrl_cmd->len);
fpi_usb_transfer_submit (transfer,
CMD_TIMEOUT,
NULL,
fp_ctrl_cmd_cb,
g_steal_pointer (&data));
}
static void
rtk_sensor_bulk_cmd (FpiDeviceRealtek *self,
guint8 *cmd, guint8 *cmd,
guint8 *trans_data, guint8 *trans_data,
FpRtkMsgType message_type, FpRtkMsgType message_type,
@@ -859,17 +720,17 @@ rtk_sensor_bulk_cmd (FpiDeviceRealtek *self,
g_autoptr(FpiUsbTransfer) data_transfer = NULL; g_autoptr(FpiUsbTransfer) data_transfer = NULL;
CommandData *data = g_new0 (CommandData, 1); CommandData *data = g_new0 (CommandData, 1);
self->cmd_type = GET_BULK_CMD_TYPE (cmd[0]); self->cmd_type = GET_CMD_TYPE (cmd[0]);
self->message_type = message_type; self->message_type = message_type;
self->trans_data_len = GET_TRANS_DATA_LEN (cmd[11], cmd[10]); self->trans_data_len = GET_TRANS_DATA_LEN (cmd[11], cmd[10]);
self->cmd_cancellable = bwait_data_delay; self->cmd_cancellable = bwait_data_delay;
cmd_transfer = prepare_bulk_transfer (FP_DEVICE (self), cmd, FP_RTK_CMD_BULK_TOTAL_LEN, NULL); cmd_transfer = prepare_transfer (FP_DEVICE (self), cmd, FP_RTK_CMD_TOTAL_LEN, NULL);
self->cmd_transfer = g_steal_pointer (&cmd_transfer); self->cmd_transfer = g_steal_pointer (&cmd_transfer);
if ((self->cmd_type == FP_RTK_CMD_BULK_WRITE) && trans_data) if ((self->cmd_type == FP_RTK_CMD_WRITE) && trans_data)
{ {
data_transfer = prepare_bulk_transfer (FP_DEVICE (self), trans_data, self->trans_data_len, g_free); data_transfer = prepare_transfer (FP_DEVICE (self), trans_data, self->trans_data_len, g_free);
self->data_transfer = g_steal_pointer (&data_transfer); self->data_transfer = g_steal_pointer (&data_transfer);
} }
@@ -968,49 +829,34 @@ fp_verify_sm_run_state (FpiSsm *ssm, FpDevice *device)
switch (fpi_ssm_get_cur_state (ssm)) switch (fpi_ssm_get_cur_state (ssm))
{ {
case FP_RTK_VERIFY_GET_TEMPLATE:
g_assert (self->template_num > 0);
co_get_template.data_len[0] = GET_LEN_L (self->template_len * self->template_num);
co_get_template.data_len[1] = GET_LEN_H (self->template_len * self->template_num);
cmd_buf = (guint8 *) &co_get_template;
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_DEFAULT, 0, fp_verify_get_template_cb);
break;
case FP_RTK_VERIFY_CAPTURE: case FP_RTK_VERIFY_CAPTURE:
fpi_device_report_finger_status_changes (device, fpi_device_report_finger_status_changes (device,
FP_FINGER_STATUS_NEEDED, FP_FINGER_STATUS_NEEDED,
FP_FINGER_STATUS_NONE); FP_FINGER_STATUS_NONE);
cmd_buf = (guint8 *) &co_start_capture; cmd_buf = (guint8 *) &co_start_capture;
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_DEFAULT, 0, fp_task_ssm_generic_cb); realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT, 1, fp_task_ssm_generic_cb);
break; break;
case FP_RTK_VERIFY_FINISH_CAPTURE: case FP_RTK_VERIFY_FINISH_CAPTURE:
cmd_buf = (guint8 *) &co_finish_capture; cmd_buf = (guint8 *) &co_finish_capture;
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_DEFAULT, 0, fp_finish_capture_cb); realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT, 1, fp_finish_capture_cb);
break; break;
case FP_RTK_VERIFY_ACCEPT_SAMPLE: case FP_RTK_VERIFY_ACCEPT_SAMPLE:
co_accept_sample.param[0] = self->fp_purpose; co_accept_sample.param[0] = self->fp_purpose;
cmd_buf = (guint8 *) &co_accept_sample; cmd_buf = (guint8 *) &co_accept_sample;
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_NO_STATUS, 0, fp_accept_sample_cb); realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT_NO_STATUS, 1, fp_accept_sample_cb);
break; break;
case FP_RTK_VERIFY_INDENTIFY_FEATURE: case FP_RTK_VERIFY_INDENTIFY_FEATURE:
cmd_buf = (guint8 *) &nor_identify_feature; cmd_buf = (guint8 *) &tls_identify_feature;
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_NO_STATUS, 0, fp_identify_feature_cb); realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT_NO_STATUS, 0, fp_identify_feature_cb);
break; break;
case FP_RTK_VERIFY_UPDATE_TEMPLATE: case FP_RTK_VERIFY_UPDATE_TEMPLATE:
cmd_buf = (guint8 *) &co_update_template; cmd_buf = (guint8 *) &co_update_template;
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_DEFAULT, 0, fp_update_template_cb); realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT, 0, fp_task_ssm_generic_cb);
break;
case FP_RTK_VERIFY_CANCEL_CAPTURE:
co_cancel_capture.param[0] = self->fp_purpose;
cmd_buf = (guint8 *) &co_cancel_capture;
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_DEFAULT, 0, fp_task_ssm_generic_cb);
break; break;
} }
} }
@@ -1023,6 +869,7 @@ fp_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device)
FpiDeviceRealtek *self = FPI_DEVICE_REALTEK (device); FpiDeviceRealtek *self = FPI_DEVICE_REALTEK (device);
FpPrint *print = NULL; FpPrint *print = NULL;
guint8 *cmd_buf = NULL; guint8 *cmd_buf = NULL;
guint8 *trans_id = NULL;
GVariant *uid = NULL; GVariant *uid = NULL;
GVariant *data = NULL; GVariant *data = NULL;
gsize user_id_len; gsize user_id_len;
@@ -1033,17 +880,17 @@ fp_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device)
case FP_RTK_ENROLL_GET_TEMPLATE: case FP_RTK_ENROLL_GET_TEMPLATE:
g_assert (self->template_num > 0); g_assert (self->template_num > 0);
co_get_template.data_len[0] = GET_LEN_L (self->template_len * self->template_num); co_get_template.data_len[0] = GET_LEN_L (TEMPLATE_LEN * self->template_num);
co_get_template.data_len[1] = GET_LEN_H (self->template_len * self->template_num); co_get_template.data_len[1] = GET_LEN_H (TEMPLATE_LEN * self->template_num);
cmd_buf = (guint8 *) &co_get_template; cmd_buf = (guint8 *) &co_get_template;
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_DEFAULT, 0, fp_enroll_get_template_cb); realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT, 0, fp_get_template_cb);
break; break;
case FP_RTK_ENROLL_BEGIN_POS: case FP_RTK_ENROLL_BEGIN_POS:
nor_enroll_begin.param[0] = self->pos_index; tls_enroll_begin.param[0] = self->pos_index;
cmd_buf = (guint8 *) &nor_enroll_begin; cmd_buf = (guint8 *) &tls_enroll_begin;
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_DEFAULT, 0, fp_task_ssm_generic_cb); realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT, 0, fp_task_ssm_generic_cb);
break; break;
case FP_RTK_ENROLL_CAPTURE: case FP_RTK_ENROLL_CAPTURE:
@@ -1052,42 +899,39 @@ fp_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device)
FP_FINGER_STATUS_NONE); FP_FINGER_STATUS_NONE);
cmd_buf = (guint8 *) &co_start_capture; cmd_buf = (guint8 *) &co_start_capture;
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_DEFAULT, 0, fp_task_ssm_generic_cb); realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT, 1, fp_task_ssm_generic_cb);
break; break;
case FP_RTK_ENROLL_FINISH_CAPTURE: case FP_RTK_ENROLL_FINISH_CAPTURE:
cmd_buf = (guint8 *) &co_finish_capture; cmd_buf = (guint8 *) &co_finish_capture;
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_DEFAULT, 0, fp_finish_capture_cb); realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT, 1, fp_finish_capture_cb);
break; break;
case FP_RTK_ENROLL_ACCEPT_SAMPLE: case FP_RTK_ENROLL_ACCEPT_SAMPLE:
co_accept_sample.param[0] = self->fp_purpose; co_accept_sample.param[0] = self->fp_purpose;
cmd_buf = (guint8 *) &co_accept_sample; cmd_buf = (guint8 *) &co_accept_sample;
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_NO_STATUS, 0, fp_accept_sample_cb); realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT_NO_STATUS, 1, fp_accept_sample_cb);
break; break;
case FP_RTK_ENROLL_CHECK_DUPLICATE: case FP_RTK_ENROLL_CHECK_DUPLICATE:
cmd_buf = (guint8 *) &co_check_duplicate; cmd_buf = (guint8 *) &co_check_duplicate;
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_NO_STATUS, 0, fp_check_duplicate_cb); realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT_NO_STATUS, 1, fp_check_duplicate_cb);
break; break;
case FP_RTK_ENROLL_COMMIT: case FP_RTK_ENROLL_COMMIT:
gchar *valid_uid = NULL;
gint payload_len;
payload_len = UID_PAYLOAD_LEN_DEFAULT;
fpi_device_get_enroll_data (device, &print); fpi_device_get_enroll_data (device, &print);
user_id = fpi_print_generate_user_id (print); user_id = fpi_print_generate_user_id (print);
user_id_len = MIN (DEFAULT_UID_LEN, strlen (user_id)); user_id_len = strlen (user_id);
user_id_len = MIN (DEFAULT_UID_LEN, user_id_len);
payload = g_malloc0 (payload_len); payload = g_malloc0 (UID_PAYLOAD_LEN);
memcpy (payload, user_id, user_id_len); memcpy (payload, user_id, user_id_len);
valid_uid = (gchar *) payload;
trans_id = g_steal_pointer (&payload);
finger = SUB_FINGER_01; finger = SUB_FINGER_01;
uid = g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE, uid = g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE,
valid_uid, user_id,
user_id_len, user_id_len,
1); 1);
data = g_variant_new ("(y@ay)", data = g_variant_new ("(y@ay)",
@@ -1097,23 +941,14 @@ fp_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device)
fpi_print_set_type (print, FPI_PRINT_RAW); fpi_print_set_type (print, FPI_PRINT_RAW);
fpi_print_set_device_stored (print, TRUE); fpi_print_set_device_stored (print, TRUE);
g_object_set (print, "fpi-data", data, NULL); g_object_set (print, "fpi-data", data, NULL);
g_object_set (print, "description", valid_uid, NULL); g_object_set (print, "description", user_id, NULL);
g_debug ("user_id: %s, finger: 0x%x", user_id, finger); g_debug ("user_id: %s, finger: 0x%x", user_id, finger);
nor_enroll_commit.param[0] = SUB_FINGER_01; tls_enroll_commit.param[0] = SUB_FINGER_01;
nor_enroll_commit.data_len[0] = GET_LEN_L (payload_len); cmd_buf = (guint8 *) &tls_enroll_commit;
nor_enroll_commit.data_len[1] = GET_LEN_H (payload_len); realtek_sensor_cmd (self, cmd_buf, trans_id, FP_RTK_MSG_PLAINTEXT, 0, fp_task_ssm_generic_cb);
cmd_buf = (guint8 *) &nor_enroll_commit;
rtk_sensor_bulk_cmd (self, cmd_buf, g_steal_pointer (&payload),
FP_RTK_MSG_DEFAULT, 1, fp_enroll_commit_cb);
break; break;
case FP_RTK_ENROLL_CANCEL_CAPTURE:
co_cancel_capture.param[0] = self->fp_purpose;
cmd_buf = (guint8 *) &co_cancel_capture;
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_DEFAULT, 0, fp_task_ssm_generic_cb);
} }
} }
@@ -1125,19 +960,15 @@ fp_init_sm_run_state (FpiSsm *ssm, FpDevice *device)
switch (fpi_ssm_get_cur_state (ssm)) switch (fpi_ssm_get_cur_state (ssm))
{ {
case FP_RTK_INIT_GET_DEVICE_INFO:
rtk_send_ctrl_cmd (self, &get_device_info, NULL, fp_get_device_info_cb);
break;
case FP_RTK_INIT_SELECT_OS: case FP_RTK_INIT_SELECT_OS:
co_select_system.param[0] = 0x01; co_select_system.param[0] = 0x01;
cmd_buf = (guint8 *) &co_select_system; cmd_buf = (guint8 *) &co_select_system;
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_DEFAULT, 0, fp_task_ssm_generic_cb); realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT, 0, fp_task_ssm_generic_cb);
break; break;
case FP_RTK_INIT_GET_ENROLL_NUM: case FP_RTK_INIT_GET_ENROLL_NUM:
cmd_buf = (guint8 *) &co_get_enroll_num; cmd_buf = (guint8 *) &co_get_enroll_num;
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_DEFAULT, 0, fp_get_enroll_num_cb); realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT, 0, fp_get_enroll_num_cb);
break; break;
} }
} }
@@ -1153,17 +984,17 @@ fp_delete_sm_run_state (FpiSsm *ssm, FpDevice *device)
case FP_RTK_DELETE_GET_POS: case FP_RTK_DELETE_GET_POS:
g_assert (self->template_num > 0); g_assert (self->template_num > 0);
co_get_template.data_len[0] = GET_LEN_L (self->template_len * self->template_num); co_get_template.data_len[0] = GET_LEN_L (TEMPLATE_LEN * self->template_num);
co_get_template.data_len[1] = GET_LEN_H (self->template_len * self->template_num); co_get_template.data_len[1] = GET_LEN_H (TEMPLATE_LEN * self->template_num);
cmd_buf = (guint8 *) &co_get_template; cmd_buf = (guint8 *) &co_get_template;
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_DEFAULT, 0, fp_get_delete_pos_cb); realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT, 0, fp_get_delete_pos_cb);
break; break;
case FP_RTK_DELETE_PRINT: case FP_RTK_DELETE_PRINT:
co_delete_record.param[0] = self->pos_index; co_delete_record.param[0] = self->pos_index;
cmd_buf = (guint8 *) &co_delete_record; cmd_buf = (guint8 *) &co_delete_record;
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_DEFAULT, 0, fp_task_ssm_generic_cb); realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT, 0, fp_task_ssm_generic_cb);
break; break;
} }
} }
@@ -1181,14 +1012,17 @@ identify_verify (FpDevice *device)
g_assert (current_action == FPI_DEVICE_ACTION_VERIFY || g_assert (current_action == FPI_DEVICE_ACTION_VERIFY ||
current_action == FPI_DEVICE_ACTION_IDENTIFY); current_action == FPI_DEVICE_ACTION_IDENTIFY);
if (current_action == FPI_DEVICE_ACTION_IDENTIFY)
self->fp_purpose = FP_RTK_PURPOSE_IDENTIFY; self->fp_purpose = FP_RTK_PURPOSE_IDENTIFY;
else
self->fp_purpose = FP_RTK_PURPOSE_VERIFY;
g_assert (!self->task_ssm); g_assert (!self->task_ssm);
self->task_ssm = fpi_ssm_new_full (device, self->task_ssm = fpi_ssm_new_full (device,
fp_verify_sm_run_state, fp_verify_sm_run_state,
FP_RTK_VERIFY_NUM_STATES, FP_RTK_VERIFY_NUM_STATES,
FP_RTK_VERIFY_CANCEL_CAPTURE, FP_RTK_VERIFY_NUM_STATES,
"Verify & Identify"); "Verify & Identify");
fpi_ssm_start (self->task_ssm, fp_verify_ssm_done); fpi_ssm_start (self->task_ssm, fp_verify_ssm_done);
@@ -1208,7 +1042,7 @@ enroll (FpDevice *device)
self->task_ssm = fpi_ssm_new_full (device, self->task_ssm = fpi_ssm_new_full (device,
fp_enroll_sm_run_state, fp_enroll_sm_run_state,
FP_RTK_ENROLL_NUM_STATES, FP_RTK_ENROLL_NUM_STATES,
FP_RTK_ENROLL_CANCEL_CAPTURE, FP_RTK_ENROLL_NUM_STATES,
"Enroll"); "Enroll");
fpi_ssm_start (self->task_ssm, fp_enroll_ssm_done); fpi_ssm_start (self->task_ssm, fp_enroll_ssm_done);
@@ -1333,7 +1167,7 @@ clear_storage (FpDevice *device)
G_DEBUG_HERE (); G_DEBUG_HERE ();
co_delete_record.param[0] = 0xff; co_delete_record.param[0] = 0xff;
cmd_buf = (guint8 *) &co_delete_record; cmd_buf = (guint8 *) &co_delete_record;
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_DEFAULT, 0, fp_clear_storage_cb); realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT, 0, fp_clear_storage_cb);
} }
static void static void
@@ -1345,11 +1179,11 @@ list_print (FpDevice *device)
G_DEBUG_HERE (); G_DEBUG_HERE ();
g_assert (self->template_num > 0); g_assert (self->template_num > 0);
co_get_template.data_len[0] = GET_LEN_L (self->template_len * self->template_num); co_get_template.data_len[0] = GET_LEN_L (TEMPLATE_LEN * self->template_num);
co_get_template.data_len[1] = GET_LEN_H (self->template_len * self->template_num); co_get_template.data_len[1] = GET_LEN_H (TEMPLATE_LEN * self->template_num);
cmd_buf = (guint8 *) &co_get_template; cmd_buf = (guint8 *) &co_get_template;
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_DEFAULT, 1, fp_list_cb); realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT, 1, fp_list_cb);
} }
static void static void
+35 -61
View File
@@ -30,17 +30,16 @@
#define EP_IN_MAX_BUF_SIZE 2048 #define EP_IN_MAX_BUF_SIZE 2048
#define FP_RTK_CMD_BULK_TOTAL_LEN 12 #define FP_RTK_CMD_TOTAL_LEN 12
#define FP_RTK_CMD_BULK_LEN 2 #define FP_RTK_CMD_LEN 2
#define FP_RTK_CMD_BULK_PARAM_LEN 4 #define FP_RTK_CMD_PARAM_LEN 4
#define FP_RTK_CMD_BULK_ADDR_LEN 4 #define FP_RTK_CMD_ADDR_LEN 4
#define FP_RTK_CMD_BULK_DATA_LEN 2 #define FP_RTK_CMD_DATA_LEN 2
#define TEMPLATE_LEN_COMMON 35
#define TEMPLATE_LEN 35
#define SUBFACTOR_OFFSET 2 #define SUBFACTOR_OFFSET 2
#define UID_OFFSET 3 #define UID_OFFSET 3
#define UID_PAYLOAD_LEN_DEFAULT 32 #define UID_PAYLOAD_LEN 32
/* Command transfer timeout :ms*/ /* Command transfer timeout :ms*/
#define CMD_TIMEOUT 1000 #define CMD_TIMEOUT 1000
@@ -51,7 +50,7 @@
#define DEFAULT_UID_LEN 28 #define DEFAULT_UID_LEN 28
#define SUB_FINGER_01 0xFF #define SUB_FINGER_01 0xFF
#define GET_BULK_CMD_TYPE(val) ((val & 0xC0) >> 6) #define GET_CMD_TYPE(val) ((val & 0xC0) >> 6)
#define GET_TRANS_DATA_LEN(len_h, len_l) ((len_h << 8) | len_l) #define GET_TRANS_DATA_LEN(len_h, len_l) ((len_h << 8) | len_l)
#define GET_LEN_L(total_data_len) ((total_data_len) & 0xff) #define GET_LEN_L(total_data_len) ((total_data_len) & 0xff)
#define GET_LEN_H(total_data_len) ((total_data_len) >> 8) #define GET_LEN_H(total_data_len) ((total_data_len) >> 8)
@@ -68,19 +67,19 @@ typedef struct
} CommandData; } CommandData;
typedef enum { typedef enum {
FP_RTK_CMD_BULK_ONLY = 0, FP_RTK_CMD_ONLY = 0,
FP_RTK_CMD_BULK_READ, FP_RTK_CMD_READ,
FP_RTK_CMD_BULK_WRITE, FP_RTK_CMD_WRITE,
} FpRtkCmdType; } FpRtkCmdType;
typedef enum { typedef enum {
FP_RTK_MSG_DEFAULT = 0, FP_RTK_MSG_PLAINTEXT = 0,
FP_RTK_MSG_NO_STATUS, FP_RTK_MSG_PLAINTEXT_NO_STATUS,
} FpRtkMsgType; } FpRtkMsgType;
typedef enum { typedef enum {
FP_RTK_PURPOSE_VERIFY = 0x01, FP_RTK_PURPOSE_IDENTIFY = 0x01, /* identify before enroll */
FP_RTK_PURPOSE_IDENTIFY = 0x02, FP_RTK_PURPOSE_VERIFY = 0x02,
FP_RTK_PURPOSE_ENROLL = 0x04, FP_RTK_PURPOSE_ENROLL = 0x04,
} FpRtkPurpose; } FpRtkPurpose;
@@ -108,18 +107,15 @@ typedef enum {
FP_RTK_ENROLL_ACCEPT_SAMPLE, FP_RTK_ENROLL_ACCEPT_SAMPLE,
FP_RTK_ENROLL_CHECK_DUPLICATE, FP_RTK_ENROLL_CHECK_DUPLICATE,
FP_RTK_ENROLL_COMMIT, FP_RTK_ENROLL_COMMIT,
FP_RTK_ENROLL_CANCEL_CAPTURE,
FP_RTK_ENROLL_NUM_STATES, FP_RTK_ENROLL_NUM_STATES,
} FpRtkEnrollState; } FpRtkEnrollState;
typedef enum { typedef enum {
FP_RTK_VERIFY_GET_TEMPLATE = 0, FP_RTK_VERIFY_CAPTURE = 0,
FP_RTK_VERIFY_CAPTURE,
FP_RTK_VERIFY_FINISH_CAPTURE, FP_RTK_VERIFY_FINISH_CAPTURE,
FP_RTK_VERIFY_ACCEPT_SAMPLE, FP_RTK_VERIFY_ACCEPT_SAMPLE,
FP_RTK_VERIFY_INDENTIFY_FEATURE, FP_RTK_VERIFY_INDENTIFY_FEATURE,
FP_RTK_VERIFY_UPDATE_TEMPLATE, FP_RTK_VERIFY_UPDATE_TEMPLATE,
FP_RTK_VERIFY_CANCEL_CAPTURE,
FP_RTK_VERIFY_NUM_STATES, FP_RTK_VERIFY_NUM_STATES,
} FpRtkVerifyState; } FpRtkVerifyState;
@@ -130,8 +126,7 @@ typedef enum {
} FpRtkDeleteState; } FpRtkDeleteState;
typedef enum { typedef enum {
FP_RTK_INIT_GET_DEVICE_INFO = 0, FP_RTK_INIT_SELECT_OS = 0,
FP_RTK_INIT_SELECT_OS,
FP_RTK_INIT_GET_ENROLL_NUM, FP_RTK_INIT_GET_ENROLL_NUM,
FP_RTK_INIT_NUM_STATES, FP_RTK_INIT_NUM_STATES,
} FpRtkInitState; } FpRtkInitState;
@@ -160,87 +155,66 @@ struct _FpiDeviceRealtek
FpRtkPurpose fp_purpose; FpRtkPurpose fp_purpose;
gint pos_index; gint pos_index;
gint template_num; gint template_num;
gint template_len;
}; };
struct rtk_cmd_bulk struct realtek_fp_cmd
{ {
uint8_t cmd[FP_RTK_CMD_BULK_LEN]; uint8_t cmd[FP_RTK_CMD_LEN];
uint8_t param[FP_RTK_CMD_BULK_PARAM_LEN]; uint8_t param[FP_RTK_CMD_PARAM_LEN];
uint8_t addr[FP_RTK_CMD_BULK_ADDR_LEN]; uint8_t addr[FP_RTK_CMD_ADDR_LEN];
uint8_t data_len[FP_RTK_CMD_BULK_DATA_LEN]; uint8_t data_len[FP_RTK_CMD_DATA_LEN];
}; };
struct rtk_cmd_ctrl static struct realtek_fp_cmd co_start_capture = {
{
int direction;
uint8_t request;
uint16_t value;
uint16_t index;
uint16_t len;
};
static struct rtk_cmd_ctrl get_device_info = {
.direction = G_USB_DEVICE_DIRECTION_DEVICE_TO_HOST,
.request = 0x07,
.value = 0x000D,
.index = 0x0000,
.len = 0x0008,
};
static struct rtk_cmd_bulk co_start_capture = {
.cmd = {0x05, 0x05}, .cmd = {0x05, 0x05},
}; };
static struct rtk_cmd_bulk co_finish_capture = { static struct realtek_fp_cmd co_finish_capture = {
.cmd = {0x45, 0x06}, .cmd = {0x45, 0x06},
.data_len = {0x05}, .data_len = {0x05},
}; };
static struct rtk_cmd_bulk co_accept_sample = { static struct realtek_fp_cmd co_accept_sample = {
.cmd = {0x45, 0x08}, .cmd = {0x45, 0x08},
.data_len = {0x09}, .data_len = {0x09},
}; };
static struct rtk_cmd_bulk nor_identify_feature = { static struct realtek_fp_cmd tls_identify_feature = {
.cmd = {0x45, 0x22}, .cmd = {0x45, 0x22},
.data_len = {0x2A}, .data_len = {0x2A},
}; };
static struct rtk_cmd_bulk co_get_enroll_num = { static struct realtek_fp_cmd co_get_enroll_num = {
.cmd = {0x45, 0x0d}, .cmd = {0x45, 0x0d},
.data_len = {0x02}, .data_len = {0x02},
}; };
static struct rtk_cmd_bulk co_get_template = { static struct realtek_fp_cmd co_get_template = {
.cmd = {0x45, 0x0E}, .cmd = {0x45, 0x0E},
}; };
static struct rtk_cmd_bulk nor_enroll_begin = { static struct realtek_fp_cmd tls_enroll_begin = {
.cmd = {0x05, 0x20}, .cmd = {0x05, 0x20},
}; };
static struct rtk_cmd_bulk co_check_duplicate = { static struct realtek_fp_cmd co_check_duplicate = {
.cmd = {0x45, 0x10}, .cmd = {0x45, 0x10},
.data_len = {0x22}, .data_len = {0x22},
}; };
static struct rtk_cmd_bulk nor_enroll_commit = { static struct realtek_fp_cmd tls_enroll_commit = {
.cmd = {0x85, 0x21}, .cmd = {0x85, 0x21},
.data_len = {0x20},
}; };
static struct rtk_cmd_bulk co_update_template = { static struct realtek_fp_cmd co_update_template = {
.cmd = {0x05, 0x11}, .cmd = {0x05, 0x11},
}; };
static struct rtk_cmd_bulk co_delete_record = { static struct realtek_fp_cmd co_delete_record = {
.cmd = {0x05, 0x0F}, .cmd = {0x05, 0x0F},
}; };
static struct rtk_cmd_bulk co_select_system = { static struct realtek_fp_cmd co_select_system = {
.cmd = {0x05, 0x13}, .cmd = {0x05, 0x13},
}; };
static struct rtk_cmd_bulk co_cancel_capture = {
.cmd = {0x05, 0x07},
};
@@ -256,7 +256,6 @@ bmkt_compose_message (uint8_t *cmd, int *cmd_len, uint8_t msg_id, uint8_t seq_nu
cmd[BMKT_MESSAGE_SEQ_NUM_FIELD] = seq_num; cmd[BMKT_MESSAGE_SEQ_NUM_FIELD] = seq_num;
cmd[BMKT_MESSAGE_ID_FIELD] = msg_id; cmd[BMKT_MESSAGE_ID_FIELD] = msg_id;
cmd[BMKT_MESSAGE_PAYLOAD_LEN_FIELD] = payload_size; cmd[BMKT_MESSAGE_PAYLOAD_LEN_FIELD] = payload_size;
if (payload_size > 0)
memcpy (&cmd[BMKT_MESSAGE_PAYLOAD_FIELD], payload, payload_size); memcpy (&cmd[BMKT_MESSAGE_PAYLOAD_FIELD], payload, payload_size);
*cmd_len = message_len; *cmd_len = message_len;
+5 -24
View File
@@ -32,35 +32,22 @@ static void compose_and_send_identify_msg (FpDevice *device);
static const FpIdEntry id_table[] = { static const FpIdEntry id_table[] = {
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x00BD, }, { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x00BD, },
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x00C2, },
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x00C4, },
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x00C6, },
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x00DF, }, { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x00DF, },
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x00E9, },
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x00F0, },
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x00F9, }, { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x00F9, },
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x00FC, }, { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x00FC, },
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x00C2, },
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0100, }, { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0100, },
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x00F0, },
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0103, }, { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0103, },
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0104, },
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0106, },
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0107, },
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0108, },
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0109, },
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x010A, },
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0123, }, { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0123, },
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0124, }, { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0124, },
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0126, }, { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0126, },
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0129, }, { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0129, },
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x015F, },
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0168, }, { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0168, },
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0169, }, { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x015F, },
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x016C, }, { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0104, },
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0173, }, { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0173, },
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0174, }, { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0106, },
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x019D, },
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x019F, },
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x01A0, },
{ .vid = 0, .pid = 0, .driver_data = 0 }, /* terminating entry */ { .vid = 0, .pid = 0, .driver_data = 0 }, /* terminating entry */
}; };
@@ -1260,12 +1247,6 @@ dev_probe (FpDevice *device)
return; return;
} }
if (!g_usb_device_reset (usb_dev, &error))
{
fp_dbg ("%s g_usb_device_reset failed %s", G_STRFUNC, error->message);
goto err_close;
}
if (!g_usb_device_claim_interface (usb_dev, 0, 0, &error)) if (!g_usb_device_claim_interface (usb_dev, 0, 0, &error))
goto err_close; goto err_close;
+5 -13
View File
@@ -196,8 +196,7 @@ struct read_msg_data
static void __read_msg_async (FpDevice *dev, static void __read_msg_async (FpDevice *dev,
struct read_msg_data *udata); struct read_msg_data *udata);
#define READ_MSG_DATA_CB_ERR(dev, udata, error) \ #define READ_MSG_DATA_CB_ERR(dev, udata, error) (udata)->callback (dev, \
(udata)->callback (dev, \
READ_MSG_CMD, 0, 0, NULL, 0, (udata)->user_data, error) READ_MSG_CMD, 0, 0, NULL, 0, (udata)->user_data, error)
static void static void
@@ -1244,7 +1243,7 @@ do_verify_stop (FpDevice *dev, FpiMatchResult res, GError *error)
FpiSsm *ssm = deinitsm_new (dev, data); FpiSsm *ssm = deinitsm_new (dev, data);
/* Report the error immediately if possible, otherwise delay it. */ /* Report the error immediately if possible, otherwise delay it. */
if (!error || error->domain == FP_DEVICE_RETRY) if (error && error->domain == FP_DEVICE_RETRY)
fpi_device_verify_report (dev, res, NULL, error); fpi_device_verify_report (dev, res, NULL, error);
else else
data->error = error; data->error = error;
@@ -1296,7 +1295,7 @@ verify_start_sm_run_state (FpiSsm *ssm, FpDevice *dev)
memcpy (msg, verify_hdr, sizeof (verify_hdr)); memcpy (msg, verify_hdr, sizeof (verify_hdr));
memcpy (msg + sizeof (verify_hdr), data, data_len); memcpy (msg + sizeof (verify_hdr), data, data_len);
transfer = alloc_send_cmd28_transfer (dev, 0x03, msg, msg_len); transfer = alloc_send_cmd28_transfer (dev, 0x03, data, data_len);
g_free (msg); g_free (msg);
@@ -1342,6 +1341,7 @@ v_handle_resp00 (FpDevice *dev, unsigned char *data,
fp_dbg ("good image"); fp_dbg ("good image");
break; break;
case 0x1c: /* FIXME what does this one mean? */
case 0x0b: /* FIXME what does this one mean? */ case 0x0b: /* FIXME what does this one mean? */
case 0x23: /* FIXME what does this one mean? */ case 0x23: /* FIXME what does this one mean? */
error = fpi_device_retry_new (FP_DEVICE_RETRY_GENERAL); error = fpi_device_retry_new (FP_DEVICE_RETRY_GENERAL);
@@ -1351,14 +1351,6 @@ v_handle_resp00 (FpDevice *dev, unsigned char *data,
error = fpi_device_retry_new (FP_DEVICE_RETRY_REMOVE_FINGER); error = fpi_device_retry_new (FP_DEVICE_RETRY_REMOVE_FINGER);
break; break;
case 0x1c: /* swipe too fast */
error = fpi_device_retry_new (FP_DEVICE_RETRY_TOO_FAST);
break;
case 0x1d: /* too much horizontal movement */
error = fpi_device_retry_new (FP_DEVICE_RETRY_CENTER_FINGER);
break;
case 0x1e: /* swipe too short */ case 0x1e: /* swipe too short */
error = fpi_device_retry_new (FP_DEVICE_RETRY_TOO_SHORT); error = fpi_device_retry_new (FP_DEVICE_RETRY_TOO_SHORT);
break; break;
@@ -1447,7 +1439,7 @@ verify_rd2800_cb (FpDevice *dev, enum read_msg_type msgtype,
do_verify_stop (dev, do_verify_stop (dev,
FPI_MATCH_ERROR, FPI_MATCH_ERROR,
fpi_device_error_new_msg (FP_DEVICE_ERROR_PROTO, fpi_device_error_new_msg (FP_DEVICE_ERROR_PROTO,
"Response had wrong command sequence")); "Response hat wrong command sequence"));
return; return;
} }
+65 -59
View File
@@ -20,8 +20,8 @@
#define FP_COMPONENT "uru4000" #define FP_COMPONENT "uru4000"
#include <openssl/evp.h> #include <nss.h>
#include <openssl/err.h> #include <pk11pub.h>
#include "drivers_api.h" #include "drivers_api.h"
@@ -148,7 +148,10 @@ struct _FpiDeviceUru4000
int fwfixer_offset; int fwfixer_offset;
unsigned char fwfixer_value; unsigned char fwfixer_value;
EVP_CIPHER_CTX *cipher_ctx; CK_MECHANISM_TYPE cipher;
PK11SlotInfo *slot;
PK11SymKey *symkey;
SECItem *param;
}; };
G_DECLARE_FINAL_TYPE (FpiDeviceUru4000, fpi_device_uru4000, FPI, DEVICE_URU4000, G_DECLARE_FINAL_TYPE (FpiDeviceUru4000, fpi_device_uru4000, FPI, DEVICE_URU4000,
FpImageDevice); FpImageDevice);
@@ -243,29 +246,13 @@ response_cb (FpiUsbTransfer *transfer, FpDevice *dev, void *user_data, GError *e
fpi_ssm_mark_failed (ssm, error); fpi_ssm_mark_failed (ssm, error);
} }
static GError *
openssl_device_error (void)
{
char buf[256];
unsigned long e;
e = ERR_get_error ();
if (e == 0)
return fpi_device_error_new_msg (FP_DEVICE_ERROR_GENERAL,
"unexpected OpenSSL error");
ERR_error_string_n (e, buf, G_N_ELEMENTS (buf));
return fpi_device_error_new_msg (FP_DEVICE_ERROR_GENERAL, "OpenSSL error: %s",
buf);
}
static void static void
challenge_cb (FpiUsbTransfer *transfer, FpDevice *dev, void *user_data, GError *error) challenge_cb (FpiUsbTransfer *transfer, FpDevice *dev, void *user_data, GError *error)
{ {
FpiSsm *ssm = user_data; FpiSsm *ssm = user_data;
FpiDeviceUru4000 *self = FPI_DEVICE_URU4000 (dev); FpiDeviceUru4000 *self = FPI_DEVICE_URU4000 (dev);
unsigned char respdata[CR_LENGTH * 2]; unsigned char respdata[CR_LENGTH];
PK11Context *ctx;
int outlen; int outlen;
if (error) if (error)
@@ -274,39 +261,17 @@ challenge_cb (FpiUsbTransfer *transfer, FpDevice *dev, void *user_data, GError *
return; return;
} }
if (transfer->actual_length != CR_LENGTH)
{
error = fpi_device_error_new_msg (FP_DEVICE_ERROR_PROTO,
"Unexpected buffer length (%" G_GSIZE_FORMAT
"instead of %d)",
transfer->actual_length, CR_LENGTH);
fpi_ssm_mark_failed (ssm, g_steal_pointer (&error));
return;
}
/* submit response */ /* submit response */
/* produce response from challenge */ /* produce response from challenge */
if (!EVP_EncryptUpdate (self->cipher_ctx, respdata, &outlen, transfer->buffer, CR_LENGTH)) ctx = PK11_CreateContextBySymKey (self->cipher, CKA_ENCRYPT,
self->symkey, self->param);
if (PK11_CipherOp (ctx, respdata, &outlen, CR_LENGTH, transfer->buffer, CR_LENGTH) != SECSuccess ||
PK11_Finalize (ctx) != SECSuccess)
{ {
fpi_ssm_mark_failed (ssm, openssl_device_error ()); fp_err ("Failed to encrypt challenge data");
return; error = fpi_device_error_new_msg (FP_DEVICE_ERROR_PROTO, "Failed to encrypt challenge data");
}
if (outlen != CR_LENGTH)
{
error = fpi_device_error_new_msg (FP_DEVICE_ERROR_PROTO,
"Unexpected encrypted buffer length (%d"
"instead of %d)",
outlen, CR_LENGTH);
fpi_ssm_mark_failed (ssm, g_steal_pointer (&error));
return;
}
if (!EVP_EncryptFinal_ex (self->cipher_ctx, respdata + outlen, &outlen))
{
fpi_ssm_mark_failed (ssm, openssl_device_error ());
return;
} }
PK11_DestroyContext (ctx, PR_TRUE);
if (!error) if (!error)
write_regs (FP_IMAGE_DEVICE (dev), REG_RESPONSE, CR_LENGTH, respdata, response_cb, ssm); write_regs (FP_IMAGE_DEVICE (dev), REG_RESPONSE, CR_LENGTH, respdata, response_cb, ssm);
@@ -738,9 +703,9 @@ imaging_run_state (FpiSsm *ssm, FpDevice *_dev)
case IMAGING_DECODE: case IMAGING_DECODE:
key = self->last_reg_rd[0]; key = self->last_reg_rd[0];
key |= (uint32_t) self->last_reg_rd[1] << 8; key |= self->last_reg_rd[1] << 8;
key |= (uint32_t) self->last_reg_rd[2] << 16; key |= self->last_reg_rd[2] << 16;
key |= (uint32_t) self->last_reg_rd[3] << 24; key |= self->last_reg_rd[3] << 24;
key ^= self->img_enc_seed; key ^= self->img_enc_seed;
fp_dbg ("encryption id %02x -> key %08x", img->key_number, key); fp_dbg ("encryption id %02x -> key %08x", img->key_number, key);
@@ -1305,6 +1270,8 @@ dev_init (FpImageDevice *dev)
g_autoptr(GPtrArray) interfaces = NULL; g_autoptr(GPtrArray) interfaces = NULL;
GUsbInterface *iface = NULL; GUsbInterface *iface = NULL;
guint64 driver_data; guint64 driver_data;
SECStatus rv;
SECItem item;
int i; int i;
interfaces = g_usb_device_get_interfaces (fpi_device_get_usb_device (FP_DEVICE (dev)), &error); interfaces = g_usb_device_get_interfaces (fpi_device_get_usb_device (FP_DEVICE (dev)), &error);
@@ -1376,6 +1343,20 @@ dev_init (FpImageDevice *dev)
return; return;
} }
/* Disable loading p11-kit's user configuration */
g_setenv ("P11_KIT_NO_USER_CONFIG", "1", TRUE);
/* Initialise NSS early */
rv = NSS_NoDB_Init (".");
if (rv != SECSuccess)
{
fp_err ("could not initialise NSS");
fpi_image_device_open_complete (dev,
fpi_device_error_new_msg (FP_DEVICE_ERROR_GENERAL,
"Could not initialise NSS"));
return;
}
self = FPI_DEVICE_URU4000 (dev); self = FPI_DEVICE_URU4000 (dev);
g_clear_pointer (&self->rand, g_rand_free); g_clear_pointer (&self->rand, g_rand_free);
@@ -1388,17 +1369,35 @@ dev_init (FpImageDevice *dev)
self->interface = g_usb_interface_get_number (iface); self->interface = g_usb_interface_get_number (iface);
/* Set up encryption */ /* Set up encryption */
if (!(self->cipher_ctx = EVP_CIPHER_CTX_new ())) self->cipher = CKM_AES_ECB;
self->slot = PK11_GetBestSlot (self->cipher, NULL);
if (self->slot == NULL)
{ {
fpi_image_device_open_complete (dev, openssl_device_error ()); fp_err ("could not get encryption slot");
fpi_image_device_open_complete (dev,
fpi_device_error_new_msg (FP_DEVICE_ERROR_GENERAL,
"Could not get encryption slot"));
return; return;
} }
item.type = siBuffer;
if (!EVP_EncryptInit_ex (self->cipher_ctx, EVP_aes_128_ecb (), NULL, crkey, NULL)) item.data = (unsigned char *) crkey;
item.len = sizeof (crkey);
self->symkey = PK11_ImportSymKey (self->slot,
self->cipher,
PK11_OriginUnwrap,
CKA_ENCRYPT,
&item, NULL);
if (self->symkey == NULL)
{ {
fpi_image_device_open_complete (dev, openssl_device_error ()); fp_err ("failed to import key into NSS");
PK11_FreeSlot (self->slot);
self->slot = NULL;
fpi_image_device_open_complete (dev,
fpi_device_error_new_msg (FP_DEVICE_ERROR_GENERAL,
"Failed to import key into NSS"));
return; return;
} }
self->param = PK11_ParamFromIV (self->cipher, NULL);
fpi_image_device_open_complete (dev, NULL); fpi_image_device_open_complete (dev, NULL);
} }
@@ -1409,7 +1408,14 @@ dev_deinit (FpImageDevice *dev)
GError *error = NULL; GError *error = NULL;
FpiDeviceUru4000 *self = FPI_DEVICE_URU4000 (dev); FpiDeviceUru4000 *self = FPI_DEVICE_URU4000 (dev);
g_clear_pointer (&self->cipher_ctx, EVP_CIPHER_CTX_free); if (self->symkey)
PK11_FreeSymKey (self->symkey);
if (self->param)
SECITEM_FreeItem (self->param, PR_TRUE);
if (self->slot)
PK11_FreeSlot (self->slot);
NSS_Shutdown ();
g_usb_device_release_interface (fpi_device_get_usb_device (FP_DEVICE (dev)), g_usb_device_release_interface (fpi_device_get_usb_device (FP_DEVICE (dev)),
self->interface, 0, &error); self->interface, 0, &error);
-14
View File
@@ -772,7 +772,6 @@ fpi_device_virtual_device_class_init (FpDeviceVirtualDeviceClass *klass)
{ {
FpDeviceClass *dev_class = FP_DEVICE_CLASS (klass); FpDeviceClass *dev_class = FP_DEVICE_CLASS (klass);
GObjectClass *object_class = G_OBJECT_CLASS (klass); GObjectClass *object_class = G_OBJECT_CLASS (klass);
const char *hot_seconds;
object_class->finalize = fpi_device_virtual_device_finalize; object_class->finalize = fpi_device_virtual_device_finalize;
@@ -788,18 +787,5 @@ fpi_device_virtual_device_class_init (FpDeviceVirtualDeviceClass *klass)
dev_class->enroll = dev_enroll; dev_class->enroll = dev_enroll;
dev_class->cancel = dev_cancel; dev_class->cancel = dev_cancel;
if ((hot_seconds = g_getenv ("FP_VIRTUAL_DEVICE_HOT_SECONDS")) &&
*hot_seconds != '\0')
{
gint64 hot_seconds_value;
hot_seconds_value = g_ascii_strtoll (hot_seconds, NULL, 10);
if (hot_seconds_value >= G_MAXINT32 || hot_seconds_value < 0)
hot_seconds_value = -1;
dev_class->temp_hot_seconds = hot_seconds_value;
g_debug ("device hot seconds set to %d", dev_class->temp_hot_seconds);
}
fpi_device_class_auto_initialize_features (dev_class); fpi_device_class_auto_initialize_features (dev_class);
} }
+2 -16
View File
@@ -191,12 +191,12 @@ on_listener_connected (FpiDeviceVirtualListener *listener,
switch (state) switch (state)
{ {
case FPI_IMAGE_DEVICE_STATE_IDLE:
case FPI_IMAGE_DEVICE_STATE_AWAIT_FINGER_ON: case FPI_IMAGE_DEVICE_STATE_AWAIT_FINGER_ON:
case FPI_IMAGE_DEVICE_STATE_CAPTURE: case FPI_IMAGE_DEVICE_STATE_CAPTURE:
case FPI_IMAGE_DEVICE_STATE_AWAIT_FINGER_OFF:
recv_image (self); recv_image (self);
case FPI_IMAGE_DEVICE_STATE_IDLE:
case FPI_IMAGE_DEVICE_STATE_AWAIT_FINGER_OFF:
case FPI_IMAGE_DEVICE_STATE_INACTIVE: case FPI_IMAGE_DEVICE_STATE_INACTIVE:
case FPI_IMAGE_DEVICE_STATE_ACTIVATING: case FPI_IMAGE_DEVICE_STATE_ACTIVATING:
case FPI_IMAGE_DEVICE_STATE_DEACTIVATING: case FPI_IMAGE_DEVICE_STATE_DEACTIVATING:
@@ -310,7 +310,6 @@ fpi_device_virtual_image_class_init (FpDeviceVirtualImageClass *klass)
{ {
FpDeviceClass *dev_class = FP_DEVICE_CLASS (klass); FpDeviceClass *dev_class = FP_DEVICE_CLASS (klass);
FpImageDeviceClass *img_class = FP_IMAGE_DEVICE_CLASS (klass); FpImageDeviceClass *img_class = FP_IMAGE_DEVICE_CLASS (klass);
const char *hot_seconds;
dev_class->id = FP_COMPONENT; dev_class->id = FP_COMPONENT;
dev_class->full_name = "Virtual image device for debugging"; dev_class->full_name = "Virtual image device for debugging";
@@ -322,17 +321,4 @@ fpi_device_virtual_image_class_init (FpDeviceVirtualImageClass *klass)
img_class->activate = dev_activate; img_class->activate = dev_activate;
img_class->deactivate = dev_deactivate; img_class->deactivate = dev_deactivate;
if ((hot_seconds = g_getenv ("FP_VIRTUAL_IMAGE_HOT_SECONDS")) &&
*hot_seconds != '\0')
{
gint64 hot_seconds_value;
hot_seconds_value = g_ascii_strtoll (hot_seconds, NULL, 10);
if (hot_seconds_value >= G_MAXINT32 || hot_seconds_value < 0)
hot_seconds_value = -1;
dev_class->temp_hot_seconds = hot_seconds_value;
g_debug ("device hot seconds set to %d", dev_class->temp_hot_seconds);
}
} }
+11
View File
@@ -27,6 +27,10 @@
#include <config.h> #include <config.h>
#ifdef HAVE_LIBFPRINT_TOD
#include "tod/tod-shared-loader.h"
#endif
#ifdef HAVE_UDEV #ifdef HAVE_UDEV
#include <gudev/gudev.h> #include <gudev/gudev.h>
#endif #endif
@@ -296,6 +300,8 @@ fp_context_finalize (GObject *object)
g_object_run_dispose (G_OBJECT (priv->usb_ctx)); g_object_run_dispose (G_OBJECT (priv->usb_ctx));
g_clear_object (&priv->usb_ctx); g_clear_object (&priv->usb_ctx);
tod_shared_drivers_unregister ();
G_OBJECT_CLASS (fp_context_parent_class)->finalize (object); G_OBJECT_CLASS (fp_context_parent_class)->finalize (object);
} }
@@ -351,6 +357,7 @@ static void
fp_context_init (FpContext *self) fp_context_init (FpContext *self)
{ {
g_autoptr(GError) error = NULL; g_autoptr(GError) error = NULL;
g_autoptr(GArray) shared_drivers = NULL;
FpContextPrivate *priv = fp_context_get_instance_private (self); FpContextPrivate *priv = fp_context_get_instance_private (self);
guint i; guint i;
@@ -358,6 +365,10 @@ fp_context_init (FpContext *self)
priv->drivers = fpi_get_driver_types (); priv->drivers = fpi_get_driver_types ();
tod_shared_drivers_register ();
shared_drivers = tod_shared_drivers_get ();
g_array_prepend_vals (priv->drivers, shared_drivers->data, shared_drivers->len);
if (get_drivers_allowlist_env ()) if (get_drivers_allowlist_env ())
{ {
for (i = 0; i < priv->drivers->len;) for (i = 0; i < priv->drivers->len;)
+12 -15
View File
@@ -292,14 +292,14 @@ fp_device_get_property (GObject *object,
case PROP_FPI_UDEV_DATA_SPIDEV: case PROP_FPI_UDEV_DATA_SPIDEV:
if (cls->type == FP_DEVICE_TYPE_UDEV) if (cls->type == FP_DEVICE_TYPE_UDEV)
g_value_set_string (value, priv->udev_data.spidev_path); g_value_set_string (value, g_strdup (priv->udev_data.spidev_path));
else else
g_value_set_string (value, NULL); g_value_set_string (value, NULL);
break; break;
case PROP_FPI_UDEV_DATA_HIDRAW: case PROP_FPI_UDEV_DATA_HIDRAW:
if (cls->type == FP_DEVICE_TYPE_UDEV) if (cls->type == FP_DEVICE_TYPE_UDEV)
g_value_set_string (value, priv->udev_data.hidraw_path); g_value_set_string (value, g_strdup (priv->udev_data.hidraw_path));
else else
g_value_set_string (value, NULL); g_value_set_string (value, NULL);
break; break;
@@ -483,9 +483,6 @@ fp_device_class_init (FpDeviceClass *klass)
NULL, NULL,
G_PARAM_STATIC_STRINGS | G_PARAM_READABLE); G_PARAM_STATIC_STRINGS | G_PARAM_READABLE);
/**
* FpDevice:open: (getter is_open):
*/
properties[PROP_OPEN] = properties[PROP_OPEN] =
g_param_spec_boolean ("open", g_param_spec_boolean ("open",
"Opened", "Opened",
@@ -1106,8 +1103,8 @@ enroll_data_free (FpEnrollData *data)
* @device: a #FpDevice * @device: a #FpDevice
* @template_print: (transfer floating): a #FpPrint * @template_print: (transfer floating): a #FpPrint
* @cancellable: (nullable): a #GCancellable, or %NULL * @cancellable: (nullable): a #GCancellable, or %NULL
* @progress_cb: (nullable) (closure progress_data) (scope notified): progress reporting callback * @progress_cb: (nullable) (scope notified): progress reporting callback
* @progress_data: user data for @progress_cb * @progress_data: (closure progress_cb): user data for @progress_cb
* @progress_destroy: (destroy progress_data): Destroy notify for @progress_data * @progress_destroy: (destroy progress_data): Destroy notify for @progress_data
* @callback: (scope async): the function to call on completion * @callback: (scope async): the function to call on completion
* @user_data: the data to pass to @callback * @user_data: the data to pass to @callback
@@ -1251,8 +1248,8 @@ match_data_free (FpMatchData *data)
* @device: a #FpDevice * @device: a #FpDevice
* @enrolled_print: a #FpPrint to verify * @enrolled_print: a #FpPrint to verify
* @cancellable: (nullable): a #GCancellable, or %NULL * @cancellable: (nullable): a #GCancellable, or %NULL
* @match_cb: (nullable) (scope notified) (closure match_data): match reporting callback * @match_cb: (nullable) (scope notified): match reporting callback
* @match_data: user data for @match_cb * @match_data: (closure match_cb): user data for @match_cb
* @match_destroy: (destroy match_data): Destroy notify for @match_data * @match_destroy: (destroy match_data): Destroy notify for @match_data
* @callback: the function to call on completion * @callback: the function to call on completion
* @user_data: the data to pass to @callback * @user_data: the data to pass to @callback
@@ -1377,8 +1374,8 @@ fp_device_verify_finish (FpDevice *device,
* @device: a #FpDevice * @device: a #FpDevice
* @prints: (element-type FpPrint) (transfer none): #GPtrArray of #FpPrint * @prints: (element-type FpPrint) (transfer none): #GPtrArray of #FpPrint
* @cancellable: (nullable): a #GCancellable, or %NULL * @cancellable: (nullable): a #GCancellable, or %NULL
* @match_cb: (nullable) (scope notified) (closure match_data): match reporting callback * @match_cb: (nullable) (scope notified): match reporting callback
* @match_data: user data for @match_cb * @match_data: (closure match_cb): user data for @match_cb
* @match_destroy: (destroy match_data): Destroy notify for @match_data * @match_destroy: (destroy match_data): Destroy notify for @match_data
* @callback: the function to call on completion * @callback: the function to call on completion
* @user_data: the data to pass to @callback * @user_data: the data to pass to @callback
@@ -1946,8 +1943,8 @@ fp_device_enroll_sync (FpDevice *device,
* @device: a #FpDevice * @device: a #FpDevice
* @enrolled_print: a #FpPrint to verify * @enrolled_print: a #FpPrint to verify
* @cancellable: (nullable): a #GCancellable, or %NULL * @cancellable: (nullable): a #GCancellable, or %NULL
* @match_cb: (nullable) (scope call) (closure match_data): match reporting callback * @match_cb: (nullable) (scope call): match reporting callback
* @match_data: user data for @match_cb * @match_data: (closure match_cb): user data for @match_cb
* @match: (out): Whether the user presented the correct finger * @match: (out): Whether the user presented the correct finger
* @print: (out) (transfer full) (nullable): Location to store the scanned print, or %NULL to ignore * @print: (out) (transfer full) (nullable): Location to store the scanned print, or %NULL to ignore
* @error: Return location for errors, or %NULL to ignore * @error: Return location for errors, or %NULL to ignore
@@ -1986,8 +1983,8 @@ fp_device_verify_sync (FpDevice *device,
* @device: a #FpDevice * @device: a #FpDevice
* @prints: (element-type FpPrint) (transfer none): #GPtrArray of #FpPrint * @prints: (element-type FpPrint) (transfer none): #GPtrArray of #FpPrint
* @cancellable: (nullable): a #GCancellable, or %NULL * @cancellable: (nullable): a #GCancellable, or %NULL
* @match_cb: (nullable) (scope call) (closure match_data): match reporting callback * @match_cb: (nullable) (scope call): match reporting callback
* @match_data: user data for @match_cb * @match_data: (closure match_cb): user data for @match_cb
* @match: (out) (transfer full) (nullable): Location for the matched #FpPrint, or %NULL * @match: (out) (transfer full) (nullable): Location for the matched #FpPrint, or %NULL
* @print: (out) (transfer full) (nullable): Location for the new #FpPrint, or %NULL * @print: (out) (transfer full) (nullable): Location for the new #FpPrint, or %NULL
* @error: Return location for errors, or %NULL to ignore * @error: Return location for errors, or %NULL to ignore
+1 -4
View File
@@ -43,8 +43,8 @@ G_DECLARE_DERIVABLE_TYPE (FpDevice, fp_device, FP, DEVICE, GObject)
*/ */
typedef enum { typedef enum {
FP_DEVICE_TYPE_VIRTUAL, FP_DEVICE_TYPE_VIRTUAL,
FP_DEVICE_TYPE_UDEV,
FP_DEVICE_TYPE_USB, FP_DEVICE_TYPE_USB,
FP_DEVICE_TYPE_UDEV,
} FpDeviceType; } FpDeviceType;
/** /**
@@ -113,8 +113,6 @@ typedef enum {
* @FP_DEVICE_RETRY_REMOVE_FINGER: The scan did not succeed due to quality or * @FP_DEVICE_RETRY_REMOVE_FINGER: The scan did not succeed due to quality or
* pressure problems; the user should remove their finger from the scanner * pressure problems; the user should remove their finger from the scanner
* before retrying. * before retrying.
* @FP_DEVICE_RETRY_TOO_FAST: The scan did not succeed because the finger
* swipe or touch was too fast.
* *
* Error codes representing scan failures resulting in the user needing to * Error codes representing scan failures resulting in the user needing to
* retry. * retry.
@@ -124,7 +122,6 @@ typedef enum {
FP_DEVICE_RETRY_TOO_SHORT, FP_DEVICE_RETRY_TOO_SHORT,
FP_DEVICE_RETRY_CENTER_FINGER, FP_DEVICE_RETRY_CENTER_FINGER,
FP_DEVICE_RETRY_REMOVE_FINGER, FP_DEVICE_RETRY_REMOVE_FINGER,
FP_DEVICE_RETRY_TOO_FAST,
} FpDeviceRetry; } FpDeviceRetry;
/** /**
+4
View File
@@ -20,6 +20,7 @@
#pragma once #pragma once
#include "fp-image.h" #include "fp-image.h"
#include "tod/tod-macros.h"
/** /**
* fpi_frame: * fpi_frame:
@@ -110,6 +111,9 @@ struct fpi_line_asmbl_ctx
unsigned char (*get_pixel)(struct fpi_line_asmbl_ctx *ctx, unsigned char (*get_pixel)(struct fpi_line_asmbl_ctx *ctx,
GSList *line, GSList *line,
unsigned int x); unsigned int x);
/*< private >*/
TOD_PADDING (32, 0);
}; };
FpImage *fpi_assemble_lines (struct fpi_line_asmbl_ctx *ctx, FpImage *fpi_assemble_lines (struct fpi_line_asmbl_ctx *ctx,
-2
View File
@@ -675,6 +675,4 @@ fpi_byte_reader_skip_inline (FpiByteReader * reader, guint nbytes)
#endif /* FPI_BYTE_READER_DISABLE_INLINES */ #endif /* FPI_BYTE_READER_DISABLE_INLINES */
G_DEFINE_AUTOPTR_CLEANUP_FUNC (FpiByteReader, fpi_byte_reader_free);
G_END_DECLS G_END_DECLS
+4 -5
View File
@@ -75,8 +75,7 @@ fpi_byte_writer_new_with_size (guint size, gboolean fixed)
FpiByteWriter *ret = fpi_byte_writer_new (); FpiByteWriter *ret = fpi_byte_writer_new ();
ret->alloc_size = size; ret->alloc_size = size;
ret->parent.data = g_malloc0 (ret->alloc_size); ret->parent.data = g_malloc (ret->alloc_size);
ret->parent.size = size;
ret->fixed = fixed; ret->fixed = fixed;
ret->owned = TRUE; ret->owned = TRUE;
@@ -143,8 +142,7 @@ fpi_byte_writer_init_with_size (FpiByteWriter * writer, guint size,
fpi_byte_writer_init (writer); fpi_byte_writer_init (writer);
writer->parent.data = g_malloc0 (size); writer->parent.data = g_malloc (size);
writer->parent.size = size;
writer->alloc_size = size; writer->alloc_size = size;
writer->fixed = fixed; writer->fixed = fixed;
writer->owned = TRUE; writer->owned = TRUE;
@@ -211,9 +209,10 @@ fpi_byte_writer_reset_and_get_data (FpiByteWriter * writer)
g_return_val_if_fail (writer != NULL, NULL); g_return_val_if_fail (writer != NULL, NULL);
data = (guint8 *) g_steal_pointer (&writer->parent.data); data = (guint8 *) writer->parent.data;
if (!writer->owned) if (!writer->owned)
data = g_memdup2 (data, writer->parent.size); data = g_memdup2 (data, writer->parent.size);
writer->parent.data = NULL;
fpi_byte_writer_reset (writer); fpi_byte_writer_reset (writer);
return data; return data;
-14
View File
@@ -111,17 +111,6 @@ fpi_byte_writer_set_pos (FpiByteWriter *writer, guint pos)
return fpi_byte_reader_set_pos (FPI_BYTE_READER (writer), pos); return fpi_byte_reader_set_pos (FPI_BYTE_READER (writer), pos);
} }
static inline gboolean
fpi_byte_writer_change_pos (FpiByteWriter *writer, gint pos)
{
pos = fpi_byte_writer_get_pos (writer) + pos;
if (pos < 0)
return FALSE;
return fpi_byte_reader_set_pos (FPI_BYTE_READER (writer), pos);
}
static inline guint static inline guint
fpi_byte_writer_get_size (const FpiByteWriter *writer) fpi_byte_writer_get_size (const FpiByteWriter *writer)
{ {
@@ -418,7 +407,4 @@ fpi_byte_writer_fill_inline (FpiByteWriter * writer, guint8 value, guint size)
#endif #endif
G_DEFINE_AUTOPTR_CLEANUP_FUNC (FpiByteWriter, fpi_byte_writer_free);
G_DEFINE_AUTO_CLEANUP_CLEAR_FUNC (FpiByteWriter, fpi_byte_writer_reset);
G_END_DECLS G_END_DECLS
+15 -26
View File
@@ -117,10 +117,6 @@ fpi_device_retry_new (FpDeviceRetry error)
msg = "Please try again after removing the finger first."; msg = "Please try again after removing the finger first.";
break; break;
case FP_DEVICE_RETRY_TOO_FAST:
msg = "The swipe was too fast, please try again.";
break;
default: default:
g_warning ("Unsupported error, returning general error instead!"); g_warning ("Unsupported error, returning general error instead!");
error = FP_DEVICE_RETRY_GENERAL; error = FP_DEVICE_RETRY_GENERAL;
@@ -1046,6 +1042,8 @@ fp_device_task_return_in_idle_cb (gpointer user_data)
static void static void
fpi_device_task_return_data_free (FpDeviceTaskReturnData *data) fpi_device_task_return_data_free (FpDeviceTaskReturnData *data)
{ {
if (data->result)
{
switch (data->type) switch (data->type)
{ {
case FP_DEVICE_TASK_RETURN_INT: case FP_DEVICE_TASK_RETURN_INT:
@@ -1067,20 +1065,11 @@ fpi_device_task_return_data_free (FpDeviceTaskReturnData *data)
default: default:
g_assert_not_reached (); g_assert_not_reached ();
} }
}
g_object_unref (data->device); g_object_unref (data->device);
g_free (data); g_free (data);
} }
/**
* fpi_device_return_task_in_idle:
* @device: The #FpDevice
* @return_type: The #FpDeviceTaskReturnType of @return_data
* @return_data: (nullable) (transfer full): The data to return.
*
* Completes a #FpDevice task in an idle source, stealing the ownership of
* the passed @returned_data.
*/
static void static void
fpi_device_return_task_in_idle (FpDevice *device, fpi_device_return_task_in_idle (FpDevice *device,
FpDeviceTaskReturnType return_type, FpDeviceTaskReturnType return_type,
@@ -1112,7 +1101,7 @@ fpi_device_return_task_in_idle (FpDevice *device,
* @device: The #FpDevice * @device: The #FpDevice
* @device_id: Unique ID for the device or %NULL * @device_id: Unique ID for the device or %NULL
* @device_name: Human readable name or %NULL for driver name * @device_name: Human readable name or %NULL for driver name
* @error: (nullable) (transfer full): The #GError or %NULL on success * @error: The #GError or %NULL on success
* *
* Finish an ongoing probe operation. If error is %NULL success is assumed. * Finish an ongoing probe operation. If error is %NULL success is assumed.
*/ */
@@ -1158,7 +1147,7 @@ fpi_device_probe_complete (FpDevice *device,
/** /**
* fpi_device_open_complete: * fpi_device_open_complete:
* @device: The #FpDevice * @device: The #FpDevice
* @error: (nullable) (transfer full): The #GError or %NULL on success * @error: The #GError or %NULL on success
* *
* Finish an ongoing open operation. If error is %NULL success is assumed. * Finish an ongoing open operation. If error is %NULL success is assumed.
*/ */
@@ -1185,7 +1174,7 @@ fpi_device_open_complete (FpDevice *device, GError *error)
/** /**
* fpi_device_close_complete: * fpi_device_close_complete:
* @device: The #FpDevice * @device: The #FpDevice
* @error: (nullable) (transfer full): The #GError or %NULL on success * @error: The #GError or %NULL on success
* *
* Finish an ongoing close operation. If error is %NULL success is assumed. * Finish an ongoing close operation. If error is %NULL success is assumed.
*/ */
@@ -1237,7 +1226,7 @@ fpi_device_close_complete (FpDevice *device, GError *error)
* fpi_device_enroll_complete: * fpi_device_enroll_complete:
* @device: The #FpDevice * @device: The #FpDevice
* @print: (nullable) (transfer full): The #FpPrint or %NULL on failure * @print: (nullable) (transfer full): The #FpPrint or %NULL on failure
* @error: (nullable) (transfer full): The #GError or %NULL on success * @error: The #GError or %NULL on success
* *
* Finish an ongoing enroll operation. The #FpPrint can be stored by the * Finish an ongoing enroll operation. The #FpPrint can be stored by the
* caller for later verification. * caller for later verification.
@@ -1366,7 +1355,7 @@ fpi_device_verify_complete (FpDevice *device,
/** /**
* fpi_device_identify_complete: * fpi_device_identify_complete:
* @device: The #FpDevice * @device: The #FpDevice
* @error: (nullable) (transfer full): The #GError or %NULL on success * @error: The #GError or %NULL on success
* *
* Finish an ongoing identify operation. * Finish an ongoing identify operation.
* *
@@ -1432,7 +1421,7 @@ fpi_device_identify_complete (FpDevice *device,
* fpi_device_capture_complete: * fpi_device_capture_complete:
* @device: The #FpDevice * @device: The #FpDevice
* @image: The #FpImage, or %NULL on error * @image: The #FpImage, or %NULL on error
* @error: (nullable) (transfer full): The #GError or %NULL on success * @error: The #GError or %NULL on success
* *
* Finish an ongoing capture operation. * Finish an ongoing capture operation.
*/ */
@@ -1479,7 +1468,7 @@ fpi_device_capture_complete (FpDevice *device,
/** /**
* fpi_device_delete_complete: * fpi_device_delete_complete:
* @device: The #FpDevice * @device: The #FpDevice
* @error: (nullable) (transfer full): The #GError or %NULL on success * @error: The #GError or %NULL on success
* *
* Finish an ongoing delete operation. * Finish an ongoing delete operation.
*/ */
@@ -1508,7 +1497,7 @@ fpi_device_delete_complete (FpDevice *device,
* fpi_device_list_complete: * fpi_device_list_complete:
* @device: The #FpDevice * @device: The #FpDevice
* @prints: (element-type FpPrint) (transfer container): Possibly empty array of prints or %NULL on error * @prints: (element-type FpPrint) (transfer container): Possibly empty array of prints or %NULL on error
* @error: (nullable) (transfer full): The #GError or %NULL on success * @error: The #GError or %NULL on success
* *
* Finish an ongoing list operation. * Finish an ongoing list operation.
* *
@@ -1786,7 +1775,7 @@ fpi_device_suspend_completed (FpDevice *device)
/** /**
* fpi_device_suspend_complete: * fpi_device_suspend_complete:
* @device: The #FpDevice * @device: The #FpDevice
* @error: (nullable) (transfer full): The #GError or %NULL on success * @error: The #GError or %NULL on success
* *
* Finish a suspend request. Only return a %NULL error if suspend has been * Finish a suspend request. Only return a %NULL error if suspend has been
* correctly configured and the current action as returned by * correctly configured and the current action as returned by
@@ -1837,7 +1826,7 @@ fpi_device_suspend_complete (FpDevice *device,
/** /**
* fpi_device_resume_complete: * fpi_device_resume_complete:
* @device: The #FpDevice * @device: The #FpDevice
* @error: (nullable) (transfer full): The #GError or %NULL on success * @error: The #GError or %NULL on success
* *
* Finish a resume request. * Finish a resume request.
*/ */
@@ -1865,7 +1854,7 @@ fpi_device_resume_complete (FpDevice *device,
/** /**
* fpi_device_clear_storage_complete: * fpi_device_clear_storage_complete:
* @device: The #FpDevice * @device: The #FpDevice
* @error: (nullable) (transfer full): The #GError or %NULL on success * @error: The #GError or %NULL on success
* *
* Finish an ongoing clear_storage operation. * Finish an ongoing clear_storage operation.
*/ */
@@ -1896,7 +1885,7 @@ fpi_device_clear_storage_complete (FpDevice *device,
* @device: The #FpDevice * @device: The #FpDevice
* @completed_stages: The number of stages that are completed at this point * @completed_stages: The number of stages that are completed at this point
* @print: (transfer floating): The #FpPrint for the newly completed stage or %NULL on failure * @print: (transfer floating): The #FpPrint for the newly completed stage or %NULL on failure
* @error: (nullable) (transfer full): The #GError or %NULL on success * @error: (transfer full): The #GError or %NULL on success
* *
* Notify about the progress of the enroll operation. This is important for UI interaction. * Notify about the progress of the enroll operation. This is important for UI interaction.
* The passed error may be used if a scan needs to be retried, use fpi_device_retry_new(). * The passed error may be used if a scan needs to be retried, use fpi_device_retry_new().
+30 -7
View File
@@ -23,6 +23,7 @@
#include "fp-device.h" #include "fp-device.h"
#include "fp-image.h" #include "fp-image.h"
#include "fpi-print.h" #include "fpi-print.h"
#include "tod/tod-macros.h"
/** /**
* FpiDeviceUdevSubtypeFlags: * FpiDeviceUdevSubtypeFlags:
@@ -55,6 +56,12 @@ struct _FpIdEntry
guint vid; guint vid;
}; };
const gchar *virtual_envvar; const gchar *virtual_envvar;
};
guint64 driver_data;
/* Elements added after TODv1 */
union
{
struct struct
{ {
FpiDeviceUdevSubtypeFlags udev_types; FpiDeviceUdevSubtypeFlags udev_types;
@@ -66,7 +73,13 @@ struct _FpIdEntry
} hid_id; } hid_id;
}; };
}; };
guint64 driver_data;
/*< private >*/
/* padding for future expansion */
TOD_PADDING_ALIGNED (16,
sizeof (guint) * 2 +
sizeof (FpiDeviceUdevSubtypeFlags) +
sizeof (gpointer));
}; };
/** /**
@@ -147,16 +160,11 @@ struct _FpDeviceClass
const gchar *full_name; const gchar *full_name;
FpDeviceType type; FpDeviceType type;
const FpIdEntry *id_table; const FpIdEntry *id_table;
FpDeviceFeature features;
/* Defaults for device properties */ /* Defaults for device properties */
gint nr_enroll_stages; gint nr_enroll_stages;
FpScanType scan_type; FpScanType scan_type;
/* Simple device temperature model constants */
gint32 temp_hot_seconds;
gint32 temp_cold_seconds;
/* Callbacks */ /* Callbacks */
gint (*usb_discover) (GUsbDevice *usb_device); gint (*usb_discover) (GUsbDevice *usb_device);
void (*probe) (FpDevice *device); void (*probe) (FpDevice *device);
@@ -168,11 +176,26 @@ struct _FpDeviceClass
void (*capture) (FpDevice *device); void (*capture) (FpDevice *device);
void (*list) (FpDevice *device); void (*list) (FpDevice *device);
void (*delete) (FpDevice * device); void (*delete) (FpDevice * device);
void (*clear_storage) (FpDevice * device);
void (*cancel) (FpDevice *device); void (*cancel) (FpDevice *device);
/* Class elements added after tod-v1 */
FpDeviceFeature features;
/* Simple device temperature model constants */
gint32 temp_hot_seconds;
gint32 temp_cold_seconds;
void (*clear_storage) (FpDevice * device);
void (*suspend) (FpDevice *device); void (*suspend) (FpDevice *device);
void (*resume) (FpDevice *device); void (*resume) (FpDevice *device);
/*< private >*/
/* padding for future expansion */
TOD_PADDING_ALIGNED8 (32,
sizeof (FpDeviceFeature) +
sizeof (gint32) * 2 +
sizeof (gpointer) * 3);
}; };
void fpi_device_class_auto_initialize_features (FpDeviceClass *device_class); void fpi_device_class_auto_initialize_features (FpDeviceClass *device_class);
+5 -5
View File
@@ -565,7 +565,7 @@ fpi_image_device_retry_scan (FpImageDevice *self, FpDeviceRetry retry)
/** /**
* fpi_image_device_session_error: * fpi_image_device_session_error:
* @self: a #FpImageDevice imaging fingerprint device * @self: a #FpImageDevice imaging fingerprint device
* @error: (nullable) (transfer full): The #GError to report. * @error: The #GError to report
* *
* Report an error while interacting with the device. This effectively * Report an error while interacting with the device. This effectively
* aborts the current ongoing action. Note that doing so will result in * aborts the current ongoing action. Note that doing so will result in
@@ -624,7 +624,7 @@ fpi_image_device_session_error (FpImageDevice *self, GError *error)
/** /**
* fpi_image_device_activate_complete: * fpi_image_device_activate_complete:
* @self: a #FpImageDevice imaging fingerprint device * @self: a #FpImageDevice imaging fingerprint device
* @error: (nullable) (transfer full): The #GError or %NULL on success * @error: A #GError or %NULL on success
* *
* Reports completion of device activation. * Reports completion of device activation.
*/ */
@@ -663,7 +663,7 @@ fpi_image_device_activate_complete (FpImageDevice *self, GError *error)
/** /**
* fpi_image_device_deactivate_complete: * fpi_image_device_deactivate_complete:
* @self: a #FpImageDevice imaging fingerprint device * @self: a #FpImageDevice imaging fingerprint device
* @error: (nullable) (transfer full): The #GError or %NULL on success * @error: A #GError or %NULL on success
* *
* Reports completion of device deactivation. * Reports completion of device deactivation.
*/ */
@@ -690,7 +690,7 @@ fpi_image_device_deactivate_complete (FpImageDevice *self, GError *error)
/** /**
* fpi_image_device_open_complete: * fpi_image_device_open_complete:
* @self: a #FpImageDevice imaging fingerprint device * @self: a #FpImageDevice imaging fingerprint device
* @error: (nullable) (transfer full): The #GError or %NULL on success * @error: A #GError or %NULL on success
* *
* Reports completion of open operation. * Reports completion of open operation.
*/ */
@@ -718,7 +718,7 @@ fpi_image_device_open_complete (FpImageDevice *self, GError *error)
/** /**
* fpi_image_device_close_complete: * fpi_image_device_close_complete:
* @self: a #FpImageDevice imaging fingerprint device * @self: a #FpImageDevice imaging fingerprint device
* @error: (nullable) (transfer full): The #GError or %NULL on success * @error: A #GError or %NULL on success
* *
* Reports completion of close operation. * Reports completion of close operation.
*/ */
+7 -3
View File
@@ -62,12 +62,12 @@
*/ */
typedef enum { typedef enum {
FPI_IMAGE_DEVICE_STATE_INACTIVE, FPI_IMAGE_DEVICE_STATE_INACTIVE,
FPI_IMAGE_DEVICE_STATE_ACTIVATING,
FPI_IMAGE_DEVICE_STATE_DEACTIVATING,
FPI_IMAGE_DEVICE_STATE_IDLE,
FPI_IMAGE_DEVICE_STATE_AWAIT_FINGER_ON, FPI_IMAGE_DEVICE_STATE_AWAIT_FINGER_ON,
FPI_IMAGE_DEVICE_STATE_CAPTURE, FPI_IMAGE_DEVICE_STATE_CAPTURE,
FPI_IMAGE_DEVICE_STATE_AWAIT_FINGER_OFF, FPI_IMAGE_DEVICE_STATE_AWAIT_FINGER_OFF,
FPI_IMAGE_DEVICE_STATE_ACTIVATING,
FPI_IMAGE_DEVICE_STATE_DEACTIVATING,
FPI_IMAGE_DEVICE_STATE_IDLE,
} FpiImageDeviceState; } FpiImageDeviceState;
/** /**
@@ -114,6 +114,10 @@ struct _FpImageDeviceClass
void (*change_state) (FpImageDevice *dev, void (*change_state) (FpImageDevice *dev,
FpiImageDeviceState state); FpiImageDeviceState state);
void (*deactivate) (FpImageDevice *dev); void (*deactivate) (FpImageDevice *dev);
/*< private >*/
/* padding for future expansion */
TOD_PADDING (32, 0);
}; };
void fpi_image_device_set_bz3_threshold (FpImageDevice *self, void fpi_image_device_set_bz3_threshold (FpImageDevice *self,
+6
View File
@@ -21,9 +21,11 @@
#pragma once #pragma once
#include "fp-image.h" #include "fp-image.h"
#include "tod/tod-macros.h"
/** /**
* FpiImageFlags: * FpiImageFlags:
* @FPI_IMAGE_NONE: no flag set
* @FPI_IMAGE_V_FLIPPED: the image is vertically flipped * @FPI_IMAGE_V_FLIPPED: the image is vertically flipped
* @FPI_IMAGE_H_FLIPPED: the image is horizontally flipped * @FPI_IMAGE_H_FLIPPED: the image is horizontally flipped
* @FPI_IMAGE_COLORS_INVERTED: the colours are inverted * @FPI_IMAGE_COLORS_INVERTED: the colours are inverted
@@ -68,8 +70,12 @@ struct _FpImage
guint8 *binarized; guint8 *binarized;
GPtrArray *minutiae; GPtrArray *minutiae;
/* Unused */
guint ref_count;
gboolean detection_in_progress; gboolean detection_in_progress;
TOD_PADDING (32, sizeof (gboolean));
}; };
gint fpi_std_sq_dev (const guint8 *buf, gint fpi_std_sq_dev (const guint8 *buf,
+3 -6
View File
@@ -79,16 +79,13 @@
* *
* Uses fp_err() to print an error if the @condition is true. * Uses fp_err() to print an error if the @condition is true.
*/ */
#define BUG_ON(condition) \ #define BUG_ON(condition) G_STMT_START \
G_STMT_START \ if (condition) { \
if (condition) \
{ \
char *s; \ char *s; \
s = g_strconcat ("BUG: (", #condition, ")", NULL); \ s = g_strconcat ("BUG: (", #condition, ")", NULL); \
fp_err ("%s: %s() %s:%d", s, G_STRFUNC, __FILE__, __LINE__); \ fp_err ("%s: %s() %s:%d", s, G_STRFUNC, __FILE__, __LINE__); \
g_free (s); \ g_free (s); \
} \ } G_STMT_END
G_STMT_END
/** /**
* BUG: * BUG:
+3
View File
@@ -73,6 +73,9 @@ struct _FpiSpiTransfer
/* Data free function */ /* Data free function */
GDestroyNotify free_buffer_wr; GDestroyNotify free_buffer_wr;
GDestroyNotify free_buffer_rd; GDestroyNotify free_buffer_rd;
/* padding for future expansion */
TOD_PADDING (32, 0);
}; };
GType fpi_spi_transfer_get_type (void) G_GNUC_CONST; GType fpi_spi_transfer_get_type (void) G_GNUC_CONST;
+4
View File
@@ -765,3 +765,7 @@ fpi_ssm_spi_transfer_with_weak_pointer_cb (FpiSpiTransfer *transfer,
fpi_ssm_spi_transfer_cb (transfer, device, weak_ptr, error); fpi_ssm_spi_transfer_cb (transfer, device, weak_ptr, error);
} }
#ifdef TOD_LIBRARY
#include "tod/tod-fpi-ssm.c"
#endif
+3
View File
@@ -102,6 +102,9 @@ struct _FpiUsbTransfer
/* Data free function */ /* Data free function */
GDestroyNotify free_buffer; GDestroyNotify free_buffer;
/* padding for future expansion */
TOD_PADDING (32, 0);
}; };
GType fpi_usb_transfer_get_type (void) G_GNUC_CONST; GType fpi_usb_transfer_get_type (void) G_GNUC_CONST;
-107
View File
@@ -1,107 +0,0 @@
/*
* Copyright (C) 2025 Marco Trevisan <marco.trevisan@canonical.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "glib.h"
#include "fpi-context.h"
#include "fpi-device.h"
#define METAINFO_BASE \
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" \
"<component>\n" \
" <id>org.freedesktop.libfprint</id>\n" \
" <name>libfprint</name>\n" \
" <metadata_license>CC0-1.0</metadata_license>\n" \
" <project_license>LGPL-2.1-or-later</project_license>\n" \
" <url type=\"homepage\">https://fprint.freedesktop.org</url>\n" \
" <url type=\"vcs-browser\">https://gitlab.freedesktop.org/libfprint/libfprint</url>\n" \
" <url type=\"help\">https://fprint.freedesktop.org/libfprint-dev</url>\n" \
" <url type=\"bugtracker\">https://gitlab.freedesktop.org/libfprint/libfprint/-/issues</url>\n" \
" <summary>Async fingerprint readers library</summary>\n" \
" <description>\n" \
" <p>\n" \
" The fprint project aims to support for consumer fingerprint reader devices.\n" \
" </p>\n" \
" </description>\n" \
" <provides>\n" \
"%s\n" \
" </provides>\n" \
"</component>\n"
static int
driver_compare (gconstpointer p1, gconstpointer p2)
{
g_autoptr(FpDeviceClass) cls1 = g_type_class_ref (*(GType *) p1);
g_autoptr(FpDeviceClass) cls2 = g_type_class_ref (*(GType *) p2);
return g_strcmp0 (cls1->id, cls2->id);
}
static void
usb_driver_devices_append (GPtrArray *devices_list,
const FpDeviceClass *cls)
{
const FpIdEntry *entry;
if (cls->type != FP_DEVICE_TYPE_USB)
return;
for (entry = cls->id_table; entry->vid != 0; entry++)
{
if (entry->vid == 0 || entry->pid == 0)
continue;
g_ptr_array_add (devices_list,
g_strdup_printf ("v%04xp%04x", entry->vid, entry->pid));
}
}
int
main (void)
{
g_autoptr(GPtrArray) devices_list = g_ptr_array_new_with_free_func (g_free);
g_autoptr(GArray) drivers = fpi_get_driver_types ();
g_autoptr(GString) provided_modules = g_string_new (NULL);
g_autoptr(GError) error = NULL;
g_array_sort (drivers, driver_compare);
for (guint i = 0; i < drivers->len; ++i)
{
GType driver = g_array_index (drivers, GType, i);
g_autoptr(FpDeviceClass) cls = g_type_class_ref (driver);
if (cls->type != FP_DEVICE_TYPE_USB)
continue;
usb_driver_devices_append (devices_list, cls);
}
for (guint i = 0; i < devices_list->len; ++i)
{
const char *device_id = g_ptr_array_index (devices_list, i);
g_string_append (provided_modules, " ");
g_string_append_printf (provided_modules, "<modalias>usb:%s*</modalias>",
device_id);
if (i < devices_list->len - 1)
g_string_append_c (provided_modules, '\n');
}
g_print (METAINFO_BASE, provided_modules->str);
}
+2 -30
View File
@@ -29,10 +29,7 @@ static const FpIdEntry allowlist_id_table[] = {
* You can generate this list from the wiki page using e.g.: * You can generate this list from the wiki page using e.g.:
* gio cat https://gitlab.freedesktop.org/libfprint/wiki/-/wikis/Unsupported-Devices.md | sed -n 's!|.*\([0-9a-fA-F]\{4\}\):\([0-9a-fA-F]\{4\}\).*|.*! { .vid = 0x\1, .pid = 0x\2 },!p' * gio cat https://gitlab.freedesktop.org/libfprint/wiki/-/wikis/Unsupported-Devices.md | sed -n 's!|.*\([0-9a-fA-F]\{4\}\):\([0-9a-fA-F]\{4\}\).*|.*! { .vid = 0x\1, .pid = 0x\2 },!p'
*/ */
{ .vid = 0x0a5c, .pid = 0x5802 },
{ .vid = 0x047d, .pid = 0x00f2 }, { .vid = 0x047d, .pid = 0x00f2 },
{ .vid = 0x047d, .pid = 0x8054 },
{ .vid = 0x047d, .pid = 0x8055 },
{ .vid = 0x04e8, .pid = 0x730b }, { .vid = 0x04e8, .pid = 0x730b },
{ .vid = 0x04f3, .pid = 0x036b }, { .vid = 0x04f3, .pid = 0x036b },
{ .vid = 0x04f3, .pid = 0x0c00 }, { .vid = 0x04f3, .pid = 0x0c00 },
@@ -40,25 +37,16 @@ static const FpIdEntry allowlist_id_table[] = {
{ .vid = 0x04f3, .pid = 0x0c57 }, { .vid = 0x04f3, .pid = 0x0c57 },
{ .vid = 0x04f3, .pid = 0x0c5e }, { .vid = 0x04f3, .pid = 0x0c5e },
{ .vid = 0x04f3, .pid = 0x0c5a }, { .vid = 0x04f3, .pid = 0x0c5a },
{ .vid = 0x04f3, .pid = 0x0c60 },
{ .vid = 0x04f3, .pid = 0x0c6c }, { .vid = 0x04f3, .pid = 0x0c6c },
{ .vid = 0x04f3, .pid = 0x0c70 }, { .vid = 0x04f3, .pid = 0x0c70 },
{ .vid = 0x04f3, .pid = 0x0c72 }, { .vid = 0x04f3, .pid = 0x0c72 },
{ .vid = 0x04f3, .pid = 0x0c77 }, { .vid = 0x04f3, .pid = 0x0c77 },
{ .vid = 0x04f3, .pid = 0x0c7c },
{ .vid = 0x04f3, .pid = 0x0c7f },
{ .vid = 0x04f3, .pid = 0x0c80 },
{ .vid = 0x04f3, .pid = 0x0c85 },
{ .vid = 0x04f3, .pid = 0x0c90 },
{ .vid = 0x04f3, .pid = 0x2706 }, { .vid = 0x04f3, .pid = 0x2706 },
{ .vid = 0x04f3, .pid = 0x3032 }, { .vid = 0x04f3, .pid = 0x3032 },
{ .vid = 0x04f3, .pid = 0x3057 }, { .vid = 0x04f3, .pid = 0x3057 },
{ .vid = 0x04f3, .pid = 0x3104 }, { .vid = 0x04f3, .pid = 0x3104 },
{ .vid = 0x04f3, .pid = 0x310d }, { .vid = 0x04f3, .pid = 0x310d },
{ .vid = 0x04f3, .pid = 0x3128 }, { .vid = 0x04f3, .pid = 0x3128 },
{ .vid = 0x04f3, .pid = 0x0c8a },
{ .vid = 0x05ba, .pid = 0x000e },
{ .vid = 0x06cb, .pid = 0x0051 },
{ .vid = 0x06cb, .pid = 0x0081 }, { .vid = 0x06cb, .pid = 0x0081 },
{ .vid = 0x06cb, .pid = 0x0088 }, { .vid = 0x06cb, .pid = 0x0088 },
{ .vid = 0x06cb, .pid = 0x008a }, { .vid = 0x06cb, .pid = 0x008a },
@@ -69,6 +57,7 @@ static const FpIdEntry allowlist_id_table[] = {
{ .vid = 0x06cb, .pid = 0x00b7 }, { .vid = 0x06cb, .pid = 0x00b7 },
{ .vid = 0x06cb, .pid = 0x00bb }, { .vid = 0x06cb, .pid = 0x00bb },
{ .vid = 0x06cb, .pid = 0x00be }, { .vid = 0x06cb, .pid = 0x00be },
{ .vid = 0x06cb, .pid = 0x00c4 },
{ .vid = 0x06cb, .pid = 0x00cb }, { .vid = 0x06cb, .pid = 0x00cb },
{ .vid = 0x06cb, .pid = 0x00c9 }, { .vid = 0x06cb, .pid = 0x00c9 },
{ .vid = 0x06cb, .pid = 0x00d8 }, { .vid = 0x06cb, .pid = 0x00d8 },
@@ -76,8 +65,8 @@ static const FpIdEntry allowlist_id_table[] = {
{ .vid = 0x06cb, .pid = 0x00dc }, { .vid = 0x06cb, .pid = 0x00dc },
{ .vid = 0x06cb, .pid = 0x00e4 }, { .vid = 0x06cb, .pid = 0x00e4 },
{ .vid = 0x06cb, .pid = 0x00e7 }, { .vid = 0x06cb, .pid = 0x00e7 },
{ .vid = 0x06cb, .pid = 0x00e9 },
{ .vid = 0x06cb, .pid = 0x00fd }, { .vid = 0x06cb, .pid = 0x00fd },
{ .vid = 0x06cb, .pid = 0x00ff },
{ .vid = 0x0a5c, .pid = 0x5801 }, { .vid = 0x0a5c, .pid = 0x5801 },
{ .vid = 0x0a5c, .pid = 0x5805 }, { .vid = 0x0a5c, .pid = 0x5805 },
{ .vid = 0x0a5c, .pid = 0x5834 }, { .vid = 0x0a5c, .pid = 0x5834 },
@@ -87,18 +76,10 @@ static const FpIdEntry allowlist_id_table[] = {
{ .vid = 0x0a5c, .pid = 0x5843 }, { .vid = 0x0a5c, .pid = 0x5843 },
{ .vid = 0x0a5c, .pid = 0x5844 }, { .vid = 0x0a5c, .pid = 0x5844 },
{ .vid = 0x0a5c, .pid = 0x5845 }, { .vid = 0x0a5c, .pid = 0x5845 },
{ .vid = 0x0a5c, .pid = 0x5860 },
{ .vid = 0x0a5c, .pid = 0x5863 },
{ .vid = 0x0a5c, .pid = 0x5864 },
{ .vid = 0x0a5c, .pid = 0x5865 },
{ .vid = 0x0a5c, .pid = 0x5866 },
{ .vid = 0x0a5c, .pid = 0x5867 },
{ .vid = 0x0bda, .pid = 0x5812 }, { .vid = 0x0bda, .pid = 0x5812 },
{ .vid = 0x10a5, .pid = 0x0007 }, { .vid = 0x10a5, .pid = 0x0007 },
{ .vid = 0x10a5, .pid = 0x9200 }, { .vid = 0x10a5, .pid = 0x9200 },
{ .vid = 0x10a5, .pid = 0x9800 }, { .vid = 0x10a5, .pid = 0x9800 },
{ .vid = 0x10a5, .pid = 0xa120 },
{ .vid = 0x10a5, .pid = 0xa900 },
{ .vid = 0x10a5, .pid = 0xe340 }, { .vid = 0x10a5, .pid = 0xe340 },
{ .vid = 0x1188, .pid = 0x9545 }, { .vid = 0x1188, .pid = 0x9545 },
{ .vid = 0x138a, .pid = 0x0007 }, { .vid = 0x138a, .pid = 0x0007 },
@@ -120,9 +101,6 @@ static const FpIdEntry allowlist_id_table[] = {
{ .vid = 0x1c7a, .pid = 0x0575 }, { .vid = 0x1c7a, .pid = 0x0575 },
{ .vid = 0x1c7a, .pid = 0x0576 }, { .vid = 0x1c7a, .pid = 0x0576 },
{ .vid = 0x1c7a, .pid = 0x0577 }, { .vid = 0x1c7a, .pid = 0x0577 },
{ .vid = 0x1c7a, .pid = 0x057e },
{ .vid = 0x2541, .pid = 0x0236 },
{ .vid = 0x2541, .pid = 0x9711 },
{ .vid = 0x27c6, .pid = 0x5042 }, { .vid = 0x27c6, .pid = 0x5042 },
{ .vid = 0x27c6, .pid = 0x5110 }, { .vid = 0x27c6, .pid = 0x5110 },
{ .vid = 0x27c6, .pid = 0x5117 }, { .vid = 0x27c6, .pid = 0x5117 },
@@ -151,17 +129,11 @@ static const FpIdEntry allowlist_id_table[] = {
{ .vid = 0x27c6, .pid = 0x5e0a }, { .vid = 0x27c6, .pid = 0x5e0a },
{ .vid = 0x27c6, .pid = 0x581a }, { .vid = 0x27c6, .pid = 0x581a },
{ .vid = 0x27c6, .pid = 0x589a }, { .vid = 0x27c6, .pid = 0x589a },
{ .vid = 0x27c6, .pid = 0x5f10 },
{ .vid = 0x27c6, .pid = 0x6382 }, { .vid = 0x27c6, .pid = 0x6382 },
{ .vid = 0x2808, .pid = 0x9338 }, { .vid = 0x2808, .pid = 0x9338 },
{ .vid = 0x2808, .pid = 0x9348 },
{ .vid = 0x2808, .pid = 0x93a9 }, { .vid = 0x2808, .pid = 0x93a9 },
{ .vid = 0x2808, .pid = 0xa658 },
{ .vid = 0x2808, .pid = 0xc652 },
{ .vid = 0x298d, .pid = 0x2020 }, { .vid = 0x298d, .pid = 0x2020 },
{ .vid = 0x298d, .pid = 0x2033 }, { .vid = 0x298d, .pid = 0x2033 },
{ .vid = 0x2df0, .pid = 0x0003 },
{ .vid = 0x3274, .pid = 0x8012 },
{ .vid = 0x3538, .pid = 0x0930 }, { .vid = 0x3538, .pid = 0x0930 },
{ .vid = 0 }, { .vid = 0 },
}; };
+11 -34
View File
@@ -1,11 +1,3 @@
spi_sources = []
spi_headers = []
if enabled_spi_drivers.length() > 0
spi_headers = ['fpi-spi-transfer.h']
spi_sources = ['fpi-spi-transfer.c']
endif
libfprint_sources = [ libfprint_sources = [
'fp-context.c', 'fp-context.c',
'fp-device.c', 'fp-device.c',
@@ -24,7 +16,8 @@ libfprint_private_sources = [
'fpi-print.c', 'fpi-print.c',
'fpi-ssm.c', 'fpi-ssm.c',
'fpi-usb-transfer.c', 'fpi-usb-transfer.c',
] + spi_sources 'fpi-spi-transfer.c',
]
libfprint_public_headers = [ libfprint_public_headers = [
'fp-context.h', 'fp-context.h',
@@ -48,8 +41,9 @@ libfprint_private_headers = [
'fpi-minutiae.h', 'fpi-minutiae.h',
'fpi-print.h', 'fpi-print.h',
'fpi-usb-transfer.h', 'fpi-usb-transfer.h',
'fpi-spi-transfer.h',
'fpi-ssm.h', 'fpi-ssm.h',
] + spi_headers ]
nbis_sources = [ nbis_sources = [
'nbis/bozorth3/bozorth3.c', 'nbis/bozorth3/bozorth3.c',
@@ -162,7 +156,7 @@ helper_sources = {
[ 'drivers/aesx660.c' ], [ 'drivers/aesx660.c' ],
'aes3k' : 'aes3k' :
[ 'drivers/aes3k.c' ], [ 'drivers/aes3k.c' ],
'openssl' : 'nss' :
[ ], [ ],
'udev' : 'udev' :
[ ], [ ],
@@ -267,6 +261,10 @@ libfprint_private = static_library('fprint-private',
link_with: libnbis, link_with: libnbis,
install: false) install: false)
if get_option('tod')
subdir('tod')
endif
libfprint_drivers = static_library('fprint-drivers', libfprint_drivers = static_library('fprint-drivers',
sources: drivers_sources, sources: drivers_sources,
c_args: drivers_cflags, c_args: drivers_cflags,
@@ -274,13 +272,8 @@ libfprint_drivers = static_library('fprint-drivers',
link_with: libfprint_private, link_with: libfprint_private,
install: false) install: false)
mapfile = files('libfprint.ver')[0] mapfile = files('libfprint.ver')
if meson.version().version_compare('>=1.4') vflag = '-Wl,--version-script,@0@/@1@'.format(meson.project_source_root(), mapfile[0])
mapfile_path = mapfile.full_path()
else
mapfile_path = meson.project_source_root() / '@0@'.format(mapfile)
endif
vflag = '-Wl,--version-script,@0@'.format(mapfile_path)
libfprint = shared_library(versioned_libname.split('lib')[1], libfprint = shared_library(versioned_libname.split('lib')[1],
sources: [ sources: [
@@ -332,21 +325,6 @@ udev_hwdb_generator = custom_target('udev-hwdb',
install: false, install: false,
) )
metainfo = executable('fprint-list-metainfo',
'fprint-list-metainfo.c',
dependencies: libfprint_private_dep,
link_with: libfprint_drivers,
install: false)
metainfo_generator = custom_target('metainfo',
output: 'org.freedesktop.libfprint.metainfo.xml',
depend_files: drivers_sources,
capture: true,
command: [ metainfo ],
install: true,
install_dir: datadir / 'metainfo'
)
if install_udev_rules if install_udev_rules
udev_rules = executable('fprint-list-udev-rules', udev_rules = executable('fprint-list-udev-rules',
'fprint-list-udev-rules.c', 'fprint-list-udev-rules.c',
@@ -410,7 +388,6 @@ if get_option('introspection')
'GObject-2.0', 'GObject-2.0',
'GUsb-1.0', 'GUsb-1.0',
], ],
fatal_warnings: true,
install : true) install : true)
libfprint_gir = libfprint_girtarget[0] libfprint_gir = libfprint_girtarget[0]
libfprint_typelib = libfprint_girtarget[1] libfprint_typelib = libfprint_girtarget[1]
+251
View File
@@ -0,0 +1,251 @@
LIBFPRINT_TOD_@tod_soversion@.0.0 {
global:
fpi_assemble_frames;
fpi_assemble_lines;
fpi_byte_reader_dup_data;
fpi_byte_reader_dup_string_utf16;
fpi_byte_reader_dup_string_utf32;
fpi_byte_reader_dup_string_utf8;
fpi_byte_reader_free;
fpi_byte_reader_get_data;
fpi_byte_reader_get_float32_be;
fpi_byte_reader_get_float32_le;
fpi_byte_reader_get_float64_be;
fpi_byte_reader_get_float64_le;
fpi_byte_reader_get_int16_be;
fpi_byte_reader_get_int16_le;
fpi_byte_reader_get_int24_be;
fpi_byte_reader_get_int24_le;
fpi_byte_reader_get_int32_be;
fpi_byte_reader_get_int32_le;
fpi_byte_reader_get_int64_be;
fpi_byte_reader_get_int64_le;
fpi_byte_reader_get_int8;
fpi_byte_reader_get_pos;
fpi_byte_reader_get_remaining;
fpi_byte_reader_get_size;
fpi_byte_reader_get_string_utf8;
fpi_byte_reader_get_sub_reader;
fpi_byte_reader_get_uint16_be;
fpi_byte_reader_get_uint16_le;
fpi_byte_reader_get_uint24_be;
fpi_byte_reader_get_uint24_le;
fpi_byte_reader_get_uint32_be;
fpi_byte_reader_get_uint32_le;
fpi_byte_reader_get_uint64_be;
fpi_byte_reader_get_uint64_le;
fpi_byte_reader_get_uint8;
fpi_byte_reader_init;
fpi_byte_reader_masked_scan_uint32;
fpi_byte_reader_masked_scan_uint32_peek;
fpi_byte_reader_new;
fpi_byte_reader_peek_data;
fpi_byte_reader_peek_float32_be;
fpi_byte_reader_peek_float32_le;
fpi_byte_reader_peek_float64_be;
fpi_byte_reader_peek_float64_le;
fpi_byte_reader_peek_int16_be;
fpi_byte_reader_peek_int16_le;
fpi_byte_reader_peek_int24_be;
fpi_byte_reader_peek_int24_le;
fpi_byte_reader_peek_int32_be;
fpi_byte_reader_peek_int32_le;
fpi_byte_reader_peek_int64_be;
fpi_byte_reader_peek_int64_le;
fpi_byte_reader_peek_int8;
fpi_byte_reader_peek_string_utf8;
fpi_byte_reader_peek_sub_reader;
fpi_byte_reader_peek_uint16_be;
fpi_byte_reader_peek_uint16_le;
fpi_byte_reader_peek_uint24_be;
fpi_byte_reader_peek_uint24_le;
fpi_byte_reader_peek_uint32_be;
fpi_byte_reader_peek_uint32_le;
fpi_byte_reader_peek_uint64_be;
fpi_byte_reader_peek_uint64_le;
fpi_byte_reader_peek_uint8;
fpi_byte_reader_set_pos;
fpi_byte_reader_skip;
fpi_byte_reader_skip_string_utf16;
fpi_byte_reader_skip_string_utf32;
fpi_byte_reader_skip_string_utf8;
fpi_byte_writer_ensure_free_space;
fpi_byte_writer_fill;
fpi_byte_writer_free;
fpi_byte_writer_free_and_get_data;
fpi_byte_writer_get_remaining;
fpi_byte_writer_init;
fpi_byte_writer_init_with_data;
fpi_byte_writer_init_with_size;
fpi_byte_writer_new;
fpi_byte_writer_new_with_data;
fpi_byte_writer_new_with_size;
fpi_byte_writer_put_data;
fpi_byte_writer_put_float32_be;
fpi_byte_writer_put_float32_le;
fpi_byte_writer_put_float64_be;
fpi_byte_writer_put_float64_le;
fpi_byte_writer_put_int16_be;
fpi_byte_writer_put_int16_le;
fpi_byte_writer_put_int24_be;
fpi_byte_writer_put_int24_le;
fpi_byte_writer_put_int32_be;
fpi_byte_writer_put_int32_le;
fpi_byte_writer_put_int64_be;
fpi_byte_writer_put_int64_le;
fpi_byte_writer_put_int8;
fpi_byte_writer_put_string_utf16;
fpi_byte_writer_put_string_utf32;
fpi_byte_writer_put_string_utf8;
fpi_byte_writer_put_uint16_be;
fpi_byte_writer_put_uint16_le;
fpi_byte_writer_put_uint24_be;
fpi_byte_writer_put_uint24_le;
fpi_byte_writer_put_uint32_be;
fpi_byte_writer_put_uint32_le;
fpi_byte_writer_put_uint64_be;
fpi_byte_writer_put_uint64_le;
fpi_byte_writer_put_uint8;
fpi_byte_writer_reset;
fpi_byte_writer_reset_and_get_data;
fpi_device_action_error;
fpi_device_action_get_type;
fpi_device_action_is_cancelled;
fpi_device_add_timeout;
fpi_device_capture_complete;
fpi_device_close_complete;
fpi_device_configure_wakeup;
fpi_device_delete_complete;
fpi_device_enroll_complete;
fpi_device_enroll_progress;
fpi_device_error_new;
fpi_device_error_new_msg;
fpi_device_get_cancellable;
fpi_device_get_capture_data;
fpi_device_get_current_action;
fpi_device_get_delete_data;
fpi_device_get_driver_data;
fpi_device_get_enroll_data;
fpi_device_get_identify_data;
fpi_device_get_usb_device;
fpi_device_get_verify_data;
fpi_device_get_virtual_env;
fpi_device_identify_complete;
fpi_device_identify_report;
fpi_device_list_complete;
fpi_device_open_complete;
fpi_device_probe_complete;
fpi_device_remove;
fpi_device_report_finger_status;
fpi_device_report_finger_status_changes;
fpi_device_retry_new;
fpi_device_retry_new_msg;
fpi_device_set_nr_enroll_stages;
fpi_device_set_scan_type;
fpi_device_udev_subtype_flags_get_type;
fpi_device_update_temp;
fpi_device_verify_complete;
fpi_device_verify_report;
fpi_do_movement_estimation;
fpi_image_device_activate;
fpi_image_device_activate_complete;
fpi_image_device_close_complete;
fpi_image_device_deactivate;
fpi_image_device_deactivate_complete;
fpi_image_device_image_captured;
fpi_image_device_open_complete;
fpi_image_device_report_finger_status;
fpi_image_device_retry_scan;
fpi_image_device_session_error;
fpi_image_device_set_bz3_threshold;
fpi_image_device_state_get_type;
fpi_image_flags_get_type;
fpi_image_resize;
fpi_match_result_get_type;
fpi_mean_sq_diff_norm;
fpi_print_add_from_image;
fpi_print_add_print;
fpi_print_bz3_match;
fpi_print_fill_from_user_id;
fpi_print_generate_user_id;
fpi_print_set_device_stored;
fpi_print_set_type;
fpi_print_type_get_type;
fpi_ssm_cancel_delayed_state_change;
fpi_ssm_dup_error;
fpi_ssm_free;
fpi_ssm_get_cur_state;
fpi_ssm_get_data;
fpi_ssm_get_error;
fpi_ssm_jump_to_state;
fpi_ssm_jump_to_state_delayed;
fpi_ssm_jump_to_state_delayed_1_90;
fpi_ssm_mark_completed;
fpi_ssm_mark_completed_delayed;
fpi_ssm_mark_completed_delayed_1_90;
fpi_ssm_mark_failed;
fpi_ssm_new_full;
fpi_ssm_new_full_1_90;
fpi_ssm_next_state;
fpi_ssm_next_state_delayed;
fpi_ssm_next_state_delayed_1_90;
fpi_ssm_set_data;
fpi_ssm_start;
fpi_ssm_start_subsm;
fpi_ssm_usb_transfer_cb;
fpi_ssm_usb_transfer_with_weak_pointer_cb;
fpi_std_sq_dev;
fpi_transfer_type_get_type;
fpi_usb_transfer_fill_bulk;
fpi_usb_transfer_fill_bulk_full;
fpi_usb_transfer_fill_control;
fpi_usb_transfer_fill_interrupt;
fpi_usb_transfer_fill_interrupt_full;
fpi_usb_transfer_get_type;
fpi_usb_transfer_new;
fpi_usb_transfer_ref;
fpi_usb_transfer_submit;
fpi_usb_transfer_submit_sync;
fpi_usb_transfer_unref;
local:
*;
};
LIBFPRINT_TOD_@tod_soversion@_1.92 {
global:
fpi_device_class_auto_initialize_features;
fpi_device_clear_storage_complete;
fpi_device_get_udev_data;
fpi_device_update_features;
fpi_spi_transfer_get_type;
fpi_spi_transfer_new;
fpi_spi_transfer_read;
fpi_spi_transfer_read_full;
fpi_spi_transfer_ref;
fpi_spi_transfer_submit;
fpi_spi_transfer_submit_sync;
fpi_spi_transfer_unref;
fpi_spi_transfer_write;
fpi_spi_transfer_write_full;
fpi_ssm_get_device;
fpi_ssm_jump_to_state_delayed;
fpi_ssm_mark_completed_delayed;
fpi_ssm_new_full;
fpi_ssm_next_state_delayed;
fpi_ssm_spi_transfer_cb;
fpi_ssm_spi_transfer_with_weak_pointer_cb;
} LIBFPRINT_TOD_@tod_soversion@.0.0;
LIBFPRINT_TOD_@tod_soversion@_1.94 {
global:
fpi_device_critical_enter;
fpi_device_critical_leave;
fpi_device_resume;
fpi_device_resume_complete;
fpi_device_suspend;
fpi_device_suspend_complete;
fpi_ssm_silence_debug;
/* Keep this always in the current development version */
fpi_*;
} LIBFPRINT_TOD_@tod_soversion@_1.92;
+111
View File
@@ -0,0 +1,111 @@
tod_soversion = 1
tod_subpath = versioned_libname / 'tod-@0@'.format(tod_soversion)
tod_modules_prefix = get_option('libdir') / tod_subpath
tod_conf = configuration_data()
tod_conf.set_quoted('TOD_DRIVERS_DIR',
get_option('prefix') / get_option('libdir') / tod_subpath)
configure_file(output: 'tod-config.h', configuration: tod_conf)
gmodule_dep = dependency('gmodule-2.0', version: '>=' + glib_min_version)
deps += gmodule_dep
mapfile = configure_file(input: 'libfprint-tod.ver.in',
output: 'libfprint-tod.ver',
configuration: {
'tod_soversion' : tod_soversion,
})
libfprint_tod_private = static_library('fprint-tod-private',
sources: [
'tod-shared-loader.c',
'tod-goodix-wrapper.c',
],
include_directories: include_directories('..'),
link_with: libfprint_private,
dependencies: deps,
install: false,
)
tod_sources = [
'tod-wrappers.c',
'tod-symbols.h',
]
foreach source: libfprint_private_sources
tod_sources += '..' / source
endforeach
libfprint_tod = shared_library(versioned_libname.split('lib')[1] + '-tod',
c_args: [
'-DTOD_LIBRARY=1',
'-include', '@0@'.format(files('tod-symbols.h')[0]),
],
sources: [
tod_sources,
],
soversion: tod_soversion,
include_directories: include_directories('..'),
link_args: [
'-Wl,--version-script,@0@'.format(mapfile),
'-Wl,--unresolved-symbols=ignore-in-object-files'
],
link_depends: mapfile,
link_whole: [libfprint_tod_private],
dependencies: deps,
install: true)
tod_dep = declare_dependency(
link_with: [
libfprint_tod,
libfprint_tod_private,
])
deps += tod_dep
pkgconfig = import('pkgconfig')
pkgconfig.generate(libfprint_tod,
name: versioned_libname + '-tod',
filebase: '@0@-tod-@1@'.format(versioned_libname, tod_soversion),
description: 'Private Libfprint Touch Drivers API',
version: meson.project_version() + '+tod@0@'.format(tod_soversion),
subdirs: tod_subpath,
requires_private: [
versioned_libname,
gusb_dep,
],
variables: [
'tod_driversdir=${libdir}/@0@'.format(tod_subpath)
]
)
tod_local_headers = [
'tod-macros.h',
]
tod_headers = []
extra_libfprint_headers = [
'drivers_api.h',
]
foreach header: libfprint_private_headers + extra_libfprint_headers
tod_headers += '..' / header
endforeach
custom_target('tod_fpi_enums_headers',
depends: fpi_enums,
input: fpi_enums_h,
output: 'fpi-enums.h',
command: ['cp', '@INPUT@', '-v', '@OUTPUT@'],
install: true,
install_dir: get_option('includedir') / tod_subpath)
install_headers(tod_headers,
subdir: tod_subpath
)
install_headers(tod_local_headers,
subdir: tod_subpath / 'tod',
)
# Replace the libfprint private instance with the TOD one in this case as we
# contain already all the symbols.
libfprint_private = libfprint_tod
+65
View File
@@ -0,0 +1,65 @@
#!/bin/bash
library1=$1
library2=$2
function cleanup_results() {
grep -F -w '.text' | cut -s -f2 | awk '{print $(NF)}'
}
function dump_exported_symbols() {
objdump -TC "$1" | cleanup_results
}
function dump_defined_symbols() {
objdump -t "$1" | cleanup_results
}
function in_array() {
local target=$1
shift
local i;
for i in "$@"; do
if [[ "$i" == "$target" ]]; then
return 0
fi
done
return 1
}
function is_fatal() {
if [[ "$1" == "fp_"* ]] || [[ "$1" == "fpi_"* ]]; then
return 0
fi
return 1
}
lib1_exported=($(dump_exported_symbols "$library1"))
lib2_exported=($(dump_exported_symbols "$library2"))
lib1_defined=("$(dump_defined_symbols "$library1")")
lib2_defined=("$(dump_defined_symbols "$library2")")
valid=true
for f in ${lib1_exported[*]}; do
if in_array "$f" ${lib2_exported[*]}; then
echo "$f function exported in both $library1 and $library2"
if is_fatal "$f"; then
valid=false
fi
fi
done
for f in ${lib1_defined[*]}; do
if in_array "$f" ${lib2_defined[*]}; then
echo "$f function defined in both $library1 and $library2"
if is_fatal "$f"; then
valid=false
fi
fi
done
[[ "$valid" == true ]] && exit 0
+67
View File
@@ -0,0 +1,67 @@
/*
* Shared library loader for libfprint
* Copyright (C) 2021 Marco Trevisan <marco.trevisan@canonical.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "tod-wrappers.h"
#include "fpi-ssm.h"
static gboolean
check_delayed_cancellable (FpiSsm *machine,
GCancellable *cancellable)
{
if (g_cancellable_is_cancelled (cancellable))
{
fpi_ssm_mark_failed (machine, g_error_new (G_IO_ERROR,
G_IO_ERROR_CANCELLED,
"Action cancelled"));
return FALSE;
}
if (cancellable)
fp_err ("GCancellable in SSM Delayed actions is ignored as per libfprint 1.92");
return TRUE;
}
void
fpi_ssm_next_state_delayed_1_90 (FpiSsm *machine,
int delay,
GCancellable *cancellable)
{
if (check_delayed_cancellable (machine, cancellable))
fpi_ssm_next_state_delayed (machine, delay);
}
void
fpi_ssm_jump_to_state_delayed_1_90 (FpiSsm *machine,
int state,
int delay,
GCancellable *cancellable)
{
if (check_delayed_cancellable (machine, cancellable))
fpi_ssm_jump_to_state_delayed (machine, state, delay);
}
void
fpi_ssm_mark_completed_delayed_1_90 (FpiSsm *machine,
int delay,
GCancellable *cancellable)
{
if (check_delayed_cancellable (machine, cancellable))
fpi_ssm_mark_completed_delayed (machine, delay);
}
+56
View File
@@ -0,0 +1,56 @@
/*
* Shared library loader for libfprint
* Copyright (C) 2022 Marco Trevisan <marco.trevisan@canonical.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "fp-device-private.h"
#include "fpi-device.h"
#define FP_COMPONENT "tod"
#include "tod-goodix-wrapper.h"
static void (*goodix_moc_identify)(FpDevice *) = NULL;
static void
goodix_tod_identify_wrapper (FpDevice *device)
{
GPtrArray *prints;
fpi_device_get_identify_data (device, &prints);
if (prints->len)
return goodix_moc_identify (device);
g_warning ("%s does not support identify with empty gallery, let's skip it",
fp_device_get_name (device));
fpi_device_identify_report (device, NULL, NULL, NULL);
fpi_device_identify_complete (device, NULL);
}
void
goodix_tod_wrapper_init (FpDeviceClass *device_class)
{
g_assert (g_strcmp0 (device_class->id, "goodix-tod") == 0);
g_assert (goodix_moc_identify == NULL);
g_message ("Creating TOD wrapper for %s (%s) driver",
device_class->id, device_class->full_name);
goodix_moc_identify = device_class->identify;
device_class->identify = goodix_tod_identify_wrapper;
}
+24
View File
@@ -0,0 +1,24 @@
/*
* Shared library loader for libfprint
* Copyright (C) 2022 Marco Trevisan <marco.trevisan@canonical.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#pragma once
#include "drivers_api.h"
void goodix_tod_wrapper_init (FpDeviceClass *device_class);
+32
View File
@@ -0,0 +1,32 @@
/*
* Shared library loader for libfprint
* Copyright (C) 2021 Marco Trevisan <marco.trevisan@canonical.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#pragma once
#define TOD_PADDING(original, wasted) \
char _tod_expansion_padding[(GLIB_SIZEOF_VOID_P * (original)) - (wasted)];
#define TOD_PADDING_ALIGNED(original, wasted) \
TOD_PADDING (original, (wasted) + GLIB_SIZEOF_VOID_P)
#define TOD_PADDING_ALIGNED4(original, wasted) \
TOD_PADDING (original, (wasted) + (GLIB_SIZEOF_VOID_P == 4 ? GLIB_SIZEOF_VOID_P : 0))
#define TOD_PADDING_ALIGNED8(original, wasted) \
TOD_PADDING (original, (wasted) + (GLIB_SIZEOF_VOID_P == 8 ? GLIB_SIZEOF_VOID_P : 0))
+161
View File
@@ -0,0 +1,161 @@
/*
* Shared library loader for libfprint
* Copyright (C) 2019 Marco Trevisan <marco.trevisan@canonical.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#define FP_COMPONENT "tod"
#include <gmodule.h>
#include "tod-shared-loader.h"
#include "tod-goodix-wrapper.h"
#include "fpi-device.h"
#include "fpi-log.h"
#include "tod-config.h"
#define FPI_TOD_ENTRY_GTYPE_GETTER "fpi_tod_shared_driver_get_type"
static GArray *shared_drivers = NULL;
static GList *shared_modules = NULL;
typedef GModule FpiTodModule;
typedef GType (*FpiTodShardDriverTypeGetter) (void);
G_DEFINE_AUTOPTR_CLEANUP_FUNC (FpiTodModule, g_module_close);
static const char *
get_tod_drivers_dir (void)
{
const char *tod_env_path = g_getenv ("FP_TOD_DRIVERS_DIR");
if (!tod_env_path || *tod_env_path == '\0')
return TOD_DRIVERS_DIR;
return tod_env_path;
}
void
tod_shared_drivers_register (void)
{
const char *dirname;
const char *basename;
g_autoptr(GError) error = NULL;
g_autoptr(GDir) dir = NULL;
gpointer symbol;
g_assert_null (shared_drivers);
dirname = get_tod_drivers_dir ();
dir = g_dir_open (dirname, 0, &error);
shared_drivers = g_array_new (TRUE, FALSE, sizeof (GType));
if (error)
{
fp_dbg ("Impossible to load the shared drivers dir %s", error->message);
return;
}
while ((basename = g_dir_read_name (dir)) != NULL)
{
g_autoptr(FpiTodModule) module = NULL;
g_autoptr(GTypeClass) type_class = NULL;
g_autofree char *module_path = NULL;
FpiTodShardDriverTypeGetter type_getter;
FpDeviceClass *cls;
GType driver;
if (!g_str_has_prefix (basename, "lib"))
continue;
if (!g_str_has_suffix (basename, ".so"))
continue;
module_path = g_build_filename (dirname, basename, NULL);
if (!g_file_test (module_path, G_FILE_TEST_IS_REGULAR))
continue;
fp_dbg ("Opening driver %s", module_path);
module = g_module_open (module_path, G_MODULE_BIND_LAZY | G_MODULE_BIND_LOCAL);
if (!module)
{
fp_err ("Impossible to load module %s: %s", module_path,
g_module_error ());
continue;
}
if (!g_module_symbol (module, FPI_TOD_ENTRY_GTYPE_GETTER, &symbol))
{
fp_err ("Library %s doesn't expose the required entry point symbol",
module_path);
continue;
}
type_getter = symbol;
driver = type_getter ();
fp_dbg ("Found TOD entry point symbol %p, GType is %lu", symbol, driver);
if (!G_TYPE_IS_OBJECT (driver) || !g_type_is_a (driver, FP_TYPE_DEVICE))
{
fp_err ("Library %s returned GType (%lu) doesn't represent a device",
module_path, driver);
continue;
}
type_class = g_type_class_ref (driver);
g_assert_true (g_type_check_class_is_a (type_class, FP_TYPE_DEVICE));
cls = FP_DEVICE_CLASS (type_class);
fp_dbg ("Loading driver %s (%s)", cls->id, cls->full_name);
g_array_append_val (shared_drivers, driver);
if (cls->features == FP_DEVICE_FEATURE_NONE)
{
g_debug ("Initializing features for driver %s", cls->id);
fpi_device_class_auto_initialize_features (cls);
if (g_strcmp0 (cls->id, "goodix-tod") == 0)
goodix_tod_wrapper_init (cls);
}
shared_modules = g_list_prepend (shared_modules,
g_steal_pointer (&module));
}
}
void
tod_shared_drivers_unregister (void)
{
g_clear_pointer (&shared_drivers, g_array_unref);
if (g_strcmp0 (g_getenv ("FP_TOD_KEEP_MODULES_OPEN"), "TRUE") != 0)
{
g_list_free_full (shared_modules, (GDestroyNotify) g_module_close);
shared_modules = NULL;
}
}
GArray *
tod_shared_drivers_get (void)
{
return g_array_ref (shared_drivers);
}
+28
View File
@@ -0,0 +1,28 @@
/*
* Shared library loader for libfprint
* Copyright (C) 2019 Marco Trevisan <marco.trevisan@canonical.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#pragma once
#include <glib.h>
void tod_shared_drivers_register (void);
void tod_shared_drivers_unregister (void);
GArray *tod_shared_drivers_get (void);
+56
View File
@@ -0,0 +1,56 @@
/*
* Shared library loader for libfprint
* Copyright (C) 2021 Marco Trevisan <marco.trevisan@canonical.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#pragma once
#define LIBFPRINT_2_SYMBOL_VERSION_2_0 "LIBFPRINT_2.0.0"
#define LIBFPRINT_2_SYMBOL_VERSION(major, minor) \
LIBFPRINT_2_SYMBOL_VERSION_ ## major ## _ ## minor
#define TOD_1_SYMBOL_VERSION_1_90 "LIBFPRINT_TOD_1.0.0"
#define TOD_1_SYMBOL_VERSION_1_92 "LIBFPRINT_TOD_1_1.92"
#define TOD_1_SYMBOL_VERSION_1_94 "LIBFPRINT_TOD_1_1.94"
#define TOD_1_SYMBOL_VERSION(major, minor) \
TOD_1_SYMBOL_VERSION_ ## major ## _ ## minor
#define TOD_DEFAULT_UPSTREAM_SYMBOL_VERSIONED(symbol, major, minor) \
__asm__ (".symver " # symbol "," # symbol "@@@" \
LIBFPRINT_2_SYMBOL_VERSION (major, minor));
#define TOD_DEFAULT_UPSTREAM_SYMBOL(symbol) \
__asm__ (".symver " # symbol "," # symbol "@@@");
#define TOD_DEFAULT_VERSION_SYMBOL(symbol, major, minor) \
__asm__ (".symver " # symbol "," # symbol "@@@" \
TOD_1_SYMBOL_VERSION (major, minor));
#define TOD_VERSIONED_SYMBOL(symbol, major, minor) \
__asm__ (".symver " # symbol "_" # major "_" #minor "," # symbol "@" \
TOD_1_SYMBOL_VERSION (major, minor));
TOD_DEFAULT_VERSION_SYMBOL (fpi_ssm_new_full, 1, 92)
TOD_VERSIONED_SYMBOL (fpi_ssm_new_full, 1, 90)
TOD_DEFAULT_VERSION_SYMBOL (fpi_ssm_next_state_delayed, 1, 92)
TOD_VERSIONED_SYMBOL (fpi_ssm_next_state_delayed, 1, 90)
TOD_DEFAULT_VERSION_SYMBOL (fpi_ssm_jump_to_state_delayed, 1, 92)
TOD_VERSIONED_SYMBOL (fpi_ssm_jump_to_state_delayed, 1, 90)
TOD_DEFAULT_VERSION_SYMBOL (fpi_ssm_mark_completed_delayed, 1, 92)
TOD_VERSIONED_SYMBOL (fpi_ssm_mark_completed_delayed, 1, 90)
+31
View File
@@ -0,0 +1,31 @@
/*
* Shared library loader for libfprint
* Copyright (C) 2021 Marco Trevisan <marco.trevisan@canonical.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#define FP_COMPONENT "tod"
#include "tod-wrappers.h"
FpiSsm *
fpi_ssm_new_full_1_90 (FpDevice *dev,
FpiSsmHandlerCallback handler,
int nr_states,
const char *machine_name)
{
return fpi_ssm_new_full (dev, handler, nr_states, nr_states, machine_name);
}

Some files were not shown because too many files have changed in this diff Show More