mirror of
https://gitlab.freedesktop.org/libfprint/libfprint.git
synced 2026-09-10 21:06:51 +00:00
Compare commits
624
Commits
@@ -99,6 +99,7 @@ test:
|
|||||||
|
|
||||||
test_valgrind:
|
test_valgrind:
|
||||||
stage: test
|
stage: test
|
||||||
|
allow_failure: true
|
||||||
except:
|
except:
|
||||||
variables:
|
variables:
|
||||||
- $CI_PIPELINE_SOURCE == "schedule"
|
- $CI_PIPELINE_SOURCE == "schedule"
|
||||||
|
|||||||
+25
@@ -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)
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
Vendored
+10
@@ -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.
|
||||||
Vendored
+14
@@ -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`.
|
||||||
Vendored
+1012
File diff suppressed because it is too large
Load Diff
Vendored
+203
@@ -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.
|
||||||
Vendored
+45
@@ -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
@@ -0,0 +1,2 @@
|
|||||||
|
NEWS
|
||||||
|
README.md
|
||||||
+8
@@ -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
|
||||||
Vendored
+19
@@ -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
|
||||||
|
|
||||||
Vendored
+1
@@ -0,0 +1 @@
|
|||||||
|
usr/lib/${DEB_HOST_MULTIARCH}/girepository-1.0/FPrint-*.typelib
|
||||||
Vendored
+3
@@ -0,0 +1,3 @@
|
|||||||
|
usr/lib/udev/hwdb.d/
|
||||||
|
usr/lib/udev/rules.d/
|
||||||
|
usr/lib/${DEB_HOST_MULTIARCH}/libfprint-[0-9].so.*
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
# For security reasons, we don't want the fingerprint readers to be accessible
|
||||||
|
# by unprivileged users
|
||||||
|
udev-rule-missing-uaccess
|
||||||
Vendored
+315
@@ -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
|
||||||
Vendored
+17
@@ -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
|
||||||
Vendored
+94
@@ -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
|
||||||
Vendored
+4
@@ -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
|
||||||
Vendored
+1
@@ -0,0 +1 @@
|
|||||||
|
usr/share/gtk-doc/*/libfprint-*
|
||||||
Vendored
+2
@@ -0,0 +1,2 @@
|
|||||||
|
usr/libexec/installed-tests/libfprint-[0-9]
|
||||||
|
usr/share/installed-tests/libfprint-[0-9]
|
||||||
Vendored
+3
@@ -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
|
||||||
Vendored
+1
@@ -0,0 +1 @@
|
|||||||
|
usr/lib/${DEB_HOST_MULTIARCH}/libfprint-[0-9]-tod.so.*
|
||||||
Vendored
+239
@@ -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
@@ -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
@@ -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 */
|
||||||
|
};
|
||||||
|
|
||||||
@@ -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
|
||||||
|
|
||||||
+44
@@ -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 },
|
||||||
Vendored
+7
@@ -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
|
||||||
|
|
||||||
@@ -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 */
|
||||||
|
};
|
||||||
|
|
||||||
+26
@@ -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
|
||||||
Vendored
+1
@@ -0,0 +1 @@
|
|||||||
|
3.0 (quilt)
|
||||||
Vendored
+3
@@ -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]
|
||||||
Vendored
+6
@@ -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
@@ -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
|
||||||
Vendored
+4
@@ -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
|
||||||
Vendored
+5
@@ -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@
|
||||||
@@ -26,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
|
||||||
|
|||||||
@@ -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 ();
|
||||||
|
}
|
||||||
@@ -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;)
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
+32
-9
@@ -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);
|
||||||
void (*suspend) (FpDevice *device);
|
|
||||||
void (*resume) (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 (*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);
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -261,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,
|
||||||
|
|||||||
@@ -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;
|
||||||
@@ -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
|
||||||
Executable
+65
@@ -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
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
@@ -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))
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
@@ -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)
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
/*
|
||||||
|
* 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
|
||||||
|
|
||||||
|
#include "drivers_api.h"
|
||||||
|
#include "tod-symbols.h"
|
||||||
|
|
||||||
|
extern FpiSsm *fpi_ssm_new_full_1_90 (FpDevice *dev,
|
||||||
|
FpiSsmHandlerCallback handler,
|
||||||
|
int nr_states,
|
||||||
|
const char *machine_name);
|
||||||
|
|
||||||
|
extern void fpi_ssm_next_state_delayed_1_90 (FpiSsm *machine,
|
||||||
|
int delay,
|
||||||
|
GCancellable *cancellable);
|
||||||
|
extern void fpi_ssm_jump_to_state_delayed_1_90 (FpiSsm *machine,
|
||||||
|
int state,
|
||||||
|
int delay,
|
||||||
|
GCancellable *cancellable);
|
||||||
|
extern void fpi_ssm_mark_completed_delayed_1_90 (FpiSsm *machine,
|
||||||
|
int delay,
|
||||||
|
GCancellable *cancellable);
|
||||||
+3
-1
@@ -1,5 +1,5 @@
|
|||||||
project('libfprint', [ 'c', 'cpp' ],
|
project('libfprint', [ 'c', 'cpp' ],
|
||||||
version: '1.94.7',
|
version: '1.94.7+tod1',
|
||||||
license: 'LGPLv2.1+',
|
license: 'LGPLv2.1+',
|
||||||
default_options: [
|
default_options: [
|
||||||
'buildtype=debugoptimized',
|
'buildtype=debugoptimized',
|
||||||
@@ -91,6 +91,7 @@ gusb_dep = dependency('gusb', version: '>= 0.2.0')
|
|||||||
mathlib_dep = cc.find_library('m', required: false)
|
mathlib_dep = cc.find_library('m', required: false)
|
||||||
|
|
||||||
# The following dependencies are only used for tests
|
# The following dependencies are only used for tests
|
||||||
|
sh = find_program('sh', required: true)
|
||||||
cairo_dep = dependency('cairo', required: false)
|
cairo_dep = dependency('cairo', required: false)
|
||||||
|
|
||||||
# introspection scanning and Gio-2.0.gir
|
# introspection scanning and Gio-2.0.gir
|
||||||
@@ -322,6 +323,7 @@ endif
|
|||||||
# Some dependency resolving happens inside here
|
# Some dependency resolving happens inside here
|
||||||
subdir('libfprint')
|
subdir('libfprint')
|
||||||
|
|
||||||
|
libfprint_conf.set10('HAVE_LIBFPRINT_TOD', get_option('tod'))
|
||||||
configure_file(output: 'config.h', configuration: libfprint_conf)
|
configure_file(output: 'config.h', configuration: libfprint_conf)
|
||||||
|
|
||||||
if get_option('doc')
|
if get_option('doc')
|
||||||
|
|||||||
@@ -30,7 +30,13 @@ option('doc',
|
|||||||
description: 'Whether to build the API documentation',
|
description: 'Whether to build the API documentation',
|
||||||
type: 'boolean',
|
type: 'boolean',
|
||||||
value: true)
|
value: true)
|
||||||
|
|
||||||
option('installed-tests',
|
option('installed-tests',
|
||||||
description: 'Whether to install the installed tests',
|
description: 'Whether to install the installed tests',
|
||||||
type: 'boolean',
|
type: 'boolean',
|
||||||
value: true)
|
value: true)
|
||||||
|
|
||||||
|
option('tod',
|
||||||
|
description: 'Whether to build the TOD library',
|
||||||
|
type: 'boolean',
|
||||||
|
value: true)
|
||||||
|
|||||||
@@ -24,3 +24,12 @@
|
|||||||
...
|
...
|
||||||
fun:g_thread_new
|
fun:g_thread_new
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
<ignore-bash-leaks>
|
||||||
|
Memcheck:Leak
|
||||||
|
match-leak-kinds: definite
|
||||||
|
fun:malloc
|
||||||
|
...
|
||||||
|
obj:/usr/bin/bash
|
||||||
|
}
|
||||||
|
|||||||
+206
-6
@@ -100,11 +100,17 @@ if get_option('introspection')
|
|||||||
base_args = files(vdtest + '.py')
|
base_args = files(vdtest + '.py')
|
||||||
suite = ['virtual-driver']
|
suite = ['virtual-driver']
|
||||||
|
|
||||||
r = run_command(unittest_inspector, files(vdtest + '.py'), check: true)
|
r = run_command(unittest_inspector, files(vdtest + '.py'), check: false)
|
||||||
unit_tests = r.stdout().strip().split('\n')
|
unit_tests = r.stdout().strip().split('\n')
|
||||||
|
|
||||||
if r.returncode() == 0 and unit_tests.length() > 0
|
if r.returncode() == 0 and unit_tests.length() > 0
|
||||||
suite += vdtest
|
suite += vdtest
|
||||||
|
elif r.returncode() == 77
|
||||||
|
test(vdtest,
|
||||||
|
sh,
|
||||||
|
args: ['-c', 'exit 77']
|
||||||
|
)
|
||||||
|
continue
|
||||||
else
|
else
|
||||||
unit_tests = [vdtest]
|
unit_tests = [vdtest]
|
||||||
endif
|
endif
|
||||||
@@ -151,7 +157,7 @@ if get_option('introspection')
|
|||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
test(vdtest,
|
test(vdtest,
|
||||||
find_program('sh'),
|
sh,
|
||||||
args: ['-c', 'exit 77']
|
args: ['-c', 'exit 77']
|
||||||
)
|
)
|
||||||
endif
|
endif
|
||||||
@@ -205,7 +211,7 @@ if get_option('introspection')
|
|||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
test(driver_test,
|
test(driver_test,
|
||||||
find_program('sh'),
|
sh,
|
||||||
args: ['-c', 'exit 77']
|
args: ['-c', 'exit 77']
|
||||||
)
|
)
|
||||||
endif
|
endif
|
||||||
@@ -224,13 +230,13 @@ if get_option('introspection')
|
|||||||
else
|
else
|
||||||
warning('Skipping all driver tests as introspection bindings are missing')
|
warning('Skipping all driver tests as introspection bindings are missing')
|
||||||
test('virtual-image',
|
test('virtual-image',
|
||||||
find_program('sh'),
|
sh,
|
||||||
args: ['-c', 'exit 77']
|
args: ['-c', 'exit 77']
|
||||||
)
|
)
|
||||||
|
|
||||||
foreach driver_test: drivers_tests
|
foreach driver_test: drivers_tests
|
||||||
test(driver_test,
|
test(driver_test,
|
||||||
find_program('sh'),
|
sh,
|
||||||
args: ['-c', 'exit 77']
|
args: ['-c', 'exit 77']
|
||||||
)
|
)
|
||||||
endforeach
|
endforeach
|
||||||
@@ -273,7 +279,7 @@ foreach test_name: unit_tests
|
|||||||
# Create a dummy test that always skips instead
|
# Create a dummy test that always skips instead
|
||||||
warning('Test @0@ cannot be compiled due to missing dependencies'.format(test_name))
|
warning('Test @0@ cannot be compiled due to missing dependencies'.format(test_name))
|
||||||
test(test_name,
|
test(test_name,
|
||||||
find_program('sh'),
|
sh,
|
||||||
suite: ['unit-tests'],
|
suite: ['unit-tests'],
|
||||||
args: ['-c', 'exit 77'],
|
args: ['-c', 'exit 77'],
|
||||||
)
|
)
|
||||||
@@ -369,3 +375,197 @@ if valgrind.found()
|
|||||||
'LIBFPRINT_TEST_WRAPPER=' + ' '.join(libfprint_wrapper),
|
'LIBFPRINT_TEST_WRAPPER=' + ' '.join(libfprint_wrapper),
|
||||||
])
|
])
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if get_option('tod')
|
||||||
|
tod_test_driver_name = 'fake_test_dev_tod'
|
||||||
|
tod_ssm_test_driver_name = 'ssm_test_dev_tod'
|
||||||
|
tod_envs = envs
|
||||||
|
tod_envs.set('FP_TOD_KEEP_MODULES_OPEN', 'TRUE')
|
||||||
|
tod_envs.set('FP_VIRTUAL_FAKE_DEVICE', 'yes')
|
||||||
|
tod_envs.set('FP_TOD_TEST_DRIVER_NAME', tod_test_driver_name)
|
||||||
|
tod_envs.prepend('LD_LIBRARY_PATH',
|
||||||
|
meson.build_root() / 'libfprint',
|
||||||
|
meson.build_root() / 'libfprint' / 'tod')
|
||||||
|
tod_subversion = meson.project_version().split('+tod')[0]
|
||||||
|
tod_c_args = [
|
||||||
|
'-DTEST_TOD_DRIVER=1',
|
||||||
|
'-DTOD_CURRENT_VERSION=@0@'.format(tod_soversion),
|
||||||
|
'-DTOD_CURRENT_SUBVERSION="@0@"'.format(tod_subversion),
|
||||||
|
]
|
||||||
|
|
||||||
|
fake_driver = shared_module('device-fake-tod-driver',
|
||||||
|
sources: [
|
||||||
|
'test-device-fake.c',
|
||||||
|
'test-device-fake-tod.c',
|
||||||
|
],
|
||||||
|
c_args: tod_c_args,
|
||||||
|
link_with: [
|
||||||
|
libfprint_tod,
|
||||||
|
],
|
||||||
|
include_directories: include_directories('../libfprint'),
|
||||||
|
dependencies: deps,
|
||||||
|
install: installed_tests,
|
||||||
|
install_dir: installed_tests_execdir / 'tod-drivers' / 'current',
|
||||||
|
install_rpath: installed_tests_execdir,
|
||||||
|
)
|
||||||
|
|
||||||
|
fp_todv1_enums = gnome.mkenums_simple('fp-todv1-enums',
|
||||||
|
sources: [
|
||||||
|
'tod-drivers/base-fp-device.h',
|
||||||
|
'tod-drivers/base-fp-print.h',
|
||||||
|
'tod-drivers/base-fpi-device.h',
|
||||||
|
'tod-drivers/base-fpi-image.h',
|
||||||
|
'tod-drivers/base-fpi-image-device.h',
|
||||||
|
'tod-drivers/base-fpi-spi.h',
|
||||||
|
'tod-drivers/base-fpi-usb.h',
|
||||||
|
],
|
||||||
|
install_header: false)
|
||||||
|
|
||||||
|
test_utils_tod = static_library('fprint-test-utils-tod',
|
||||||
|
sources: [
|
||||||
|
'test-utils.c',
|
||||||
|
'test-utils-tod.c',
|
||||||
|
fp_todv1_enums,
|
||||||
|
],
|
||||||
|
include_directories: 'tod-drivers',
|
||||||
|
dependencies: libfprint_private_dep,
|
||||||
|
install: false)
|
||||||
|
|
||||||
|
tod_standalone_tests = [
|
||||||
|
'fp-todv1-types',
|
||||||
|
]
|
||||||
|
|
||||||
|
tod_drivers_tests = [
|
||||||
|
'fp-context-tod',
|
||||||
|
'fp-device-tod',
|
||||||
|
'fpi-device',
|
||||||
|
]
|
||||||
|
|
||||||
|
tod_driver_infos = {
|
||||||
|
tod_test_driver_name + '_current': {
|
||||||
|
'tod-driver': tod_test_driver_name,
|
||||||
|
'tod-dir': meson.current_build_dir(),
|
||||||
|
'supported-tests': tod_drivers_tests,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if host_machine.cpu_family() == 'x86_64'
|
||||||
|
tod_test_versions = [
|
||||||
|
'v1+1.90.1',
|
||||||
|
'v1+1.90.2',
|
||||||
|
'v1+1.90.3',
|
||||||
|
'v1+1.90.5',
|
||||||
|
'v1+1.94.1',
|
||||||
|
'v1+1.94.3',
|
||||||
|
'v1+1.94.7',
|
||||||
|
]
|
||||||
|
|
||||||
|
foreach tod_version: tod_test_versions
|
||||||
|
tod_dir = 'tod-drivers' / '-'.join([
|
||||||
|
'tod', host_machine.cpu_family(), tod_version
|
||||||
|
])
|
||||||
|
tod_driver_infos += {
|
||||||
|
tod_test_driver_name + '_' + tod_version: {
|
||||||
|
'tod-driver': tod_test_driver_name,
|
||||||
|
'tod-dir': tod_dir,
|
||||||
|
'supported-tests': tod_drivers_tests,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tod_driver_infos += {
|
||||||
|
tod_ssm_test_driver_name + '_' + tod_version: {
|
||||||
|
'tod-driver': tod_ssm_test_driver_name,
|
||||||
|
'tod-dir': tod_dir,
|
||||||
|
'supported-tests': [
|
||||||
|
'fp-context-tod',
|
||||||
|
],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if installed_tests
|
||||||
|
install_subdir(tod_dir,
|
||||||
|
install_dir: installed_tests_execdir / 'tod-drivers')
|
||||||
|
endif
|
||||||
|
endforeach
|
||||||
|
endif
|
||||||
|
|
||||||
|
foreach test_name: tod_drivers_tests + tod_standalone_tests
|
||||||
|
basename = 'test-' + test_name
|
||||||
|
sufix = test_name.endswith('-tod') ? '' : '-tod'
|
||||||
|
tod_test_name = test_name + sufix
|
||||||
|
tod_suites = ['unit-tests', 'tod']
|
||||||
|
test_exe = executable(basename + sufix,
|
||||||
|
sources: basename + '.c',
|
||||||
|
dependencies: libfprint_private_dep,
|
||||||
|
c_args: [
|
||||||
|
common_cflags,
|
||||||
|
tod_c_args,
|
||||||
|
],
|
||||||
|
install: installed_tests,
|
||||||
|
install_dir: installed_tests_execdir,
|
||||||
|
link_with: test_utils_tod,
|
||||||
|
)
|
||||||
|
|
||||||
|
foreach tod_driver, tod_driver_info : tod_driver_infos
|
||||||
|
if test_name not in tod_driver_info.get('supported-tests')
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
tod_test_envs = tod_envs
|
||||||
|
tod_test_envs.prepend('FP_DRIVERS_ALLOWLIST', tod_driver)
|
||||||
|
tod_test_envs.set('FP_TOD_DRIVERS_DIR',
|
||||||
|
tod_driver_info.get('tod-dir') == meson.current_build_dir() ?
|
||||||
|
meson.current_build_dir() :
|
||||||
|
meson.current_source_dir() / tod_driver_info.get('tod-dir'))
|
||||||
|
tod_test_envs.set('FP_TOD_TEST_DRIVER_NAME', tod_driver)
|
||||||
|
|
||||||
|
test(tod_test_name + '-' + tod_driver,
|
||||||
|
test_exe,
|
||||||
|
suite: tod_suites + [tod_driver],
|
||||||
|
env: tod_test_envs,
|
||||||
|
depends: fake_driver,
|
||||||
|
)
|
||||||
|
|
||||||
|
if installed_tests
|
||||||
|
tod_envs_str = run_command(python3, '-c', env_parser_cmd,
|
||||||
|
env: tod_test_envs,
|
||||||
|
check: true).stdout().strip()
|
||||||
|
|
||||||
|
configure_file(
|
||||||
|
input: 'test.in',
|
||||||
|
output: 'tod-' + tod_test_name + '-' + tod_driver + '.test',
|
||||||
|
install_dir: installed_tests_testdir,
|
||||||
|
configuration: {
|
||||||
|
# FIXME: use fs.name() on meson 0.58
|
||||||
|
'exec': installed_tests_execdir / test_exe.full_path().split('/')[-1],
|
||||||
|
'env': ' '.join([
|
||||||
|
tod_envs_str,
|
||||||
|
'FP_TOD_DRIVERS_DIR=' + installed_tests_execdir /
|
||||||
|
(tod_driver_info.get('tod-dir') == meson.current_build_dir() ?
|
||||||
|
'tod-drivers' / 'current' : tod_driver_info.get('tod-dir')),
|
||||||
|
]),
|
||||||
|
'extra_content': '',
|
||||||
|
},
|
||||||
|
)
|
||||||
|
endif
|
||||||
|
endforeach
|
||||||
|
|
||||||
|
if test_name in tod_standalone_tests
|
||||||
|
test(tod_test_name,
|
||||||
|
test_exe,
|
||||||
|
suite: tod_suites,
|
||||||
|
env: tod_envs,
|
||||||
|
)
|
||||||
|
endif
|
||||||
|
endforeach
|
||||||
|
|
||||||
|
if find_program('objdump', required: false).found()
|
||||||
|
check_libs_symbols = find_program(meson.source_root() /
|
||||||
|
'libfprint/tod/tests/check-library-symbols.sh')
|
||||||
|
test('check-tod-lib-sybmbols',
|
||||||
|
check_libs_symbols,
|
||||||
|
args: [libfprint.full_path(), libfprint_tod.full_path()],
|
||||||
|
depends: [libfprint, libfprint_tod],
|
||||||
|
suite: ['abi-check', tod_suites ],
|
||||||
|
)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|||||||
@@ -0,0 +1,28 @@
|
|||||||
|
/*
|
||||||
|
* Virtual driver for device debugging
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "test-device-fake-tod.h"
|
||||||
|
#include "test-device-fake.h"
|
||||||
|
|
||||||
|
GType
|
||||||
|
fpi_tod_shared_driver_get_type (void)
|
||||||
|
{
|
||||||
|
return fpi_device_fake_get_type ();
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
/*
|
||||||
|
* Virtual driver for device debugging
|
||||||
|
*
|
||||||
|
* 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-object.h>
|
||||||
|
|
||||||
|
GType fpi_tod_shared_driver_get_type (void);
|
||||||
@@ -18,7 +18,11 @@
|
|||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifdef TEST_TOD_DRIVER
|
||||||
|
#define FP_COMPONENT "fake_test_dev_tod_current"
|
||||||
|
#else
|
||||||
#define FP_COMPONENT "fake_test_dev"
|
#define FP_COMPONENT "fake_test_dev"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "fpi-log.h"
|
#include "fpi-log.h"
|
||||||
#include "test-device-fake.h"
|
#include "test-device-fake.h"
|
||||||
|
|||||||
@@ -0,0 +1,124 @@
|
|||||||
|
/*
|
||||||
|
* FpContext Unit tests
|
||||||
|
* 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 "fpi-log.h"
|
||||||
|
#include "fpi-device.h"
|
||||||
|
#include <libfprint/fprint.h>
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_context_new (void)
|
||||||
|
{
|
||||||
|
g_autoptr(FpContext) context = fp_context_new ();
|
||||||
|
g_assert_true (FP_CONTEXT (context));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_context_has_no_devices (void)
|
||||||
|
{
|
||||||
|
g_autoptr(FpContext) context = NULL;
|
||||||
|
GPtrArray *devices;
|
||||||
|
const char *old_drivers_dir = g_getenv ("FP_TOD_DRIVERS_DIR");
|
||||||
|
|
||||||
|
g_test_expect_message (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG,
|
||||||
|
"*Impossible to load the shared drivers dir Error "
|
||||||
|
"opening directory*__HOPEFULLY_AN_INVALID_PATH*");
|
||||||
|
g_setenv ("FP_TOD_DRIVERS_DIR", "__HOPEFULLY_AN_INVALID_PATH", TRUE);
|
||||||
|
context = fp_context_new ();
|
||||||
|
g_test_assert_expected_messages ();
|
||||||
|
devices = fp_context_get_devices (context);
|
||||||
|
g_setenv ("FP_TOD_DRIVERS_DIR", old_drivers_dir, TRUE);
|
||||||
|
|
||||||
|
g_assert_nonnull (devices);
|
||||||
|
g_assert_cmpuint (devices->len, ==, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_context_has_fake_device (void)
|
||||||
|
{
|
||||||
|
g_autoptr(FpContext) context = NULL;
|
||||||
|
FpDevice *fake_device = NULL;
|
||||||
|
GPtrArray *devices;
|
||||||
|
const char *tod_name;
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
context = fp_context_new ();
|
||||||
|
devices = fp_context_get_devices (context);
|
||||||
|
tod_name = g_getenv ("FP_TOD_TEST_DRIVER_NAME");
|
||||||
|
|
||||||
|
g_assert_nonnull (devices);
|
||||||
|
g_assert_cmpuint (devices->len, ==, 1);
|
||||||
|
|
||||||
|
for (i = 0; i < devices->len; ++i)
|
||||||
|
{
|
||||||
|
FpDevice *device = devices->pdata[i];
|
||||||
|
|
||||||
|
if (g_strcmp0 (fp_device_get_driver (device), tod_name) == 0)
|
||||||
|
{
|
||||||
|
fake_device = device;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
g_assert_true (FP_IS_DEVICE (fake_device));
|
||||||
|
|
||||||
|
if (FP_DEVICE_GET_CLASS (fake_device)->open)
|
||||||
|
{
|
||||||
|
GCancellable *cancellable;
|
||||||
|
g_assert_true (fp_device_open_sync (fake_device, NULL, NULL));
|
||||||
|
g_assert_false (fp_device_open_sync (fake_device, NULL, NULL));
|
||||||
|
g_assert_true (fp_device_close_sync (fake_device, NULL, NULL));
|
||||||
|
|
||||||
|
cancellable = g_cancellable_new ();
|
||||||
|
g_cancellable_cancel (cancellable);
|
||||||
|
g_assert_false (fp_device_open_sync (fake_device, cancellable, NULL));
|
||||||
|
g_clear_object (&cancellable);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_context_enumerates_new_devices (void)
|
||||||
|
{
|
||||||
|
g_autoptr(FpContext) context = NULL;
|
||||||
|
GPtrArray *devices;
|
||||||
|
|
||||||
|
context = fp_context_new ();
|
||||||
|
|
||||||
|
fp_context_enumerate (context);
|
||||||
|
devices = fp_context_get_devices (context);
|
||||||
|
|
||||||
|
g_assert_nonnull (devices);
|
||||||
|
g_assert_cmpuint (devices->len, ==, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main (int argc, char *argv[])
|
||||||
|
{
|
||||||
|
g_test_init (&argc, &argv, NULL);
|
||||||
|
|
||||||
|
g_assert_nonnull (g_getenv ("FP_TOD_DRIVERS_DIR"));
|
||||||
|
|
||||||
|
g_test_add_func ("/context/new", test_context_new);
|
||||||
|
g_test_add_func ("/context/no-devices", test_context_has_no_devices);
|
||||||
|
g_test_add_func ("/context/has-virtual-device", test_context_has_fake_device);
|
||||||
|
g_test_add_func ("/context/enumerates-new-devices", test_context_enumerates_new_devices);
|
||||||
|
|
||||||
|
return g_test_run ();
|
||||||
|
}
|
||||||
@@ -0,0 +1,249 @@
|
|||||||
|
/*
|
||||||
|
* FpDevice Unit tests
|
||||||
|
* 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
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <libfprint/fprint.h>
|
||||||
|
|
||||||
|
#include "test-utils-tod.h"
|
||||||
|
|
||||||
|
static void
|
||||||
|
on_device_opened (FpDevice *dev, GAsyncResult *res, FptContext *tctx)
|
||||||
|
{
|
||||||
|
g_autoptr(GError) error = NULL;
|
||||||
|
|
||||||
|
g_assert_true (fp_device_open_finish (dev, res, &error));
|
||||||
|
g_assert_no_error (error);
|
||||||
|
g_assert_true (fp_device_is_open (tctx->device));
|
||||||
|
|
||||||
|
tctx->user_data = GUINT_TO_POINTER (TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_device_open_async (void)
|
||||||
|
{
|
||||||
|
g_autoptr(FptContext) tctx = fpt_context_new_with_fake_dev ();
|
||||||
|
|
||||||
|
fp_device_open (tctx->device, NULL, (GAsyncReadyCallback) on_device_opened, tctx);
|
||||||
|
|
||||||
|
while (!GPOINTER_TO_UINT (tctx->user_data))
|
||||||
|
g_main_context_iteration (NULL, TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
on_device_closed (FpDevice *dev, GAsyncResult *res, FptContext *tctx)
|
||||||
|
{
|
||||||
|
g_autoptr(GError) error = NULL;
|
||||||
|
|
||||||
|
g_assert_true (fp_device_close_finish (dev, res, &error));
|
||||||
|
g_assert_no_error (error);
|
||||||
|
g_assert_false (fp_device_is_open (tctx->device));
|
||||||
|
|
||||||
|
tctx->user_data = GUINT_TO_POINTER (TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_device_close_async (void)
|
||||||
|
{
|
||||||
|
g_autoptr(FptContext) tctx = fpt_context_new_with_fake_dev ();
|
||||||
|
|
||||||
|
fp_device_open (tctx->device, NULL, (GAsyncReadyCallback) on_device_opened, tctx);
|
||||||
|
while (!tctx->user_data)
|
||||||
|
g_main_context_iteration (NULL, TRUE);
|
||||||
|
|
||||||
|
tctx->user_data = GUINT_TO_POINTER (FALSE);
|
||||||
|
fp_device_close (tctx->device, NULL, (GAsyncReadyCallback) on_device_closed, tctx);
|
||||||
|
|
||||||
|
while (!GPOINTER_TO_UINT (tctx->user_data))
|
||||||
|
g_main_context_iteration (NULL, TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_device_open_sync (void)
|
||||||
|
{
|
||||||
|
g_autoptr(GError) error = NULL;
|
||||||
|
g_autoptr(FptContext) tctx = fpt_context_new_with_fake_dev ();
|
||||||
|
|
||||||
|
fp_device_open_sync (tctx->device, NULL, &error);
|
||||||
|
g_assert_no_error (error);
|
||||||
|
g_assert_true (fp_device_is_open (tctx->device));
|
||||||
|
|
||||||
|
fp_device_open_sync (tctx->device, NULL, &error);
|
||||||
|
g_assert_error (error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_ALREADY_OPEN);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
on_open_notify (FpDevice *rdev, GParamSpec *spec, FptContext *tctx)
|
||||||
|
{
|
||||||
|
g_assert_cmpstr (spec->name, ==, "open");
|
||||||
|
tctx->user_data = GUINT_TO_POINTER (TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_device_open_sync_notify (void)
|
||||||
|
{
|
||||||
|
g_autoptr(GError) error = NULL;
|
||||||
|
g_autoptr(FptContext) tctx = fpt_context_new_with_fake_dev ();
|
||||||
|
|
||||||
|
g_signal_connect (tctx->device, "notify::open", G_CALLBACK (on_open_notify), tctx);
|
||||||
|
g_assert_true (fp_device_open_sync (tctx->device, NULL, &error));
|
||||||
|
g_assert_no_error (error);
|
||||||
|
g_assert_true (GPOINTER_TO_INT (tctx->user_data));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_device_close_sync (void)
|
||||||
|
{
|
||||||
|
g_autoptr(GError) error = NULL;
|
||||||
|
g_autoptr(FptContext) tctx = fpt_context_new_with_fake_dev ();
|
||||||
|
|
||||||
|
fp_device_open_sync (tctx->device, NULL, NULL);
|
||||||
|
fp_device_close_sync (tctx->device, NULL, &error);
|
||||||
|
g_assert_no_error (error);
|
||||||
|
g_assert_false (fp_device_is_open (tctx->device));
|
||||||
|
|
||||||
|
fp_device_close_sync (tctx->device, NULL, &error);
|
||||||
|
g_assert_error (error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_NOT_OPEN);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
on_close_notify (FpDevice *rdev, GParamSpec *spec, FptContext *tctx)
|
||||||
|
{
|
||||||
|
g_assert_cmpstr (spec->name, ==, "open");
|
||||||
|
tctx->user_data = GUINT_TO_POINTER (TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_device_close_sync_notify (void)
|
||||||
|
{
|
||||||
|
g_autoptr(GError) error = NULL;
|
||||||
|
g_autoptr(FptContext) tctx = fpt_context_new_with_fake_dev ();
|
||||||
|
|
||||||
|
fp_device_open_sync (tctx->device, NULL, NULL);
|
||||||
|
|
||||||
|
g_signal_connect (tctx->device, "notify::open", G_CALLBACK (on_close_notify), tctx);
|
||||||
|
fp_device_close_sync (tctx->device, NULL, &error);
|
||||||
|
g_assert_no_error (error);
|
||||||
|
g_assert_true (GPOINTER_TO_INT (tctx->user_data));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_device_get_driver (void)
|
||||||
|
{
|
||||||
|
g_autoptr(FptContext) tctx = fpt_context_new_with_fake_dev ();
|
||||||
|
|
||||||
|
fp_device_open_sync (tctx->device, NULL, NULL);
|
||||||
|
g_assert_cmpstr (fp_device_get_driver (tctx->device), ==, g_getenv ("FP_TOD_TEST_DRIVER_NAME"));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_device_get_device_id (void)
|
||||||
|
{
|
||||||
|
g_autoptr(FptContext) tctx = fpt_context_new_with_fake_dev ();
|
||||||
|
|
||||||
|
fp_device_open_sync (tctx->device, NULL, NULL);
|
||||||
|
g_assert_cmpstr (fp_device_get_device_id (tctx->device), ==, g_getenv ("FP_TOD_TEST_DRIVER_NAME"));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_device_get_name (void)
|
||||||
|
{
|
||||||
|
g_autoptr(FptContext) tctx = fpt_context_new_with_fake_dev ();
|
||||||
|
|
||||||
|
fp_device_open_sync (tctx->device, NULL, NULL);
|
||||||
|
g_assert_cmpstr (fp_device_get_name (tctx->device), ==,
|
||||||
|
"Virtual device for debugging");
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_device_get_scan_type (void)
|
||||||
|
{
|
||||||
|
g_autoptr(FptContext) tctx = fpt_context_new_with_fake_dev ();
|
||||||
|
|
||||||
|
fp_device_open_sync (tctx->device, NULL, NULL);
|
||||||
|
g_assert_cmpint (fp_device_get_scan_type (tctx->device), ==, FP_SCAN_TYPE_PRESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_device_get_nr_enroll_stages (void)
|
||||||
|
{
|
||||||
|
g_autoptr(FptContext) tctx = fpt_context_new_with_fake_dev ();
|
||||||
|
|
||||||
|
fp_device_open_sync (tctx->device, NULL, NULL);
|
||||||
|
g_assert_cmpuint (fp_device_get_nr_enroll_stages (tctx->device), ==, 5);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_device_supports_identify (void)
|
||||||
|
{
|
||||||
|
g_autoptr(FptContext) tctx = fpt_context_new_with_fake_dev ();
|
||||||
|
|
||||||
|
fp_device_open_sync (tctx->device, NULL, NULL);
|
||||||
|
g_assert_true (fp_device_has_feature (tctx->device, FP_DEVICE_FEATURE_IDENTIFY));
|
||||||
|
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
||||||
|
g_assert_true (fp_device_supports_identify (tctx->device));
|
||||||
|
G_GNUC_END_IGNORE_DEPRECATIONS
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_device_supports_capture (void)
|
||||||
|
{
|
||||||
|
g_autoptr(FptContext) tctx = fpt_context_new_with_fake_dev ();
|
||||||
|
|
||||||
|
fp_device_open_sync (tctx->device, NULL, NULL);
|
||||||
|
g_assert_true (fp_device_has_feature (tctx->device, FP_DEVICE_FEATURE_CAPTURE));
|
||||||
|
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
||||||
|
g_assert_true (fp_device_supports_capture (tctx->device));
|
||||||
|
G_GNUC_END_IGNORE_DEPRECATIONS
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_device_has_storage (void)
|
||||||
|
{
|
||||||
|
g_autoptr(FptContext) tctx = fpt_context_new_with_fake_dev ();
|
||||||
|
|
||||||
|
fp_device_open_sync (tctx->device, NULL, NULL);
|
||||||
|
g_assert_true (fp_device_has_feature (tctx->device, FP_DEVICE_FEATURE_STORAGE));
|
||||||
|
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
||||||
|
g_assert_true (fp_device_has_storage (tctx->device));
|
||||||
|
G_GNUC_END_IGNORE_DEPRECATIONS
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main (int argc, char *argv[])
|
||||||
|
{
|
||||||
|
g_test_init (&argc, &argv, NULL);
|
||||||
|
|
||||||
|
g_assert_nonnull (g_getenv ("FP_TOD_DRIVERS_DIR"));
|
||||||
|
|
||||||
|
g_test_add_func ("/device/async/open", test_device_open_async);
|
||||||
|
g_test_add_func ("/device/async/close", test_device_close_async);
|
||||||
|
g_test_add_func ("/device/sync/open", test_device_open_sync);
|
||||||
|
g_test_add_func ("/device/sync/open/notify", test_device_open_sync_notify);
|
||||||
|
g_test_add_func ("/device/sync/close", test_device_close_sync);
|
||||||
|
g_test_add_func ("/device/sync/close/notify", test_device_close_sync_notify);
|
||||||
|
g_test_add_func ("/device/sync/get_driver", test_device_get_driver);
|
||||||
|
g_test_add_func ("/device/sync/get_device_id", test_device_get_device_id);
|
||||||
|
g_test_add_func ("/device/sync/get_name", test_device_get_name);
|
||||||
|
g_test_add_func ("/device/sync/get_scan_type", test_device_get_scan_type);
|
||||||
|
g_test_add_func ("/device/sync/get_nr_enroll_stages", test_device_get_nr_enroll_stages);
|
||||||
|
g_test_add_func ("/device/sync/supports_identify", test_device_supports_identify);
|
||||||
|
g_test_add_func ("/device/sync/supports_capture", test_device_supports_capture);
|
||||||
|
g_test_add_func ("/device/sync/has_storage", test_device_has_storage);
|
||||||
|
|
||||||
|
return g_test_run ();
|
||||||
|
}
|
||||||
@@ -0,0 +1,344 @@
|
|||||||
|
/*
|
||||||
|
* FpDevice Unit tests
|
||||||
|
* 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 "drivers_api.h"
|
||||||
|
#include "fp-todv1-enums.h"
|
||||||
|
|
||||||
|
#include "tod-drivers/base-fp-device.h"
|
||||||
|
#include "tod-drivers/base-fp-print.h"
|
||||||
|
#include "tod-drivers/base-fpi-device.h"
|
||||||
|
#include "tod-drivers/base-fpi-image.h"
|
||||||
|
#include "tod-drivers/base-fpi-image-device.h"
|
||||||
|
#include "tod-drivers/base-fpi-spi.h"
|
||||||
|
#include "tod-drivers/base-fpi-usb.h"
|
||||||
|
|
||||||
|
static void
|
||||||
|
check_enum_compatibility (GType old_type, GType current_type)
|
||||||
|
{
|
||||||
|
g_autoptr(GEnumClass) old_class = g_type_class_ref (old_type);
|
||||||
|
g_autoptr(GEnumClass) current_class = g_type_class_ref (current_type);
|
||||||
|
int i;
|
||||||
|
|
||||||
|
g_debug ("Checking Enum %s vs %s",
|
||||||
|
g_type_name (current_type),
|
||||||
|
g_type_name (old_type));
|
||||||
|
|
||||||
|
g_assert_true (G_TYPE_IS_ENUM (old_type));
|
||||||
|
g_assert_true (G_TYPE_IS_ENUM (current_type));
|
||||||
|
g_assert_cmpuint (old_class->n_values, <=, current_class->n_values);
|
||||||
|
|
||||||
|
for (i = old_class->minimum; i <= old_class->maximum; i++)
|
||||||
|
{
|
||||||
|
GEnumValue *old_value = g_enum_get_value (old_class, i);
|
||||||
|
GEnumValue *current_value;
|
||||||
|
|
||||||
|
if (!old_value)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
current_value = g_enum_get_value_by_nick (current_class,
|
||||||
|
old_value->value_nick);
|
||||||
|
|
||||||
|
g_debug (" .. %s (%d)", old_value->value_nick, old_value->value);
|
||||||
|
g_assert_nonnull (current_value);
|
||||||
|
g_assert_cmpuint (old_value->value, ==, current_value->value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
check_flags_compatibility (GType old_type, GType current_type)
|
||||||
|
{
|
||||||
|
g_autoptr(GFlagsClass) old_class = g_type_class_ref (old_type);
|
||||||
|
g_autoptr(GFlagsClass) current_class = g_type_class_ref (current_type);
|
||||||
|
int i;
|
||||||
|
|
||||||
|
g_debug ("Checking Flags %s vs %s",
|
||||||
|
g_type_name (current_type),
|
||||||
|
g_type_name (old_type));
|
||||||
|
|
||||||
|
g_assert_true (G_TYPE_IS_FLAGS (old_type));
|
||||||
|
g_assert_true (G_TYPE_IS_FLAGS (current_type));
|
||||||
|
g_assert_cmpuint (old_class->n_values, <=, current_class->n_values);
|
||||||
|
|
||||||
|
for (i = 0; i < old_class->n_values; ++i)
|
||||||
|
{
|
||||||
|
GFlagsValue *old_value = &old_class->values[i];
|
||||||
|
GFlagsValue *current_value = g_flags_get_value_by_nick (current_class,
|
||||||
|
old_value->value_nick);
|
||||||
|
|
||||||
|
g_debug (" .. %s (%d)", old_value->value_nick, old_value->value);
|
||||||
|
g_assert_nonnull (current_value);
|
||||||
|
g_assert_cmpuint (old_value->value, ==, current_value->value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
check_compatiblity_auto (GType old_type, GType current_type)
|
||||||
|
{
|
||||||
|
if (G_TYPE_IS_ENUM (old_type))
|
||||||
|
return check_enum_compatibility (old_type, current_type);
|
||||||
|
|
||||||
|
if (G_TYPE_IS_FLAGS (old_type))
|
||||||
|
return check_flags_compatibility (old_type, current_type);
|
||||||
|
|
||||||
|
g_assert_not_reached ();
|
||||||
|
}
|
||||||
|
|
||||||
|
#define check_type_compatibility(type, major, minor, micro) \
|
||||||
|
g_debug ("Checking " # type " @ " G_STRLOC); \
|
||||||
|
check_compatiblity_auto (type ## _TOD_V ## major ## _ ## minor ## _ ## micro, type);
|
||||||
|
|
||||||
|
#define tod_versioned_type(type, major, minor, micro) \
|
||||||
|
type ## TODV ## major ## _ ## minor ## _ ## micro
|
||||||
|
|
||||||
|
#define check_struct_size(type, major, minor, micro) \
|
||||||
|
g_debug ("Checking " # type " v" #major "." #minor "." #micro " size @ " G_STRLOC); \
|
||||||
|
g_assert_cmpuint (sizeof (tod_versioned_type (type, major, minor, micro)), \
|
||||||
|
==, \
|
||||||
|
sizeof (type))
|
||||||
|
|
||||||
|
#define check_struct_member(type, major, minor, micro, member) \
|
||||||
|
g_debug ("Checking " # type " v" #major "." #minor "." #micro "'s " # member " offset @ " G_STRLOC); \
|
||||||
|
g_assert_cmpuint (G_STRUCT_OFFSET (tod_versioned_type (type, major, minor, micro), member), \
|
||||||
|
==, \
|
||||||
|
G_STRUCT_OFFSET (type, member))
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_device_type (void)
|
||||||
|
{
|
||||||
|
check_struct_size (FpIdEntry, 1, 90, 1);
|
||||||
|
check_struct_size (FpIdEntry, 1, 92, 0);
|
||||||
|
check_struct_size (FpDeviceClass, 1, 90, 1);
|
||||||
|
check_struct_size (FpDeviceClass, 1, 92, 0);
|
||||||
|
check_struct_size (FpDeviceClass, 1, 94, 0);
|
||||||
|
|
||||||
|
check_struct_member (FpIdEntry, 1, 90, 1, virtual_envvar);
|
||||||
|
check_struct_member (FpIdEntry, 1, 90, 1, driver_data);
|
||||||
|
|
||||||
|
check_struct_member (FpDeviceClass, 1, 90, 1, id);
|
||||||
|
check_struct_member (FpDeviceClass, 1, 90, 1, full_name);
|
||||||
|
check_struct_member (FpDeviceClass, 1, 90, 1, type);
|
||||||
|
check_struct_member (FpDeviceClass, 1, 90, 1, id_table);
|
||||||
|
|
||||||
|
check_struct_member (FpDeviceClass, 1, 90, 1, nr_enroll_stages);
|
||||||
|
check_struct_member (FpDeviceClass, 1, 90, 1, scan_type);
|
||||||
|
|
||||||
|
check_struct_member (FpDeviceClass, 1, 90, 1, usb_discover);
|
||||||
|
check_struct_member (FpDeviceClass, 1, 90, 1, probe);
|
||||||
|
check_struct_member (FpDeviceClass, 1, 90, 1, open);
|
||||||
|
check_struct_member (FpDeviceClass, 1, 90, 1, close);
|
||||||
|
check_struct_member (FpDeviceClass, 1, 90, 1, enroll);
|
||||||
|
check_struct_member (FpDeviceClass, 1, 90, 1, verify);
|
||||||
|
check_struct_member (FpDeviceClass, 1, 90, 1, identify);
|
||||||
|
check_struct_member (FpDeviceClass, 1, 90, 1, capture);
|
||||||
|
check_struct_member (FpDeviceClass, 1, 90, 1, list);
|
||||||
|
check_struct_member (FpDeviceClass, 1, 90, 1, delete);
|
||||||
|
check_struct_member (FpDeviceClass, 1, 90, 1, cancel);
|
||||||
|
|
||||||
|
/* Version 1.92 */
|
||||||
|
check_struct_member (FpIdEntry, 1, 92, 0, virtual_envvar);
|
||||||
|
check_struct_member (FpIdEntry, 1, 92, 0, driver_data);
|
||||||
|
check_struct_member (FpIdEntry, 1, 92, 0, udev_types);
|
||||||
|
check_struct_member (FpIdEntry, 1, 92, 0, spi_acpi_id);
|
||||||
|
check_struct_member (FpIdEntry, 1, 92, 0, hid_id);
|
||||||
|
|
||||||
|
check_struct_member (FpDeviceClass, 1, 92, 0, usb_discover);
|
||||||
|
check_struct_member (FpDeviceClass, 1, 92, 0, probe);
|
||||||
|
check_struct_member (FpDeviceClass, 1, 92, 0, open);
|
||||||
|
check_struct_member (FpDeviceClass, 1, 92, 0, close);
|
||||||
|
check_struct_member (FpDeviceClass, 1, 92, 0, enroll);
|
||||||
|
check_struct_member (FpDeviceClass, 1, 92, 0, verify);
|
||||||
|
check_struct_member (FpDeviceClass, 1, 92, 0, identify);
|
||||||
|
check_struct_member (FpDeviceClass, 1, 92, 0, capture);
|
||||||
|
check_struct_member (FpDeviceClass, 1, 92, 0, list);
|
||||||
|
check_struct_member (FpDeviceClass, 1, 92, 0, delete);
|
||||||
|
check_struct_member (FpDeviceClass, 1, 92, 0, cancel);
|
||||||
|
|
||||||
|
check_struct_member (FpDeviceClass, 1, 92, 0, id);
|
||||||
|
check_struct_member (FpDeviceClass, 1, 92, 0, full_name);
|
||||||
|
check_struct_member (FpDeviceClass, 1, 92, 0, type);
|
||||||
|
check_struct_member (FpDeviceClass, 1, 92, 0, id_table);
|
||||||
|
|
||||||
|
check_struct_member (FpDeviceClass, 1, 92, 0, nr_enroll_stages);
|
||||||
|
check_struct_member (FpDeviceClass, 1, 92, 0, scan_type);
|
||||||
|
|
||||||
|
check_struct_member (FpDeviceClass, 1, 92, 0, features);
|
||||||
|
|
||||||
|
/* Version 1.94 */
|
||||||
|
check_struct_member (FpDeviceClass, 1, 94, 0, usb_discover);
|
||||||
|
check_struct_member (FpDeviceClass, 1, 94, 0, probe);
|
||||||
|
check_struct_member (FpDeviceClass, 1, 94, 0, open);
|
||||||
|
check_struct_member (FpDeviceClass, 1, 94, 0, close);
|
||||||
|
check_struct_member (FpDeviceClass, 1, 94, 0, enroll);
|
||||||
|
check_struct_member (FpDeviceClass, 1, 94, 0, verify);
|
||||||
|
check_struct_member (FpDeviceClass, 1, 94, 0, identify);
|
||||||
|
check_struct_member (FpDeviceClass, 1, 94, 0, capture);
|
||||||
|
check_struct_member (FpDeviceClass, 1, 94, 0, list);
|
||||||
|
check_struct_member (FpDeviceClass, 1, 94, 0, delete);
|
||||||
|
check_struct_member (FpDeviceClass, 1, 94, 0, cancel);
|
||||||
|
check_struct_member (FpDeviceClass, 1, 94, 0, clear_storage);
|
||||||
|
check_struct_member (FpDeviceClass, 1, 94, 0, suspend);
|
||||||
|
check_struct_member (FpDeviceClass, 1, 94, 0, resume);
|
||||||
|
|
||||||
|
check_struct_member (FpDeviceClass, 1, 94, 0, id);
|
||||||
|
check_struct_member (FpDeviceClass, 1, 94, 0, full_name);
|
||||||
|
check_struct_member (FpDeviceClass, 1, 94, 0, type);
|
||||||
|
check_struct_member (FpDeviceClass, 1, 94, 0, id_table);
|
||||||
|
|
||||||
|
check_struct_member (FpDeviceClass, 1, 94, 0, nr_enroll_stages);
|
||||||
|
check_struct_member (FpDeviceClass, 1, 94, 0, scan_type);
|
||||||
|
|
||||||
|
check_struct_member (FpDeviceClass, 1, 94, 0, features);
|
||||||
|
|
||||||
|
check_struct_member (FpDeviceClass, 1, 94, 0, temp_hot_seconds);
|
||||||
|
check_struct_member (FpDeviceClass, 1, 94, 0, temp_cold_seconds);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_image_device_private (void)
|
||||||
|
{
|
||||||
|
check_struct_size (FpImage, 1, 90, 1);
|
||||||
|
check_struct_size (FpImageDeviceClass, 1, 90, 1);
|
||||||
|
|
||||||
|
check_struct_member (FpImageDeviceClass, 1, 90, 1, bz3_threshold);
|
||||||
|
check_struct_member (FpImageDeviceClass, 1, 90, 1, img_width);
|
||||||
|
check_struct_member (FpImageDeviceClass, 1, 90, 1, img_height);
|
||||||
|
check_struct_member (FpImageDeviceClass, 1, 90, 1, img_open);
|
||||||
|
check_struct_member (FpImageDeviceClass, 1, 90, 1, img_close);
|
||||||
|
check_struct_member (FpImageDeviceClass, 1, 90, 1, activate);
|
||||||
|
check_struct_member (FpImageDeviceClass, 1, 90, 1, change_state);
|
||||||
|
check_struct_member (FpImageDeviceClass, 1, 90, 1, deactivate);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_usb_private (void)
|
||||||
|
{
|
||||||
|
check_struct_size (FpiUsbTransfer, 1, 90, 1);
|
||||||
|
|
||||||
|
check_struct_member (FpiUsbTransfer, 1, 90, 1, device);
|
||||||
|
check_struct_member (FpiUsbTransfer, 1, 90, 1, ssm);
|
||||||
|
check_struct_member (FpiUsbTransfer, 1, 90, 1, length);
|
||||||
|
check_struct_member (FpiUsbTransfer, 1, 90, 1, actual_length);
|
||||||
|
check_struct_member (FpiUsbTransfer, 1, 90, 1, buffer);
|
||||||
|
check_struct_member (FpiUsbTransfer, 1, 90, 1, ref_count);
|
||||||
|
check_struct_member (FpiUsbTransfer, 1, 90, 1, type);
|
||||||
|
check_struct_member (FpiUsbTransfer, 1, 90, 1, endpoint);
|
||||||
|
check_struct_member (FpiUsbTransfer, 1, 90, 1, direction);
|
||||||
|
check_struct_member (FpiUsbTransfer, 1, 90, 1, request_type);
|
||||||
|
check_struct_member (FpiUsbTransfer, 1, 90, 1, recipient);
|
||||||
|
check_struct_member (FpiUsbTransfer, 1, 90, 1, request);
|
||||||
|
check_struct_member (FpiUsbTransfer, 1, 90, 1, value);
|
||||||
|
check_struct_member (FpiUsbTransfer, 1, 90, 1, idx);
|
||||||
|
check_struct_member (FpiUsbTransfer, 1, 90, 1, short_is_error);
|
||||||
|
check_struct_member (FpiUsbTransfer, 1, 90, 1, user_data);
|
||||||
|
check_struct_member (FpiUsbTransfer, 1, 90, 1, callback);
|
||||||
|
check_struct_member (FpiUsbTransfer, 1, 90, 1, free_buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_spi_private (void)
|
||||||
|
{
|
||||||
|
check_struct_size (FpiSpiTransfer, 1, 92, 0);
|
||||||
|
|
||||||
|
check_struct_member (FpiSpiTransfer, 1, 92, 0, device);
|
||||||
|
check_struct_member (FpiSpiTransfer, 1, 92, 0, ssm);
|
||||||
|
check_struct_member (FpiSpiTransfer, 1, 92, 0, length_wr);
|
||||||
|
check_struct_member (FpiSpiTransfer, 1, 92, 0, length_rd);
|
||||||
|
check_struct_member (FpiSpiTransfer, 1, 92, 0, buffer_wr);
|
||||||
|
check_struct_member (FpiSpiTransfer, 1, 92, 0, buffer_rd);
|
||||||
|
check_struct_member (FpiSpiTransfer, 1, 92, 0, ref_count);
|
||||||
|
check_struct_member (FpiSpiTransfer, 1, 92, 0, spidev_fd);
|
||||||
|
check_struct_member (FpiSpiTransfer, 1, 92, 0, user_data);
|
||||||
|
check_struct_member (FpiSpiTransfer, 1, 92, 0, callback);
|
||||||
|
check_struct_member (FpiSpiTransfer, 1, 92, 0, free_buffer_wr);
|
||||||
|
check_struct_member (FpiSpiTransfer, 1, 92, 0, free_buffer_rd);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_device_public_enums (void)
|
||||||
|
{
|
||||||
|
check_type_compatibility (FP_TYPE_DEVICE_TYPE, 1, 90, 1);
|
||||||
|
check_type_compatibility (FP_TYPE_SCAN_TYPE, 1, 90, 1);
|
||||||
|
check_type_compatibility (FP_TYPE_DEVICE_RETRY, 1, 90, 1);
|
||||||
|
check_type_compatibility (FP_TYPE_DEVICE_ERROR, 1, 90, 1);
|
||||||
|
check_type_compatibility (FP_TYPE_DEVICE_ERROR, 1, 90, 3);
|
||||||
|
check_type_compatibility (FP_TYPE_DEVICE_ERROR, 1, 90, 4);
|
||||||
|
check_type_compatibility (FP_TYPE_DEVICE_ERROR, 1, 94, 0);
|
||||||
|
check_type_compatibility (FP_TYPE_DEVICE_FEATURE, 1, 92, 0);
|
||||||
|
check_type_compatibility (FP_TYPE_DEVICE_FEATURE, 1, 94, 0);
|
||||||
|
check_type_compatibility (FP_TYPE_DEVICE_FEATURE, 1, 94, 3);
|
||||||
|
check_type_compatibility (FP_TYPE_TEMPERATURE, 1, 94, 0);
|
||||||
|
check_type_compatibility (FPI_TYPE_DEVICE_UDEV_SUBTYPE_FLAGS, 1, 92, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_device_private_enums (void)
|
||||||
|
{
|
||||||
|
check_type_compatibility (FPI_TYPE_DEVICE_ACTION, 1, 90, 1);
|
||||||
|
check_type_compatibility (FPI_TYPE_DEVICE_ACTION, 1, 92, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_print_public_enums (void)
|
||||||
|
{
|
||||||
|
check_type_compatibility (FP_TYPE_FINGER, 1, 90, 1);
|
||||||
|
check_type_compatibility (FP_TYPE_FINGER_STATUS_FLAGS, 1, 90, 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_print_private_enums (void)
|
||||||
|
{
|
||||||
|
check_type_compatibility (FPI_TYPE_PRINT_TYPE, 1, 90, 1);
|
||||||
|
check_type_compatibility (FPI_TYPE_MATCH_RESULT, 1, 90, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_image_device_enums (void)
|
||||||
|
{
|
||||||
|
check_type_compatibility (FPI_TYPE_IMAGE_FLAGS, 1, 90, 1);
|
||||||
|
check_type_compatibility (FPI_TYPE_IMAGE_FLAGS, 1, 90, 2);
|
||||||
|
check_type_compatibility (FPI_TYPE_IMAGE_DEVICE_STATE, 1, 90, 1);
|
||||||
|
check_type_compatibility (FPI_TYPE_IMAGE_DEVICE_STATE, 1, 90, 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_usb_enums (void)
|
||||||
|
{
|
||||||
|
check_type_compatibility (FPI_TYPE_TRANSFER_TYPE, 1, 90, 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main (int argc, char *argv[])
|
||||||
|
{
|
||||||
|
g_test_init (&argc, &argv, NULL);
|
||||||
|
|
||||||
|
g_test_add_func ("/type/device/private", test_device_type);
|
||||||
|
g_test_add_func ("/type/device/enums", test_device_public_enums);
|
||||||
|
g_test_add_func ("/type/device/private/enums", test_device_private_enums);
|
||||||
|
g_test_add_func ("/type/print/enums", test_print_public_enums);
|
||||||
|
g_test_add_func ("/type/print/private/enums", test_print_private_enums);
|
||||||
|
g_test_add_func ("/type/image-device/private", test_image_device_private);
|
||||||
|
g_test_add_func ("/type/image-device/enums", test_image_device_enums);
|
||||||
|
g_test_add_func ("/type/usb/private", test_usb_private);
|
||||||
|
g_test_add_func ("/type/usb/enums", test_usb_enums);
|
||||||
|
g_test_add_func ("/type/spi/private", test_spi_private);
|
||||||
|
|
||||||
|
return g_test_run ();
|
||||||
|
}
|
||||||
+251
-23
@@ -29,6 +29,120 @@
|
|||||||
#include "test-device-fake.h"
|
#include "test-device-fake.h"
|
||||||
#include "fp-print-private.h"
|
#include "fp-print-private.h"
|
||||||
|
|
||||||
|
#ifdef TEST_TOD_DRIVER
|
||||||
|
|
||||||
|
#include "test-utils-tod.h"
|
||||||
|
|
||||||
|
#undef FPI_TYPE_DEVICE_FAKE
|
||||||
|
#define FPI_TYPE_DEVICE_FAKE (fpt_context_device_driver_get_type ())
|
||||||
|
|
||||||
|
#undef FPI_DEVICE_FAKE
|
||||||
|
#define FPI_DEVICE_FAKE(dev) (G_TYPE_CHECK_INSTANCE_CAST ((dev), FPI_TYPE_DEVICE_FAKE, FpiDeviceFake))
|
||||||
|
|
||||||
|
static GType
|
||||||
|
fpt_context_device_driver_get_type (void)
|
||||||
|
{
|
||||||
|
FptContext *tctx = fpt_context_fake_dev_default ();
|
||||||
|
|
||||||
|
return G_TYPE_FROM_CLASS (FP_DEVICE_GET_CLASS (tctx->device));
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
tod_get_version (FpDeviceClass *device_class,
|
||||||
|
const char **sub_version)
|
||||||
|
{
|
||||||
|
g_autofree char *tod_version = NULL;
|
||||||
|
const char *tod_version_info;
|
||||||
|
const char *tod_subversion_info;
|
||||||
|
|
||||||
|
g_debug ("Getting TOD version for driver '%s'", device_class->id);
|
||||||
|
g_assert_true (g_str_has_prefix (device_class->id, "fake_test_dev_tod"));
|
||||||
|
|
||||||
|
tod_version_info = device_class->id + sizeof ("fake_test_dev_tod");
|
||||||
|
g_debug ("Tod version info is '%s'", tod_version_info);
|
||||||
|
g_assert (*tod_version_info != '\0');
|
||||||
|
|
||||||
|
if (sub_version)
|
||||||
|
*sub_version = NULL;
|
||||||
|
|
||||||
|
if (g_str_equal (tod_version_info, "current"))
|
||||||
|
{
|
||||||
|
*sub_version = TOD_CURRENT_SUBVERSION;
|
||||||
|
return TOD_CURRENT_VERSION;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_assert_true (g_str_has_prefix (device_class->id, "fake_test_dev_tod_v"));
|
||||||
|
|
||||||
|
tod_version_info = device_class->id + sizeof ("fake_test_dev_tod_v") - 1;
|
||||||
|
tod_subversion_info = strchr (tod_version_info, '+');
|
||||||
|
g_assert_nonnull (tod_subversion_info);
|
||||||
|
g_assert (*tod_subversion_info != '\0');
|
||||||
|
|
||||||
|
tod_version = g_strndup (tod_version_info,
|
||||||
|
tod_subversion_info - tod_version_info);
|
||||||
|
tod_subversion_info += 1;
|
||||||
|
|
||||||
|
g_debug ("Tod version is '%s', subversion '%s'",
|
||||||
|
tod_version, tod_subversion_info);
|
||||||
|
|
||||||
|
g_assert_nonnull (tod_version);
|
||||||
|
g_assert (*tod_version != '\0');
|
||||||
|
g_assert (*tod_subversion_info != '\0');
|
||||||
|
|
||||||
|
if (sub_version)
|
||||||
|
*sub_version = tod_subversion_info;
|
||||||
|
|
||||||
|
return atoi (tod_version);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
tod_check_version (FpDeviceClass *device_class,
|
||||||
|
int tod_version,
|
||||||
|
const char *tod_subversion)
|
||||||
|
{
|
||||||
|
#ifdef TEST_TOD_DRIVER
|
||||||
|
g_auto(GStrv) versions = NULL;
|
||||||
|
g_auto(GStrv) wanted_versions = NULL;
|
||||||
|
int version;
|
||||||
|
const char *sub_version;
|
||||||
|
|
||||||
|
version = tod_get_version (device_class, &sub_version);
|
||||||
|
|
||||||
|
if (version != tod_version)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
if (!tod_subversion)
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
versions = g_strsplit (sub_version, ".", -1);
|
||||||
|
g_assert_cmpuint (g_strv_length (versions), ==, 3);
|
||||||
|
|
||||||
|
wanted_versions = g_strsplit (tod_subversion, ".", -1);
|
||||||
|
g_assert_cmpuint (g_strv_length (wanted_versions), ==, 3);
|
||||||
|
|
||||||
|
if (atoi (versions[0]) >= atoi (wanted_versions[0]) &&
|
||||||
|
atoi (versions[1]) > atoi (wanted_versions[1]))
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
return atoi (versions[0]) == atoi (wanted_versions[0]) &&
|
||||||
|
atoi (versions[1]) == atoi (wanted_versions[1]) &&
|
||||||
|
atoi (versions[2]) >= atoi (wanted_versions[2]);
|
||||||
|
#endif
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
tod_check_device_version (FpDevice *device_class,
|
||||||
|
int tod_version,
|
||||||
|
const char *tod_subversion)
|
||||||
|
{
|
||||||
|
return tod_check_version (FP_DEVICE_GET_CLASS (device_class),
|
||||||
|
tod_version,
|
||||||
|
tod_subversion);
|
||||||
|
}
|
||||||
|
|
||||||
/* gcc 12.0.1 is complaining about dangling pointers in the auto_close* functions */
|
/* gcc 12.0.1 is complaining about dangling pointers in the auto_close* functions */
|
||||||
#if G_GNUC_CHECK_VERSION (12, 0)
|
#if G_GNUC_CHECK_VERSION (12, 0)
|
||||||
#pragma GCC diagnostic push
|
#pragma GCC diagnostic push
|
||||||
@@ -39,6 +153,10 @@
|
|||||||
|
|
||||||
typedef FpDevice FpAutoCloseDevice;
|
typedef FpDevice FpAutoCloseDevice;
|
||||||
|
|
||||||
|
/* gcc 12.0.1 is complaining about dangling pointers in the auto_close* functions */
|
||||||
|
#pragma GCC diagnostic push
|
||||||
|
#pragma GCC diagnostic ignored "-Wdangling-pointer"
|
||||||
|
|
||||||
static FpAutoCloseDevice *
|
static FpAutoCloseDevice *
|
||||||
auto_close_fake_device_new (void)
|
auto_close_fake_device_new (void)
|
||||||
{
|
{
|
||||||
@@ -540,6 +658,12 @@ test_driver_features_probe_updates (void)
|
|||||||
FpDeviceClass *dev_class = FP_DEVICE_GET_CLASS (device);
|
FpDeviceClass *dev_class = FP_DEVICE_GET_CLASS (device);
|
||||||
FpiDeviceFake *fake_dev;
|
FpiDeviceFake *fake_dev;
|
||||||
|
|
||||||
|
if (!tod_check_device_version (device, 1, "1.92.0"))
|
||||||
|
{
|
||||||
|
g_test_skip ("Feature not supported by TODv1 versions before 1.92.0");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
g_assert_cmpuint (dev_class->features, !=, FP_DEVICE_FEATURE_NONE);
|
g_assert_cmpuint (dev_class->features, !=, FP_DEVICE_FEATURE_NONE);
|
||||||
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_CAPTURE);
|
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_CAPTURE);
|
||||||
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_IDENTIFY);
|
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_IDENTIFY);
|
||||||
@@ -593,7 +717,10 @@ test_driver_initial_features (void)
|
|||||||
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_STORAGE);
|
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_STORAGE);
|
||||||
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_STORAGE_LIST);
|
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_STORAGE_LIST);
|
||||||
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_STORAGE_DELETE);
|
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_STORAGE_DELETE);
|
||||||
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_STORAGE_CLEAR);
|
if (tod_check_device_version (device, 1, "1.92.0"))
|
||||||
|
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_STORAGE_CLEAR);
|
||||||
|
else
|
||||||
|
g_assert_false (dev_class->features & FP_DEVICE_FEATURE_STORAGE_CLEAR);
|
||||||
|
|
||||||
g_async_initable_init_async (G_ASYNC_INITABLE (device),
|
g_async_initable_init_async (G_ASYNC_INITABLE (device),
|
||||||
G_PRIORITY_DEFAULT, NULL, NULL, NULL);
|
G_PRIORITY_DEFAULT, NULL, NULL, NULL);
|
||||||
@@ -607,7 +734,10 @@ test_driver_initial_features (void)
|
|||||||
g_assert_true (fp_device_has_feature (device, FP_DEVICE_FEATURE_STORAGE));
|
g_assert_true (fp_device_has_feature (device, FP_DEVICE_FEATURE_STORAGE));
|
||||||
g_assert_true (fp_device_has_feature (device, FP_DEVICE_FEATURE_STORAGE_LIST));
|
g_assert_true (fp_device_has_feature (device, FP_DEVICE_FEATURE_STORAGE_LIST));
|
||||||
g_assert_true (fp_device_has_feature (device, FP_DEVICE_FEATURE_STORAGE_DELETE));
|
g_assert_true (fp_device_has_feature (device, FP_DEVICE_FEATURE_STORAGE_DELETE));
|
||||||
g_assert_true (fp_device_has_feature (device, FP_DEVICE_FEATURE_STORAGE_CLEAR));
|
if (tod_check_device_version (device, 1, "1.92.0"))
|
||||||
|
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_STORAGE_CLEAR);
|
||||||
|
else
|
||||||
|
g_assert_false (dev_class->features & FP_DEVICE_FEATURE_STORAGE_CLEAR);
|
||||||
|
|
||||||
g_assert_cmpuint (fp_device_get_features (device),
|
g_assert_cmpuint (fp_device_get_features (device),
|
||||||
==,
|
==,
|
||||||
@@ -617,7 +747,8 @@ test_driver_initial_features (void)
|
|||||||
FP_DEVICE_FEATURE_STORAGE |
|
FP_DEVICE_FEATURE_STORAGE |
|
||||||
FP_DEVICE_FEATURE_STORAGE_LIST |
|
FP_DEVICE_FEATURE_STORAGE_LIST |
|
||||||
FP_DEVICE_FEATURE_STORAGE_DELETE |
|
FP_DEVICE_FEATURE_STORAGE_DELETE |
|
||||||
FP_DEVICE_FEATURE_STORAGE_CLEAR);
|
(tod_check_device_version (device, 1, "1.92.0") ?
|
||||||
|
FP_DEVICE_FEATURE_STORAGE_CLEAR : 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -664,7 +795,10 @@ test_driver_initial_features_no_capture (void)
|
|||||||
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_STORAGE);
|
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_STORAGE);
|
||||||
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_STORAGE_LIST);
|
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_STORAGE_LIST);
|
||||||
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_STORAGE_DELETE);
|
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_STORAGE_DELETE);
|
||||||
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_STORAGE_CLEAR);
|
if (tod_check_version (dev_class, 1, "1.92.0"))
|
||||||
|
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_STORAGE_CLEAR);
|
||||||
|
else
|
||||||
|
g_assert_false (dev_class->features & FP_DEVICE_FEATURE_STORAGE_CLEAR);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -685,7 +819,10 @@ test_driver_initial_features_no_verify (void)
|
|||||||
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_STORAGE);
|
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_STORAGE);
|
||||||
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_STORAGE_LIST);
|
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_STORAGE_LIST);
|
||||||
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_STORAGE_DELETE);
|
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_STORAGE_DELETE);
|
||||||
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_STORAGE_CLEAR);
|
if (tod_check_version (dev_class, 1, "1.92.0"))
|
||||||
|
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_STORAGE_CLEAR);
|
||||||
|
else
|
||||||
|
g_assert_false (dev_class->features & FP_DEVICE_FEATURE_STORAGE_CLEAR);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -706,7 +843,10 @@ test_driver_initial_features_no_identify (void)
|
|||||||
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_STORAGE);
|
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_STORAGE);
|
||||||
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_STORAGE_LIST);
|
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_STORAGE_LIST);
|
||||||
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_STORAGE_DELETE);
|
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_STORAGE_DELETE);
|
||||||
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_STORAGE_CLEAR);
|
if (tod_check_version (dev_class, 1, "1.92.0"))
|
||||||
|
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_STORAGE_CLEAR);
|
||||||
|
else
|
||||||
|
g_assert_false (dev_class->features & FP_DEVICE_FEATURE_STORAGE_CLEAR);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -727,7 +867,10 @@ test_driver_initial_features_no_storage (void)
|
|||||||
g_assert_false (dev_class->features & FP_DEVICE_FEATURE_STORAGE);
|
g_assert_false (dev_class->features & FP_DEVICE_FEATURE_STORAGE);
|
||||||
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_STORAGE_LIST);
|
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_STORAGE_LIST);
|
||||||
g_assert_false (dev_class->features & FP_DEVICE_FEATURE_STORAGE_DELETE);
|
g_assert_false (dev_class->features & FP_DEVICE_FEATURE_STORAGE_DELETE);
|
||||||
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_STORAGE_CLEAR);
|
if (tod_check_version (dev_class, 1, "1.92.0"))
|
||||||
|
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_STORAGE_CLEAR);
|
||||||
|
else
|
||||||
|
g_assert_false (dev_class->features & FP_DEVICE_FEATURE_STORAGE_CLEAR);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -745,10 +888,16 @@ test_driver_initial_features_no_list (void)
|
|||||||
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_IDENTIFY);
|
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_IDENTIFY);
|
||||||
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_VERIFY);
|
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_VERIFY);
|
||||||
g_assert_false (dev_class->features & FP_DEVICE_FEATURE_DUPLICATES_CHECK);
|
g_assert_false (dev_class->features & FP_DEVICE_FEATURE_DUPLICATES_CHECK);
|
||||||
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_STORAGE);
|
if (tod_check_version (dev_class, 1, "1.92.0"))
|
||||||
|
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_STORAGE);
|
||||||
|
else
|
||||||
|
g_assert_false (dev_class->features & FP_DEVICE_FEATURE_STORAGE);
|
||||||
g_assert_false (dev_class->features & FP_DEVICE_FEATURE_STORAGE_LIST);
|
g_assert_false (dev_class->features & FP_DEVICE_FEATURE_STORAGE_LIST);
|
||||||
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_STORAGE_DELETE);
|
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_STORAGE_DELETE);
|
||||||
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_STORAGE_CLEAR);
|
if (tod_check_version (dev_class, 1, "1.92.0"))
|
||||||
|
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_STORAGE_CLEAR);
|
||||||
|
else
|
||||||
|
g_assert_false (dev_class->features & FP_DEVICE_FEATURE_STORAGE_CLEAR);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -769,7 +918,10 @@ test_driver_initial_features_no_delete (void)
|
|||||||
g_assert_false (dev_class->features & FP_DEVICE_FEATURE_STORAGE);
|
g_assert_false (dev_class->features & FP_DEVICE_FEATURE_STORAGE);
|
||||||
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_STORAGE_LIST);
|
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_STORAGE_LIST);
|
||||||
g_assert_false (dev_class->features & FP_DEVICE_FEATURE_STORAGE_DELETE);
|
g_assert_false (dev_class->features & FP_DEVICE_FEATURE_STORAGE_DELETE);
|
||||||
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_STORAGE_CLEAR);
|
if (tod_check_version (dev_class, 1, "1.92.0"))
|
||||||
|
g_assert_true (dev_class->features & FP_DEVICE_FEATURE_STORAGE_CLEAR);
|
||||||
|
else
|
||||||
|
g_assert_false (dev_class->features & FP_DEVICE_FEATURE_STORAGE_CLEAR);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -2112,6 +2264,12 @@ test_driver_identify_suspend_continues (void)
|
|||||||
FpiDeviceFake *fake_dev;
|
FpiDeviceFake *fake_dev;
|
||||||
FpPrint *expected_matched;
|
FpPrint *expected_matched;
|
||||||
|
|
||||||
|
if (!tod_check_version (dev_class, 1, "1.94.0"))
|
||||||
|
{
|
||||||
|
g_test_skip ("Feature not supported by TODv1 versions before 1.94.0");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
device = g_object_new (FPI_TYPE_DEVICE_FAKE, NULL);
|
device = g_object_new (FPI_TYPE_DEVICE_FAKE, NULL);
|
||||||
fake_dev = FPI_DEVICE_FAKE (device);
|
fake_dev = FPI_DEVICE_FAKE (device);
|
||||||
orig_identify = dev_class->identify;
|
orig_identify = dev_class->identify;
|
||||||
@@ -2178,6 +2336,12 @@ test_driver_identify_suspend_succeeds (void)
|
|||||||
FpiDeviceFake *fake_dev;
|
FpiDeviceFake *fake_dev;
|
||||||
FpPrint *expected_matched;
|
FpPrint *expected_matched;
|
||||||
|
|
||||||
|
if (!tod_check_version (dev_class, 1, "1.94.0"))
|
||||||
|
{
|
||||||
|
g_test_skip ("Feature not supported by TODv1 versions before 1.94.0");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
device = g_object_new (FPI_TYPE_DEVICE_FAKE, NULL);
|
device = g_object_new (FPI_TYPE_DEVICE_FAKE, NULL);
|
||||||
fake_dev = FPI_DEVICE_FAKE (device);
|
fake_dev = FPI_DEVICE_FAKE (device);
|
||||||
orig_identify = dev_class->identify;
|
orig_identify = dev_class->identify;
|
||||||
@@ -2240,6 +2404,12 @@ test_driver_identify_suspend_busy_error (void)
|
|||||||
FpiDeviceFake *fake_dev;
|
FpiDeviceFake *fake_dev;
|
||||||
FpPrint *expected_matched;
|
FpPrint *expected_matched;
|
||||||
|
|
||||||
|
if (!tod_check_version (dev_class, 1, "1.94.0"))
|
||||||
|
{
|
||||||
|
g_test_skip ("Feature not supported by TODv1 versions before 1.94.0");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
device = g_object_new (FPI_TYPE_DEVICE_FAKE, NULL);
|
device = g_object_new (FPI_TYPE_DEVICE_FAKE, NULL);
|
||||||
fake_dev = FPI_DEVICE_FAKE (device);
|
fake_dev = FPI_DEVICE_FAKE (device);
|
||||||
orig_identify = dev_class->identify;
|
orig_identify = dev_class->identify;
|
||||||
@@ -2297,6 +2467,12 @@ test_driver_identify_suspend_while_idle (void)
|
|||||||
g_autoptr(GError) error = NULL;
|
g_autoptr(GError) error = NULL;
|
||||||
FpiDeviceFake *fake_dev;
|
FpiDeviceFake *fake_dev;
|
||||||
|
|
||||||
|
if (!tod_check_version (dev_class, 1, "1.94.0"))
|
||||||
|
{
|
||||||
|
g_test_skip ("Feature not supported by TODv1 versions before 1.94.0");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
device = g_object_new (FPI_TYPE_DEVICE_FAKE, NULL);
|
device = g_object_new (FPI_TYPE_DEVICE_FAKE, NULL);
|
||||||
fake_dev = FPI_DEVICE_FAKE (device);
|
fake_dev = FPI_DEVICE_FAKE (device);
|
||||||
|
|
||||||
@@ -2341,6 +2517,12 @@ test_driver_identify_warmup_cooldown (void)
|
|||||||
FpiDeviceFake *fake_dev;
|
FpiDeviceFake *fake_dev;
|
||||||
gint64 start_time;
|
gint64 start_time;
|
||||||
|
|
||||||
|
if (!tod_check_version (dev_class, 1, "1.94.0"))
|
||||||
|
{
|
||||||
|
g_test_skip ("Feature not supported by TODv1 versions before 1.94.0");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
dev_class->temp_hot_seconds = 2;
|
dev_class->temp_hot_seconds = 2;
|
||||||
dev_class->temp_cold_seconds = 5;
|
dev_class->temp_cold_seconds = 5;
|
||||||
|
|
||||||
@@ -2644,6 +2826,12 @@ test_driver_clear_storage (void)
|
|||||||
FpiDeviceFake *fake_dev = FPI_DEVICE_FAKE (device);
|
FpiDeviceFake *fake_dev = FPI_DEVICE_FAKE (device);
|
||||||
gboolean ret;
|
gboolean ret;
|
||||||
|
|
||||||
|
if (!tod_check_device_version (device, 1, "1.92.0"))
|
||||||
|
{
|
||||||
|
g_test_skip ("Feature not supported by TODv1 versions before 1.92.0");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
ret = fp_device_clear_storage_sync (device, NULL, &error);
|
ret = fp_device_clear_storage_sync (device, NULL, &error);
|
||||||
g_assert (fake_dev->last_called_function == dev_class->clear_storage);
|
g_assert (fake_dev->last_called_function == dev_class->clear_storage);
|
||||||
g_assert_no_error (error);
|
g_assert_no_error (error);
|
||||||
@@ -2659,6 +2847,12 @@ test_driver_clear_storage_error (void)
|
|||||||
FpiDeviceFake *fake_dev = FPI_DEVICE_FAKE (device);
|
FpiDeviceFake *fake_dev = FPI_DEVICE_FAKE (device);
|
||||||
gboolean ret;
|
gboolean ret;
|
||||||
|
|
||||||
|
if (!tod_check_device_version (device, 1, "1.92.0"))
|
||||||
|
{
|
||||||
|
g_test_skip ("Feature not supported by TODv1 versions before 1.92.0");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
fake_dev->ret_error = fpi_device_error_new (FP_DEVICE_ERROR_GENERAL);
|
fake_dev->ret_error = fpi_device_error_new (FP_DEVICE_ERROR_GENERAL);
|
||||||
ret = fp_device_clear_storage_sync (device, NULL, &error);
|
ret = fp_device_clear_storage_sync (device, NULL, &error);
|
||||||
g_assert (fake_dev->last_called_function == dev_class->clear_storage);
|
g_assert (fake_dev->last_called_function == dev_class->clear_storage);
|
||||||
@@ -2765,6 +2959,12 @@ test_driver_critical (void)
|
|||||||
void (*orig_verify) (FpDevice *device) = dev_class->verify;
|
void (*orig_verify) (FpDevice *device) = dev_class->verify;
|
||||||
FpiDeviceFake *fake_dev = FPI_DEVICE_FAKE (device);
|
FpiDeviceFake *fake_dev = FPI_DEVICE_FAKE (device);
|
||||||
|
|
||||||
|
if (!tod_check_device_version (device, 1, "1.94.0"))
|
||||||
|
{
|
||||||
|
g_test_skip ("Feature not supported by TODv1 versions before 1.94.0");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
fake_dev->last_called_function = NULL;
|
fake_dev->last_called_function = NULL;
|
||||||
|
|
||||||
dev_class->verify = fake_device_stub_verify;
|
dev_class->verify = fake_device_stub_verify;
|
||||||
@@ -2973,6 +3173,12 @@ test_driver_action_is_cancelled_open (void)
|
|||||||
g_autoptr(GError) error = NULL;
|
g_autoptr(GError) error = NULL;
|
||||||
FpiDeviceFake *fake_dev;
|
FpiDeviceFake *fake_dev;
|
||||||
|
|
||||||
|
if (!tod_check_version (dev_class, 1, "1.94.0"))
|
||||||
|
{
|
||||||
|
g_test_skip ("Feature not supported by TODv1 versions before 1.94.0");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
dev_class->open = test_driver_action_is_cancelled_open_vfunc;
|
dev_class->open = test_driver_action_is_cancelled_open_vfunc;
|
||||||
device = g_object_new (FPI_TYPE_DEVICE_FAKE, NULL);
|
device = g_object_new (FPI_TYPE_DEVICE_FAKE, NULL);
|
||||||
fake_dev = FPI_DEVICE_FAKE (device);
|
fake_dev = FPI_DEVICE_FAKE (device);
|
||||||
@@ -2993,6 +3199,12 @@ test_driver_action_internally_cancelled_open (void)
|
|||||||
g_autoptr(GError) error = NULL;
|
g_autoptr(GError) error = NULL;
|
||||||
FpiDeviceFake *fake_dev;
|
FpiDeviceFake *fake_dev;
|
||||||
|
|
||||||
|
if (!tod_check_version (dev_class, 1, "1.94.0"))
|
||||||
|
{
|
||||||
|
g_test_skip ("Feature not supported by TODv1 versions before 1.94.0");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
dev_class->open = test_driver_action_is_cancelled_open_vfunc;
|
dev_class->open = test_driver_action_is_cancelled_open_vfunc;
|
||||||
device = g_object_new (FPI_TYPE_DEVICE_FAKE, NULL);
|
device = g_object_new (FPI_TYPE_DEVICE_FAKE, NULL);
|
||||||
fake_dev = FPI_DEVICE_FAKE (device);
|
fake_dev = FPI_DEVICE_FAKE (device);
|
||||||
@@ -3142,11 +3354,20 @@ test_driver_action_error_all (void)
|
|||||||
g_assert_error (error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_DATA_INVALID);
|
g_assert_error (error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_DATA_INVALID);
|
||||||
g_clear_error (&error);
|
g_clear_error (&error);
|
||||||
|
|
||||||
fake_dev->ret_error = fpi_device_error_new (FP_DEVICE_ERROR_DATA_INVALID);
|
if (tod_check_device_version (device, 1, "1.92.0"))
|
||||||
g_assert_false (fp_device_clear_storage_sync (device, NULL, &error));
|
{
|
||||||
g_assert_true (fake_dev->last_called_function == dev_class->clear_storage);
|
fake_dev->ret_error = fpi_device_error_new (FP_DEVICE_ERROR_DATA_INVALID);
|
||||||
g_assert_error (error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_DATA_INVALID);
|
g_assert_false (fp_device_clear_storage_sync (device, NULL, &error));
|
||||||
g_clear_error (&error);
|
g_assert_true (fake_dev->last_called_function == dev_class->clear_storage);
|
||||||
|
g_assert_error (error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_DATA_INVALID);
|
||||||
|
g_clear_error (&error);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
g_assert_false (fp_device_clear_storage_sync (device, NULL, &error));
|
||||||
|
g_assert_error (error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_NOT_SUPPORTED);
|
||||||
|
g_clear_error (&error);
|
||||||
|
}
|
||||||
|
|
||||||
/* Test close last, as we can't operate on a closed device. */
|
/* Test close last, as we can't operate on a closed device. */
|
||||||
fake_dev->ret_error = fpi_device_error_new (FP_DEVICE_ERROR_DATA_INVALID);
|
fake_dev->ret_error = fpi_device_error_new (FP_DEVICE_ERROR_DATA_INVALID);
|
||||||
@@ -3247,15 +3468,18 @@ test_driver_action_error_fallback_all (void)
|
|||||||
g_assert_error (error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_GENERAL);
|
g_assert_error (error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_GENERAL);
|
||||||
g_clear_error (&error);
|
g_clear_error (&error);
|
||||||
|
|
||||||
g_test_expect_message (G_LOG_DOMAIN, G_LOG_LEVEL_WARNING,
|
if (tod_check_device_version (device, 1, "1.92.0"))
|
||||||
"*Device failed to pass an error to generic action "
|
{
|
||||||
"error function*");
|
g_test_expect_message (G_LOG_DOMAIN, G_LOG_LEVEL_WARNING,
|
||||||
|
"*Device failed to pass an error to generic action "
|
||||||
|
"error function*");
|
||||||
|
|
||||||
g_assert_false (fp_device_clear_storage_sync (device, NULL, &error));
|
g_assert_false (fp_device_clear_storage_sync (device, NULL, &error));
|
||||||
g_test_assert_expected_messages ();
|
g_test_assert_expected_messages ();
|
||||||
g_assert_true (fake_dev->last_called_function == dev_class->clear_storage);
|
g_assert_true (fake_dev->last_called_function == dev_class->clear_storage);
|
||||||
g_assert_error (error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_GENERAL);
|
g_assert_error (error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_GENERAL);
|
||||||
g_clear_error (&error);
|
g_clear_error (&error);
|
||||||
|
}
|
||||||
|
|
||||||
/* Test close last, as we can't operate on a closed device. */
|
/* Test close last, as we can't operate on a closed device. */
|
||||||
g_test_expect_message (G_LOG_DOMAIN, G_LOG_LEVEL_WARNING,
|
g_test_expect_message (G_LOG_DOMAIN, G_LOG_LEVEL_WARNING,
|
||||||
@@ -3390,6 +3614,10 @@ test_driver_retry_error_types (void)
|
|||||||
int
|
int
|
||||||
main (int argc, char *argv[])
|
main (int argc, char *argv[])
|
||||||
{
|
{
|
||||||
|
#ifdef TEST_TOD_DRIVER
|
||||||
|
g_autoptr(FptContext) tctx = fpt_context_fake_dev_default ();
|
||||||
|
#endif
|
||||||
|
|
||||||
g_test_init (&argc, &argv, NULL);
|
g_test_init (&argc, &argv, NULL);
|
||||||
|
|
||||||
g_test_add_func ("/driver/get_driver", test_driver_get_driver);
|
g_test_add_func ("/driver/get_driver", test_driver_get_driver);
|
||||||
|
|||||||
@@ -0,0 +1,67 @@
|
|||||||
|
/*
|
||||||
|
* Unit tests for libfprint
|
||||||
|
* Copyright (C) 2020 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 "test-utils-tod.h"
|
||||||
|
|
||||||
|
static FptContext *fake_context = NULL;
|
||||||
|
|
||||||
|
FptContext *
|
||||||
|
fpt_context_new_with_fake_dev (void)
|
||||||
|
{
|
||||||
|
FptContext *tctx;
|
||||||
|
GPtrArray *devices;
|
||||||
|
const char *tod_name;
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
tctx = fpt_context_new ();
|
||||||
|
devices = fp_context_get_devices (tctx->fp_context);
|
||||||
|
tod_name = g_getenv ("FP_TOD_TEST_DRIVER_NAME");
|
||||||
|
|
||||||
|
g_assert_nonnull (tod_name);
|
||||||
|
g_assert_nonnull (devices);
|
||||||
|
g_assert_cmpuint (devices->len, ==, 1);
|
||||||
|
|
||||||
|
for (i = 0; i < devices->len; ++i)
|
||||||
|
{
|
||||||
|
FpDevice *device = devices->pdata[i];
|
||||||
|
|
||||||
|
if (g_strcmp0 (fp_device_get_driver (device), tod_name) == 0)
|
||||||
|
{
|
||||||
|
tctx->device = device;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
g_assert_true (FP_IS_DEVICE (tctx->device));
|
||||||
|
g_object_add_weak_pointer (G_OBJECT (tctx->device), (gpointer) & tctx->device);
|
||||||
|
|
||||||
|
return tctx;
|
||||||
|
}
|
||||||
|
|
||||||
|
FptContext *
|
||||||
|
fpt_context_fake_dev_default (void)
|
||||||
|
{
|
||||||
|
if (fake_context)
|
||||||
|
return fake_context;
|
||||||
|
|
||||||
|
fake_context = fpt_context_new_with_fake_dev ();
|
||||||
|
return fake_context;
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
/*
|
||||||
|
* Unit tests for libfprint
|
||||||
|
* Copyright (C) 2020 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 "test-utils.h"
|
||||||
|
|
||||||
|
FptContext * fpt_context_new_with_fake_dev (void);
|
||||||
|
|
||||||
|
FptContext * fpt_context_fake_dev_default (void);
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
# TOD drivers to use for testing
|
||||||
|
|
||||||
|
This directory is used by the test-suite to load and verify pre-built drivers.
|
||||||
|
|
||||||
|
For main testing this directory should contain the "fake_test_dev" driver (AKA
|
||||||
|
test-device-fake) built using the minimum libfprint TOD we want to support.
|
||||||
|
|
||||||
|
In this way the library is loaded during tests and tested for all the upstream
|
||||||
|
tests and particularly test-fpi-device.
|
||||||
|
|
||||||
|
Such binaries are compiled (for each platform) using the [libfprint TOD test
|
||||||
|
drivers](https://gitlab.freedesktop.org/3v1n0/libfprint-tod-test-drivers)
|
||||||
|
project, per each supported version.
|
||||||
@@ -0,0 +1,148 @@
|
|||||||
|
/*
|
||||||
|
* FpDevice - A fingerprint reader device
|
||||||
|
* 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
|
||||||
|
|
||||||
|
#include "tod/tod-macros.h"
|
||||||
|
|
||||||
|
typedef struct _FpDevice FpDevice;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
FP_DEVICE_TYPE_TODV1_90_1_VIRTUAL,
|
||||||
|
FP_DEVICE_TYPE_TODV1_90_1_USB,
|
||||||
|
} FpDeviceTypeTODV1_90_1;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
FP_DEVICE_TYPE_TODV1_92_0_VIRTUAL,
|
||||||
|
FP_DEVICE_TYPE_TODV1_92_0_USB,
|
||||||
|
FP_DEVICE_TYPE_TODV1_92_0_UDEV,
|
||||||
|
} FpDeviceTypeTODV1_92_0;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
FP_SCAN_TYPE_TODV1_90_1_SWIPE,
|
||||||
|
FP_SCAN_TYPE_TODV1_90_1_PRESS,
|
||||||
|
} FpScanTypeTODV1_90_1;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
FP_DEVICE_RETRY_TODV1_90_1_GENERAL,
|
||||||
|
FP_DEVICE_RETRY_TODV1_90_1_TOO_SHORT,
|
||||||
|
FP_DEVICE_RETRY_TODV1_90_1_CENTER_FINGER,
|
||||||
|
FP_DEVICE_RETRY_TODV1_90_1_REMOVE_FINGER,
|
||||||
|
} FpDeviceRetryTODV1_90_1;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
FP_DEVICE_ERROR_TODV1_90_1_GENERAL,
|
||||||
|
FP_DEVICE_ERROR_TODV1_90_1_NOT_SUPPORTED,
|
||||||
|
FP_DEVICE_ERROR_TODV1_90_1_NOT_OPEN,
|
||||||
|
FP_DEVICE_ERROR_TODV1_90_1_ALREADY_OPEN,
|
||||||
|
FP_DEVICE_ERROR_TODV1_90_1_BUSY,
|
||||||
|
FP_DEVICE_ERROR_TODV1_90_1_PROTO,
|
||||||
|
FP_DEVICE_ERROR_TODV1_90_1_DATA_INVALID,
|
||||||
|
FP_DEVICE_ERROR_TODV1_90_1_DATA_NOT_FOUND,
|
||||||
|
FP_DEVICE_ERROR_TODV1_90_1_DATA_FULL,
|
||||||
|
} FpDeviceErrorTODV1_90_1;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
FP_DEVICE_ERROR_TODV1_90_3_GENERAL,
|
||||||
|
FP_DEVICE_ERROR_TODV1_90_3_NOT_SUPPORTED,
|
||||||
|
FP_DEVICE_ERROR_TODV1_90_3_NOT_OPEN,
|
||||||
|
FP_DEVICE_ERROR_TODV1_90_3_ALREADY_OPEN,
|
||||||
|
FP_DEVICE_ERROR_TODV1_90_3_BUSY,
|
||||||
|
FP_DEVICE_ERROR_TODV1_90_3_PROTO,
|
||||||
|
FP_DEVICE_ERROR_TODV1_90_3_DATA_INVALID,
|
||||||
|
FP_DEVICE_ERROR_TODV1_90_3_DATA_NOT_FOUND,
|
||||||
|
FP_DEVICE_ERROR_TODV1_90_3_DATA_FULL,
|
||||||
|
FP_DEVICE_ERROR_TODV1_90_3_DATA_DUPLICATE,
|
||||||
|
} FpDeviceErrorTODV1_90_3;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
FP_DEVICE_ERROR_TODV1_90_4_GENERAL,
|
||||||
|
FP_DEVICE_ERROR_TODV1_90_4_NOT_SUPPORTED,
|
||||||
|
FP_DEVICE_ERROR_TODV1_90_4_NOT_OPEN,
|
||||||
|
FP_DEVICE_ERROR_TODV1_90_4_ALREADY_OPEN,
|
||||||
|
FP_DEVICE_ERROR_TODV1_90_4_BUSY,
|
||||||
|
FP_DEVICE_ERROR_TODV1_90_4_PROTO,
|
||||||
|
FP_DEVICE_ERROR_TODV1_90_4_DATA_INVALID,
|
||||||
|
FP_DEVICE_ERROR_TODV1_90_4_DATA_NOT_FOUND,
|
||||||
|
FP_DEVICE_ERROR_TODV1_90_4_DATA_FULL,
|
||||||
|
FP_DEVICE_ERROR_TODV1_90_4_DATA_DUPLICATE,
|
||||||
|
/* Leave some room to add more DATA related errors */
|
||||||
|
FP_DEVICE_ERROR_TODV1_90_4_REMOVED = 0x100,
|
||||||
|
} FpDeviceErrorTODV1_90_4;
|
||||||
|
|
||||||
|
typedef enum /*< flags >*/ {
|
||||||
|
FP_DEVICE_FEATURE_TODV1_92_0_NONE = 0,
|
||||||
|
FP_DEVICE_FEATURE_TODV1_92_0_CAPTURE = 1 << 0,
|
||||||
|
FP_DEVICE_FEATURE_TODV1_92_0_IDENTIFY = 1 << 1,
|
||||||
|
FP_DEVICE_FEATURE_TODV1_92_0_VERIFY = 1 << 2,
|
||||||
|
FP_DEVICE_FEATURE_TODV1_92_0_STORAGE = 1 << 3,
|
||||||
|
FP_DEVICE_FEATURE_TODV1_92_0_STORAGE_LIST = 1 << 4,
|
||||||
|
FP_DEVICE_FEATURE_TODV1_92_0_STORAGE_DELETE = 1 << 5,
|
||||||
|
FP_DEVICE_FEATURE_TODV1_92_0_STORAGE_CLEAR = 1 << 6,
|
||||||
|
FP_DEVICE_FEATURE_TODV1_92_0_DUPLICATES_CHECK = 1 << 7,
|
||||||
|
} FpDeviceFeatureTODV1_92_0;
|
||||||
|
|
||||||
|
typedef enum /*< flags >*/ {
|
||||||
|
FP_DEVICE_FEATURE_TODV1_94_0_NONE = 0,
|
||||||
|
FP_DEVICE_FEATURE_TODV1_94_0_CAPTURE = 1 << 0,
|
||||||
|
FP_DEVICE_FEATURE_TODV1_94_0_IDENTIFY = 1 << 1,
|
||||||
|
FP_DEVICE_FEATURE_TODV1_94_0_VERIFY = 1 << 2,
|
||||||
|
FP_DEVICE_FEATURE_TODV1_94_0_STORAGE = 1 << 3,
|
||||||
|
FP_DEVICE_FEATURE_TODV1_94_0_STORAGE_LIST = 1 << 4,
|
||||||
|
FP_DEVICE_FEATURE_TODV1_94_0_STORAGE_DELETE = 1 << 5,
|
||||||
|
FP_DEVICE_FEATURE_TODV1_94_0_STORAGE_CLEAR = 1 << 6,
|
||||||
|
FP_DEVICE_FEATURE_TODV1_94_0_DUPLICATES_CHECK = 1 << 7,
|
||||||
|
FP_DEVICE_FEATURE_TODV1_94_0_ALWAYS_ON = 1 << 8,
|
||||||
|
} FpDeviceFeatureTODV1_94_0;
|
||||||
|
|
||||||
|
typedef enum /*< flags >*/ {
|
||||||
|
FP_DEVICE_FEATURE_TODV1_94_3_NONE = 0,
|
||||||
|
FP_DEVICE_FEATURE_TODV1_94_3_CAPTURE = 1 << 0,
|
||||||
|
FP_DEVICE_FEATURE_TODV1_94_3_IDENTIFY = 1 << 1,
|
||||||
|
FP_DEVICE_FEATURE_TODV1_94_3_VERIFY = 1 << 2,
|
||||||
|
FP_DEVICE_FEATURE_TODV1_94_3_STORAGE = 1 << 3,
|
||||||
|
FP_DEVICE_FEATURE_TODV1_94_3_STORAGE_LIST = 1 << 4,
|
||||||
|
FP_DEVICE_FEATURE_TODV1_94_3_STORAGE_DELETE = 1 << 5,
|
||||||
|
FP_DEVICE_FEATURE_TODV1_94_3_STORAGE_CLEAR = 1 << 6,
|
||||||
|
FP_DEVICE_FEATURE_TODV1_94_3_DUPLICATES_CHECK = 1 << 7,
|
||||||
|
FP_DEVICE_FEATURE_TODV1_94_3_ALWAYS_ON = 1 << 8,
|
||||||
|
FP_DEVICE_FEATURE_TODV1_94_3_UPDATE_PRINT = 1 << 9,
|
||||||
|
} FpDeviceFeatureTODV1_94_3;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
FP_DEVICE_ERROR_TODV1_94_0_GENERAL,
|
||||||
|
FP_DEVICE_ERROR_TODV1_94_0_NOT_SUPPORTED,
|
||||||
|
FP_DEVICE_ERROR_TODV1_94_0_NOT_OPEN,
|
||||||
|
FP_DEVICE_ERROR_TODV1_94_0_ALREADY_OPEN,
|
||||||
|
FP_DEVICE_ERROR_TODV1_94_0_BUSY,
|
||||||
|
FP_DEVICE_ERROR_TODV1_94_0_PROTO,
|
||||||
|
FP_DEVICE_ERROR_TODV1_94_0_DATA_INVALID,
|
||||||
|
FP_DEVICE_ERROR_TODV1_94_0_DATA_NOT_FOUND,
|
||||||
|
FP_DEVICE_ERROR_TODV1_94_0_DATA_FULL,
|
||||||
|
FP_DEVICE_ERROR_TODV1_94_0_DATA_DUPLICATE,
|
||||||
|
/* Leave some room to add more DATA related errors */
|
||||||
|
FP_DEVICE_ERROR_TODV1_94_0_REMOVED = 0x100,
|
||||||
|
FP_DEVICE_ERROR_TODV1_94_0_TOO_HOT,
|
||||||
|
} FpDeviceErrorTODV1_94_0;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
FP_TEMPERATURE_TODV1_94_0_COLD,
|
||||||
|
FP_TEMPERATURE_TODV1_94_0_WARM,
|
||||||
|
FP_TEMPERATURE_TODV1_94_0_HOT,
|
||||||
|
} FpTemperatureTODV1_94_0;
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
/*
|
||||||
|
* FpDevice - A fingerprint reader device
|
||||||
|
* 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
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
FP_FINGER_TODV1_90_1_UNKNOWN = 0,
|
||||||
|
FP_FINGER_TODV1_90_1_LEFT_THUMB,
|
||||||
|
FP_FINGER_TODV1_90_1_LEFT_INDEX,
|
||||||
|
FP_FINGER_TODV1_90_1_LEFT_MIDDLE,
|
||||||
|
FP_FINGER_TODV1_90_1_LEFT_RING,
|
||||||
|
FP_FINGER_TODV1_90_1_LEFT_LITTLE,
|
||||||
|
FP_FINGER_TODV1_90_1_RIGHT_THUMB,
|
||||||
|
FP_FINGER_TODV1_90_1_RIGHT_INDEX,
|
||||||
|
FP_FINGER_TODV1_90_1_RIGHT_MIDDLE,
|
||||||
|
FP_FINGER_TODV1_90_1_RIGHT_RING,
|
||||||
|
FP_FINGER_TODV1_90_1_RIGHT_LITTLE,
|
||||||
|
|
||||||
|
FP_FINGER_TODV1_90_1_FIRST = FP_FINGER_TODV1_90_1_LEFT_THUMB,
|
||||||
|
FP_FINGER_TODV1_90_1_LAST = FP_FINGER_TODV1_90_1_RIGHT_LITTLE,
|
||||||
|
} FpFingerTODV1_90_1;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
FP_FINGER_STATUS_TODV1_90_4_NONE = 0,
|
||||||
|
FP_FINGER_STATUS_TODV1_90_4_NEEDED = 1 << 0,
|
||||||
|
FP_FINGER_STATUS_TODV1_90_4_PRESENT = 1 << 1,
|
||||||
|
} FpFingerStatusFlagsTODV1_90_4;
|
||||||
|
|
||||||
|
/* Private flags */
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
FPI_PRINT_TODV1_90_1_UNDEFINED = 0,
|
||||||
|
FPI_PRINT_TODV1_90_1_RAW,
|
||||||
|
FPI_PRINT_TODV1_90_1_NBIS,
|
||||||
|
} FpiPrintTypeTODV1_90_1;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
FPI_MATCH_TODV1_90_1_ERROR = -1,
|
||||||
|
FPI_MATCH_TODV1_90_1_FAIL,
|
||||||
|
FPI_MATCH_TODV1_90_1_SUCCESS,
|
||||||
|
} FpiMatchResultTODV1_90_1;
|
||||||
@@ -0,0 +1,246 @@
|
|||||||
|
/*
|
||||||
|
* FpDevice - A fingerprint reader device
|
||||||
|
* 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
|
||||||
|
|
||||||
|
#include <glib.h>
|
||||||
|
#include <glib-object.h>
|
||||||
|
|
||||||
|
#include "base-fp-device.h"
|
||||||
|
|
||||||
|
typedef struct _GUsbDevice GUsbDevice;
|
||||||
|
|
||||||
|
typedef struct _FpIdEntryTODV1_90_1 FpIdEntryTODV1_90_1;
|
||||||
|
|
||||||
|
struct _FpIdEntryTODV1_90_1
|
||||||
|
{
|
||||||
|
union
|
||||||
|
{
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
guint pid;
|
||||||
|
guint vid;
|
||||||
|
};
|
||||||
|
const gchar *virtual_envvar;
|
||||||
|
};
|
||||||
|
guint64 driver_data;
|
||||||
|
|
||||||
|
/*< private >*/
|
||||||
|
/* padding for future expansion */
|
||||||
|
TOD_PADDING (16, 0);
|
||||||
|
};
|
||||||
|
|
||||||
|
struct _FpDeviceClassTODV1_90_1
|
||||||
|
{
|
||||||
|
/*< private >*/
|
||||||
|
GObjectClass parent_class;
|
||||||
|
|
||||||
|
/*< public >*/
|
||||||
|
/* Static information about the driver. */
|
||||||
|
const gchar *id;
|
||||||
|
const gchar *full_name;
|
||||||
|
FpDeviceTypeTODV1_90_1 type;
|
||||||
|
const FpIdEntryTODV1_90_1 *id_table;
|
||||||
|
|
||||||
|
/* Defaults for device properties */
|
||||||
|
gint nr_enroll_stages;
|
||||||
|
FpScanTypeTODV1_90_1 scan_type;
|
||||||
|
|
||||||
|
/* Callbacks */
|
||||||
|
gint (*usb_discover) (GUsbDevice *usb_device);
|
||||||
|
void (*probe) (FpDevice *device);
|
||||||
|
void (*open) (FpDevice *device);
|
||||||
|
void (*close) (FpDevice *device);
|
||||||
|
void (*enroll) (FpDevice *device);
|
||||||
|
void (*verify) (FpDevice *device);
|
||||||
|
void (*identify) (FpDevice *device);
|
||||||
|
void (*capture) (FpDevice *device);
|
||||||
|
void (*list) (FpDevice *device);
|
||||||
|
void (*delete) (FpDevice * device);
|
||||||
|
|
||||||
|
void (*cancel) (FpDevice *device);
|
||||||
|
|
||||||
|
/*< private >*/
|
||||||
|
/* padding for future expansion */
|
||||||
|
TOD_PADDING (32, 0);
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct _FpDeviceClassTODV1_90_1 FpDeviceClassTODV1_90_1;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
FPI_DEVICE_ACTION_TODV1_90_1_NONE = 0,
|
||||||
|
FPI_DEVICE_ACTION_TODV1_90_1_PROBE,
|
||||||
|
FPI_DEVICE_ACTION_TODV1_90_1_OPEN,
|
||||||
|
FPI_DEVICE_ACTION_TODV1_90_1_CLOSE,
|
||||||
|
FPI_DEVICE_ACTION_TODV1_90_1_ENROLL,
|
||||||
|
FPI_DEVICE_ACTION_TODV1_90_1_VERIFY,
|
||||||
|
FPI_DEVICE_ACTION_TODV1_90_1_IDENTIFY,
|
||||||
|
FPI_DEVICE_ACTION_TODV1_90_1_CAPTURE,
|
||||||
|
FPI_DEVICE_ACTION_TODV1_90_1_LIST,
|
||||||
|
FPI_DEVICE_ACTION_TODV1_90_1_DELETE,
|
||||||
|
} FpiDeviceActionTODV1_90_1;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
FPI_DEVICE_ACTION_TODV1_92_0_NONE = 0,
|
||||||
|
FPI_DEVICE_ACTION_TODV1_92_0_PROBE,
|
||||||
|
FPI_DEVICE_ACTION_TODV1_92_0_OPEN,
|
||||||
|
FPI_DEVICE_ACTION_TODV1_92_0_CLOSE,
|
||||||
|
FPI_DEVICE_ACTION_TODV1_92_0_ENROLL,
|
||||||
|
FPI_DEVICE_ACTION_TODV1_92_0_VERIFY,
|
||||||
|
FPI_DEVICE_ACTION_TODV1_92_0_IDENTIFY,
|
||||||
|
FPI_DEVICE_ACTION_TODV1_92_0_CAPTURE,
|
||||||
|
FPI_DEVICE_ACTION_TODV1_92_0_LIST,
|
||||||
|
FPI_DEVICE_ACTION_TODV1_92_0_DELETE,
|
||||||
|
FPI_DEVICE_ACTION_TODV1_92_0_CLEAR_STORAGE
|
||||||
|
} FpiDeviceActionTODV1_92_0;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
FPI_DEVICE_UDEV_SUBTYPE_TODV1_92_0_SPIDEV = 1 << 0,
|
||||||
|
FPI_DEVICE_UDEV_SUBTYPE_TODV1_92_0_HIDRAW = 1 << 1,
|
||||||
|
} FpiDeviceUdevSubtypeFlagsTODV1_92_0;
|
||||||
|
|
||||||
|
typedef struct _FpIdEntryTODV1_92_0 FpIdEntryTODV1_92_0;
|
||||||
|
|
||||||
|
struct _FpIdEntryTODV1_92_0
|
||||||
|
{
|
||||||
|
union
|
||||||
|
{
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
guint pid;
|
||||||
|
guint vid;
|
||||||
|
};
|
||||||
|
const gchar *virtual_envvar;
|
||||||
|
};
|
||||||
|
guint64 driver_data;
|
||||||
|
|
||||||
|
/* Elements added after TODv1 */
|
||||||
|
union
|
||||||
|
{
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
FpiDeviceUdevSubtypeFlagsTODV1_92_0 udev_types;
|
||||||
|
const gchar *spi_acpi_id;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
guint pid;
|
||||||
|
guint vid;
|
||||||
|
} hid_id;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
/*< private >*/
|
||||||
|
/* padding for future expansion */
|
||||||
|
TOD_PADDING_ALIGNED (16, sizeof (guint) * 2 +
|
||||||
|
sizeof (FpiDeviceUdevSubtypeFlagsTODV1_92_0) +
|
||||||
|
sizeof (gpointer));
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct _FpIdEntryTODV1_92_0 FpIdEntryTODV1_92_0;
|
||||||
|
|
||||||
|
struct _FpDeviceClassTODV1_92_0
|
||||||
|
{
|
||||||
|
/*< private >*/
|
||||||
|
GObjectClass parent_class;
|
||||||
|
|
||||||
|
/*< public >*/
|
||||||
|
/* Static information about the driver. */
|
||||||
|
const gchar *id;
|
||||||
|
const gchar *full_name;
|
||||||
|
FpDeviceTypeTODV1_92_0 type;
|
||||||
|
const FpIdEntryTODV1_92_0 *id_table;
|
||||||
|
|
||||||
|
/* Defaults for device properties */
|
||||||
|
gint nr_enroll_stages;
|
||||||
|
FpScanTypeTODV1_90_1 scan_type;
|
||||||
|
|
||||||
|
/* Callbacks */
|
||||||
|
gint (*usb_discover) (GUsbDevice *usb_device);
|
||||||
|
void (*probe) (FpDevice *device);
|
||||||
|
void (*open) (FpDevice *device);
|
||||||
|
void (*close) (FpDevice *device);
|
||||||
|
void (*enroll) (FpDevice *device);
|
||||||
|
void (*verify) (FpDevice *device);
|
||||||
|
void (*identify) (FpDevice *device);
|
||||||
|
void (*capture) (FpDevice *device);
|
||||||
|
void (*list) (FpDevice *device);
|
||||||
|
void (*delete) (FpDevice * device);
|
||||||
|
|
||||||
|
void (*cancel) (FpDevice *device);
|
||||||
|
|
||||||
|
FpDeviceFeatureTODV1_92_0 features;
|
||||||
|
|
||||||
|
/*< private >*/
|
||||||
|
/* padding for future expansion */
|
||||||
|
TOD_PADDING (32, sizeof (FpDeviceFeatureTODV1_92_0));
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct _FpDeviceClassTODV1_92_0 FpDeviceClassTODV1_92_0;
|
||||||
|
|
||||||
|
|
||||||
|
struct _FpDeviceClassTODV1_94_0
|
||||||
|
{
|
||||||
|
/*< private >*/
|
||||||
|
GObjectClass parent_class;
|
||||||
|
|
||||||
|
/*< public >*/
|
||||||
|
/* Static information about the driver. */
|
||||||
|
const gchar *id;
|
||||||
|
const gchar *full_name;
|
||||||
|
FpDeviceTypeTODV1_92_0 type;
|
||||||
|
const FpIdEntryTODV1_92_0 *id_table;
|
||||||
|
|
||||||
|
/* Defaults for device properties */
|
||||||
|
gint nr_enroll_stages;
|
||||||
|
FpScanTypeTODV1_90_1 scan_type;
|
||||||
|
|
||||||
|
/* Callbacks */
|
||||||
|
gint (*usb_discover) (GUsbDevice *usb_device);
|
||||||
|
void (*probe) (FpDevice *device);
|
||||||
|
void (*open) (FpDevice *device);
|
||||||
|
void (*close) (FpDevice *device);
|
||||||
|
void (*enroll) (FpDevice *device);
|
||||||
|
void (*verify) (FpDevice *device);
|
||||||
|
void (*identify) (FpDevice *device);
|
||||||
|
void (*capture) (FpDevice *device);
|
||||||
|
void (*list) (FpDevice *device);
|
||||||
|
void (*delete) (FpDevice * device);
|
||||||
|
|
||||||
|
void (*cancel) (FpDevice *device);
|
||||||
|
|
||||||
|
/* Class elements added after tod-v1 */
|
||||||
|
FpDeviceFeatureTODV1_94_0 features;
|
||||||
|
|
||||||
|
/* Simple device temperature model constants */
|
||||||
|
gint32 temp_hot_seconds;
|
||||||
|
gint32 temp_cold_seconds;
|
||||||
|
|
||||||
|
void (*clear_storage) (FpDevice * device);
|
||||||
|
void (*suspend) (FpDevice *device);
|
||||||
|
void (*resume) (FpDevice *device);
|
||||||
|
|
||||||
|
/*< private >*/
|
||||||
|
/* padding for future expansion */
|
||||||
|
TOD_PADDING_ALIGNED8 (32,
|
||||||
|
sizeof (FpDeviceFeatureTODV1_94_0) +
|
||||||
|
sizeof (gint32) * 2 +
|
||||||
|
sizeof (gpointer) * 3)
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct _FpDeviceClassTODV1_94_0 FpDeviceClassTODV1_94_0;
|
||||||
@@ -0,0 +1,61 @@
|
|||||||
|
/*
|
||||||
|
* FpImageDevice - An image based fingerprint reader device
|
||||||
|
* 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
|
||||||
|
|
||||||
|
#include "base-fpi-device.h"
|
||||||
|
|
||||||
|
typedef struct _FpImageDevice FpImageDevice;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
FPI_IMAGE_DEVICE_STATE_TODV1_90_1_INACTIVE,
|
||||||
|
FPI_IMAGE_DEVICE_STATE_TODV1_90_1_AWAIT_FINGER_ON,
|
||||||
|
FPI_IMAGE_DEVICE_STATE_TODV1_90_1_CAPTURE,
|
||||||
|
FPI_IMAGE_DEVICE_STATE_TODV1_90_1_AWAIT_FINGER_OFF,
|
||||||
|
} FpiImageDeviceStateTODV1_90_1;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
FPI_IMAGE_DEVICE_STATE_TODV1_92_0_INACTIVE,
|
||||||
|
FPI_IMAGE_DEVICE_STATE_TODV1_92_0_AWAIT_FINGER_ON,
|
||||||
|
FPI_IMAGE_DEVICE_STATE_TODV1_92_0_CAPTURE,
|
||||||
|
FPI_IMAGE_DEVICE_STATE_TODV1_92_0_AWAIT_FINGER_OFF,
|
||||||
|
FPI_IMAGE_DEVICE_STATE_TODV1_92_0_ACTIVATING,
|
||||||
|
FPI_IMAGE_DEVICE_STATE_TODV1_92_0_DEACTIVATING,
|
||||||
|
FPI_IMAGE_DEVICE_STATE_TODV1_92_0_IDLE,
|
||||||
|
} FpiImageDeviceStateTODV1_90_4;
|
||||||
|
|
||||||
|
typedef struct _FpImageDeviceClassTODV1_90_1
|
||||||
|
{
|
||||||
|
FpDeviceClassTODV1_90_1 parent_class;
|
||||||
|
|
||||||
|
gint bz3_threshold;
|
||||||
|
gint img_width;
|
||||||
|
gint img_height;
|
||||||
|
|
||||||
|
void (*img_open)(FpImageDevice *dev);
|
||||||
|
void (*img_close)(FpImageDevice *dev);
|
||||||
|
void (*activate)(FpImageDevice *dev);
|
||||||
|
void (*change_state)(FpImageDevice *dev,
|
||||||
|
FpiImageDeviceStateTODV1_90_1 state);
|
||||||
|
void (*deactivate)(FpImageDevice *dev);
|
||||||
|
|
||||||
|
/*< private >*/
|
||||||
|
/* padding for future expansion */
|
||||||
|
TOD_PADDING (32, 0);
|
||||||
|
} FpImageDeviceClassTODV1_90_1;
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
/*
|
||||||
|
* FpImageDevice - An image based fingerprint reader device
|
||||||
|
* 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
|
||||||
|
|
||||||
|
#include <glib.h>
|
||||||
|
#include <glib-object.h>
|
||||||
|
|
||||||
|
#include "tod/tod-macros.h"
|
||||||
|
|
||||||
|
typedef struct _FpImage FpImage;
|
||||||
|
typedef struct _FpImageTODV1_90_1 FpImageTODV1_90_1;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
FPI_IMAGE_TODV1_90_1_V_FLIPPED = 1 << 0,
|
||||||
|
FPI_IMAGE_TODV1_90_1_H_FLIPPED = 1 << 1,
|
||||||
|
FPI_IMAGE_TODV1_90_1_COLORS_INVERTED = 1 << 2,
|
||||||
|
} FpiImageFlagsTODV1_90_1;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
FPI_IMAGE_TODV1_90_2_V_FLIPPED = 1 << 0,
|
||||||
|
FPI_IMAGE_TODV1_90_2_H_FLIPPED = 1 << 1,
|
||||||
|
FPI_IMAGE_TODV1_90_2_COLORS_INVERTED = 1 << 2,
|
||||||
|
FPI_IMAGE_TODV1_90_2_PARTIAL = 1 << 3,
|
||||||
|
} FpiImageFlagsTODV1_90_2;
|
||||||
|
|
||||||
|
struct _FpImageTODV1_90_1
|
||||||
|
{
|
||||||
|
/*< private >*/
|
||||||
|
GObject parent;
|
||||||
|
|
||||||
|
/*< public >*/
|
||||||
|
guint width;
|
||||||
|
guint height;
|
||||||
|
|
||||||
|
gdouble ppmm;
|
||||||
|
|
||||||
|
FpiImageFlagsTODV1_90_1 flags;
|
||||||
|
|
||||||
|
/*< private >*/
|
||||||
|
guint8 *data;
|
||||||
|
guint8 *binarized;
|
||||||
|
|
||||||
|
GPtrArray *minutiae;
|
||||||
|
guint ref_count;
|
||||||
|
|
||||||
|
TOD_PADDING (32, 0);
|
||||||
|
};
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
/*
|
||||||
|
* FpDevice - A fingerprint reader device
|
||||||
|
* 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
|
||||||
|
|
||||||
|
#include "base-fpi-device.h"
|
||||||
|
|
||||||
|
typedef struct _FpiSpiTransferTODV1_92_0 FpiSpiTransferTODV1_92_0;
|
||||||
|
typedef struct _FpiSsm FpiSsm;
|
||||||
|
|
||||||
|
typedef void (*FpiSpiTransferCallbackTODV1_92_0)(FpiSpiTransferTODV1_92_0 *transfer,
|
||||||
|
FpDevice *dev,
|
||||||
|
gpointer user_data,
|
||||||
|
GError *error);
|
||||||
|
|
||||||
|
struct _FpiSpiTransferTODV1_92_0
|
||||||
|
{
|
||||||
|
/*< public >*/
|
||||||
|
FpDevice *device;
|
||||||
|
|
||||||
|
FpiSsm *ssm;
|
||||||
|
|
||||||
|
gssize length_wr;
|
||||||
|
gssize length_rd;
|
||||||
|
|
||||||
|
guchar *buffer_wr;
|
||||||
|
guchar *buffer_rd;
|
||||||
|
|
||||||
|
/*< private >*/
|
||||||
|
guint ref_count;
|
||||||
|
|
||||||
|
int spidev_fd;
|
||||||
|
|
||||||
|
/* Callbacks */
|
||||||
|
gpointer user_data;
|
||||||
|
FpiSpiTransferCallbackTODV1_92_0 callback;
|
||||||
|
|
||||||
|
/* Data free function */
|
||||||
|
GDestroyNotify free_buffer_wr;
|
||||||
|
GDestroyNotify free_buffer_rd;
|
||||||
|
|
||||||
|
/* padding for future expansion */
|
||||||
|
TOD_PADDING (32, 0);
|
||||||
|
};
|
||||||
@@ -0,0 +1,80 @@
|
|||||||
|
/*
|
||||||
|
* FpDevice - A fingerprint reader device
|
||||||
|
* 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
|
||||||
|
|
||||||
|
#include <gusb.h>
|
||||||
|
|
||||||
|
#include "base-fpi-device.h"
|
||||||
|
|
||||||
|
typedef struct _FpiUsbTransferTODV1_90_1 FpiUsbTransferTODV1_90_1;
|
||||||
|
typedef struct _FpiSsm FpiSsm;
|
||||||
|
|
||||||
|
typedef void (*FpiUsbTransferCallbackTODV1_90_1)(FpiUsbTransferTODV1_90_1 *transfer,
|
||||||
|
FpDevice *dev,
|
||||||
|
gpointer user_data,
|
||||||
|
GError *error);
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
FP_TRANSFER_TODV1_90_1_NONE = -1,
|
||||||
|
FP_TRANSFER_TODV1_90_1_CONTROL = 0,
|
||||||
|
FP_TRANSFER_TODV1_90_1_BULK = 2,
|
||||||
|
FP_TRANSFER_TODV1_90_1_INTERRUPT = 3,
|
||||||
|
} FpiTransferTypeTODV1_90_3;
|
||||||
|
|
||||||
|
struct _FpiUsbTransferTODV1_90_1
|
||||||
|
{
|
||||||
|
/*< public >*/
|
||||||
|
FpDevice *device;
|
||||||
|
|
||||||
|
FpiSsm *ssm;
|
||||||
|
|
||||||
|
gssize length;
|
||||||
|
gssize actual_length;
|
||||||
|
|
||||||
|
guchar *buffer;
|
||||||
|
|
||||||
|
/*< private >*/
|
||||||
|
guint ref_count;
|
||||||
|
|
||||||
|
/* USB Transfer information */
|
||||||
|
FpiTransferTypeTODV1_90_3 type;
|
||||||
|
guint8 endpoint;
|
||||||
|
|
||||||
|
/* Control Transfer options */
|
||||||
|
GUsbDeviceDirection direction;
|
||||||
|
GUsbDeviceRequestType request_type;
|
||||||
|
GUsbDeviceRecipient recipient;
|
||||||
|
guint8 request;
|
||||||
|
guint16 value;
|
||||||
|
guint16 idx;
|
||||||
|
|
||||||
|
/* Flags */
|
||||||
|
gboolean short_is_error;
|
||||||
|
|
||||||
|
/* Callbacks */
|
||||||
|
gpointer user_data;
|
||||||
|
FpiUsbTransferCallbackTODV1_90_1 callback;
|
||||||
|
|
||||||
|
/* Data free function */
|
||||||
|
GDestroyNotify free_buffer;
|
||||||
|
|
||||||
|
/* padding for future expansion */
|
||||||
|
TOD_PADDING (32, 0);
|
||||||
|
};
|
||||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Reference in New Issue
Block a user