mirror of
https://gitlab.freedesktop.org/libfprint/libfprint.git
synced 2026-09-10 13:00:08 +00:00
Compare commits
43
Commits
+16
-1
@@ -35,6 +35,7 @@ stages:
|
|||||||
- build
|
- build
|
||||||
- test
|
- test
|
||||||
- flatpak
|
- flatpak
|
||||||
|
- deploy
|
||||||
|
|
||||||
image: $FEDORA_IMAGE
|
image: $FEDORA_IMAGE
|
||||||
|
|
||||||
@@ -99,7 +100,6 @@ test:
|
|||||||
|
|
||||||
test_valgrind:
|
test_valgrind:
|
||||||
stage: test
|
stage: test
|
||||||
allow_failure: true
|
|
||||||
except:
|
except:
|
||||||
variables:
|
variables:
|
||||||
- $CI_PIPELINE_SOURCE == "schedule"
|
- $CI_PIPELINE_SOURCE == "schedule"
|
||||||
@@ -257,3 +257,18 @@ container_fedora_build_on_deps_changed:
|
|||||||
- merge_requests
|
- merge_requests
|
||||||
changes:
|
changes:
|
||||||
- .gitlab-ci/libfprint-image-variables.yaml
|
- .gitlab-ci/libfprint-image-variables.yaml
|
||||||
|
|
||||||
|
pages:
|
||||||
|
image: alpine:latest
|
||||||
|
stage: deploy
|
||||||
|
needs:
|
||||||
|
- job: test
|
||||||
|
artifacts: true
|
||||||
|
script:
|
||||||
|
- mkdir public
|
||||||
|
- mv _build/meson-logs/coveragereport public/coverage
|
||||||
|
artifacts:
|
||||||
|
paths:
|
||||||
|
- public
|
||||||
|
rules:
|
||||||
|
- if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
|
||||||
|
|||||||
@@ -1,6 +1,20 @@
|
|||||||
This file lists notable changes in each release. For the full history of all
|
This file lists notable changes in each release. For the full history of all
|
||||||
changes, see ChangeLog.
|
changes, see ChangeLog.
|
||||||
|
|
||||||
|
2024-09-03: v1.94.8 release
|
||||||
|
|
||||||
|
Highlights:
|
||||||
|
* build: Support building in non-linux unix environments (tested in FreeBSD)
|
||||||
|
* egismoc: New PIDs 0x0583, 0x0586, 0x0587.
|
||||||
|
* elanmoc: New PID 0x0C9F.
|
||||||
|
* fpcmoc: New PIDs 0x9524, 0x9544.
|
||||||
|
* goodixmoc: New PIDs 0x609A, 0x650A, 0x650C, 0x6512.
|
||||||
|
* realtek: New PID 0x5816.
|
||||||
|
* synaptics: New PIDs 0x00C4, 0x019D, 0x00C6.
|
||||||
|
* fpcmoc: fix incorrect immobile handling during enrollment.
|
||||||
|
* fpcmoc: fixed jumping to wrong state at end of custom enroll.
|
||||||
|
* egismoc: various code cleanups.
|
||||||
|
|
||||||
2024-02-20: v1.94.7 release
|
2024-02-20: v1.94.7 release
|
||||||
|
|
||||||
Highlights:
|
Highlights:
|
||||||
|
|||||||
-25
@@ -1,25 +0,0 @@
|
|||||||
### 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,10 +19,6 @@
|
|||||||
|
|
||||||
</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
|
||||||
@@ -50,6 +46,12 @@ We include **Bozorth3** from the **[US Export Controlled]**
|
|||||||
distribution, which we have determined to be fine
|
distribution, which we have determined to be fine
|
||||||
being shipped in an open source project.
|
being shipped in an open source project.
|
||||||
|
|
||||||
|
## Get in *touch*
|
||||||
|
|
||||||
|
- [IRC] - `#fprint` @ `irc.oftc.net`
|
||||||
|
- [Matrix] - `#fprint:matrix.org` bridged to the IRC channel
|
||||||
|
- [MailingList] - low traffic, not much used these days
|
||||||
|
|
||||||
<br/>
|
<br/>
|
||||||
|
|
||||||
<div align="right">
|
<div align="right">
|
||||||
@@ -66,6 +68,9 @@ being shipped in an open source project.
|
|||||||
[Unsupported]: https://gitlab.freedesktop.org/libfprint/wiki/-/wikis/Unsupported-Devices
|
[Unsupported]: https://gitlab.freedesktop.org/libfprint/wiki/-/wikis/Unsupported-Devices
|
||||||
[Supported]: https://fprint.freedesktop.org/supported-devices.html
|
[Supported]: https://fprint.freedesktop.org/supported-devices.html
|
||||||
[Website]: https://fprint.freedesktop.org/
|
[Website]: https://fprint.freedesktop.org/
|
||||||
|
[MailingList]: https://lists.freedesktop.org/mailman/listinfo/fprint
|
||||||
|
[IRC]: ircs://irc.oftc.net:6697/#fprint
|
||||||
|
[Matrix]: https://matrix.to/#/#fprint:matrix.org
|
||||||
|
|
||||||
[Contribute]: ./HACKING.md
|
[Contribute]: ./HACKING.md
|
||||||
[License]: ./COPYING
|
[License]: ./COPYING
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
### 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
|
|
||||||
+20
-1
@@ -79,6 +79,9 @@ usb:v1C7Ap0571*
|
|||||||
|
|
||||||
# Supported by libfprint driver egismoc
|
# Supported by libfprint driver egismoc
|
||||||
usb:v1C7Ap0582*
|
usb:v1C7Ap0582*
|
||||||
|
usb:v1C7Ap0583*
|
||||||
|
usb:v1C7Ap0586*
|
||||||
|
usb:v1C7Ap0587*
|
||||||
usb:v1C7Ap05A1*
|
usb:v1C7Ap05A1*
|
||||||
ID_AUTOSUSPEND=1
|
ID_AUTOSUSPEND=1
|
||||||
ID_PERSIST=0
|
ID_PERSIST=0
|
||||||
@@ -156,6 +159,7 @@ usb:v04F3p0C88*
|
|||||||
usb:v04F3p0C8C*
|
usb:v04F3p0C8C*
|
||||||
usb:v04F3p0C8D*
|
usb:v04F3p0C8D*
|
||||||
usb:v04F3p0C99*
|
usb:v04F3p0C99*
|
||||||
|
usb:v04F3p0C9F*
|
||||||
ID_AUTOSUSPEND=1
|
ID_AUTOSUSPEND=1
|
||||||
ID_PERSIST=0
|
ID_PERSIST=0
|
||||||
|
|
||||||
@@ -177,6 +181,8 @@ usb:v10A5pA305*
|
|||||||
usb:v10A5pDA04*
|
usb:v10A5pDA04*
|
||||||
usb:v10A5pD805*
|
usb:v10A5pD805*
|
||||||
usb:v10A5pD205*
|
usb:v10A5pD205*
|
||||||
|
usb:v10A5p9524*
|
||||||
|
usb:v10A5p9544*
|
||||||
ID_AUTOSUSPEND=1
|
ID_AUTOSUSPEND=1
|
||||||
ID_PERSIST=0
|
ID_PERSIST=0
|
||||||
|
|
||||||
@@ -185,6 +191,7 @@ usb:v27C6p5840*
|
|||||||
usb:v27C6p6014*
|
usb:v27C6p6014*
|
||||||
usb:v27C6p6092*
|
usb:v27C6p6092*
|
||||||
usb:v27C6p6094*
|
usb:v27C6p6094*
|
||||||
|
usb:v27C6p609A*
|
||||||
usb:v27C6p609C*
|
usb:v27C6p609C*
|
||||||
usb:v27C6p60A2*
|
usb:v27C6p60A2*
|
||||||
usb:v27C6p60A4*
|
usb:v27C6p60A4*
|
||||||
@@ -199,6 +206,8 @@ usb:v27C6p63AC*
|
|||||||
usb:v27C6p63BC*
|
usb:v27C6p63BC*
|
||||||
usb:v27C6p63CC*
|
usb:v27C6p63CC*
|
||||||
usb:v27C6p6496*
|
usb:v27C6p6496*
|
||||||
|
usb:v27C6p650A*
|
||||||
|
usb:v27C6p650C*
|
||||||
usb:v27C6p6582*
|
usb:v27C6p6582*
|
||||||
usb:v27C6p6584*
|
usb:v27C6p6584*
|
||||||
usb:v27C6p658C*
|
usb:v27C6p658C*
|
||||||
@@ -207,6 +216,7 @@ usb:v27C6p6594*
|
|||||||
usb:v27C6p659A*
|
usb:v27C6p659A*
|
||||||
usb:v27C6p659C*
|
usb:v27C6p659C*
|
||||||
usb:v27C6p6A94*
|
usb:v27C6p6A94*
|
||||||
|
usb:v27C6p6512*
|
||||||
ID_AUTOSUSPEND=1
|
ID_AUTOSUSPEND=1
|
||||||
ID_PERSIST=0
|
ID_PERSIST=0
|
||||||
|
|
||||||
@@ -217,6 +227,7 @@ usb:v298Dp1010*
|
|||||||
|
|
||||||
# Supported by libfprint driver realtek
|
# Supported by libfprint driver realtek
|
||||||
usb:v0BDAp5813*
|
usb:v0BDAp5813*
|
||||||
|
usb:v0BDAp5816*
|
||||||
ID_AUTOSUSPEND=1
|
ID_AUTOSUSPEND=1
|
||||||
ID_PERSIST=0
|
ID_PERSIST=0
|
||||||
|
|
||||||
@@ -226,6 +237,7 @@ usb:v06CBp00DF*
|
|||||||
usb:v06CBp00F9*
|
usb:v06CBp00F9*
|
||||||
usb:v06CBp00FC*
|
usb:v06CBp00FC*
|
||||||
usb:v06CBp00C2*
|
usb:v06CBp00C2*
|
||||||
|
usb:v06CBp00C4*
|
||||||
usb:v06CBp0100*
|
usb:v06CBp0100*
|
||||||
usb:v06CBp00F0*
|
usb:v06CBp00F0*
|
||||||
usb:v06CBp0103*
|
usb:v06CBp0103*
|
||||||
@@ -238,6 +250,8 @@ usb:v06CBp015F*
|
|||||||
usb:v06CBp0104*
|
usb:v06CBp0104*
|
||||||
usb:v06CBp0173*
|
usb:v06CBp0173*
|
||||||
usb:v06CBp0106*
|
usb:v06CBp0106*
|
||||||
|
usb:v06CBp019D*
|
||||||
|
usb:v06CBp00C6*
|
||||||
ID_AUTOSUSPEND=1
|
ID_AUTOSUSPEND=1
|
||||||
ID_PERSIST=0
|
ID_PERSIST=0
|
||||||
|
|
||||||
@@ -334,7 +348,6 @@ usb:v06CBp00A8*
|
|||||||
usb:v06CBp00B7*
|
usb:v06CBp00B7*
|
||||||
usb:v06CBp00BB*
|
usb:v06CBp00BB*
|
||||||
usb:v06CBp00BE*
|
usb:v06CBp00BE*
|
||||||
usb:v06CBp00C4*
|
|
||||||
usb:v06CBp00CB*
|
usb:v06CBp00CB*
|
||||||
usb:v06CBp00C9*
|
usb:v06CBp00C9*
|
||||||
usb:v06CBp00D8*
|
usb:v06CBp00D8*
|
||||||
@@ -353,6 +366,12 @@ usb:v0A5Cp5842*
|
|||||||
usb:v0A5Cp5843*
|
usb:v0A5Cp5843*
|
||||||
usb:v0A5Cp5844*
|
usb:v0A5Cp5844*
|
||||||
usb:v0A5Cp5845*
|
usb:v0A5Cp5845*
|
||||||
|
usb:v0A5Cp5860*
|
||||||
|
usb:v0A5Cp5863*
|
||||||
|
usb:v0A5Cp5864*
|
||||||
|
usb:v0A5Cp5865*
|
||||||
|
usb:v0A5Cp5866*
|
||||||
|
usb:v0A5Cp5867*
|
||||||
usb:v0BDAp5812*
|
usb:v0BDAp5812*
|
||||||
usb:v10A5p0007*
|
usb:v10A5p0007*
|
||||||
usb:v10A5p9200*
|
usb:v10A5p9200*
|
||||||
|
|||||||
Vendored
-10
@@ -1,10 +0,0 @@
|
|||||||
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
@@ -1,14 +0,0 @@
|
|||||||
### 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
@@ -1,203 +0,0 @@
|
|||||||
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
@@ -1,45 +0,0 @@
|
|||||||
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
@@ -1,2 +0,0 @@
|
|||||||
NEWS
|
|
||||||
README.md
|
|
||||||
Vendored
-8
@@ -1,8 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
set -e
|
|
||||||
|
|
||||||
dch -v"$GBP_DEBIAN_VERSION" "New upstream release"
|
|
||||||
git add debian/changelog
|
|
||||||
debcommit
|
|
||||||
|
|
||||||
debian/update-udev-triggers.sh
|
|
||||||
Vendored
-19
@@ -1,19 +0,0 @@
|
|||||||
[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
@@ -1 +0,0 @@
|
|||||||
usr/lib/${DEB_HOST_MULTIARCH}/girepository-1.0/FPrint-*.typelib
|
|
||||||
Vendored
-3
@@ -1,3 +0,0 @@
|
|||||||
usr/lib/udev/hwdb.d/
|
|
||||||
usr/lib/udev/rules.d/
|
|
||||||
usr/lib/${DEB_HOST_MULTIARCH}/libfprint-[0-9].so.*
|
|
||||||
-3
@@ -1,3 +0,0 @@
|
|||||||
# For security reasons, we don't want the fingerprint readers to be accessible
|
|
||||||
# by unprivileged users
|
|
||||||
udev-rule-missing-uaccess
|
|
||||||
Vendored
-315
@@ -1,315 +0,0 @@
|
|||||||
#!/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
@@ -1,17 +0,0 @@
|
|||||||
#!/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
@@ -1,94 +0,0 @@
|
|||||||
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
@@ -1,4 +0,0 @@
|
|||||||
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
@@ -1 +0,0 @@
|
|||||||
usr/share/gtk-doc/*/libfprint-*
|
|
||||||
Vendored
-2
@@ -1,2 +0,0 @@
|
|||||||
usr/libexec/installed-tests/libfprint-[0-9]
|
|
||||||
usr/share/installed-tests/libfprint-[0-9]
|
|
||||||
Vendored
-3
@@ -1,3 +0,0 @@
|
|||||||
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
@@ -1 +0,0 @@
|
|||||||
usr/lib/${DEB_HOST_MULTIARCH}/libfprint-[0-9]-tod.so.*
|
|
||||||
Vendored
-239
@@ -1,239 +0,0 @@
|
|||||||
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
@@ -1,37 +0,0 @@
|
|||||||
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
@@ -1,28 +0,0 @@
|
|||||||
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 */
|
|
||||||
};
|
|
||||||
|
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
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
@@ -1,44 +0,0 @@
|
|||||||
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
@@ -1,7 +0,0 @@
|
|||||||
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
|
|
||||||
@@ -1,39 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
||||||
@@ -1,54 +0,0 @@
|
|||||||
From: Aris Lin <aris.lin@synaptics.com>
|
|
||||||
Date: Mon, 14 Jul 2025 11:52:56 +0800
|
|
||||||
Subject: [PATCH] synaptics: add new PID 0x019F, 0x109 and 0x10A
|
|
||||||
|
|
||||||
Origin: upstream, https://gitlab.freedesktop.org/libfprint/libfprint/-/commit/7f5304d6eec37955c8d462e571c3d72af0be4684
|
|
||||||
Bug-Ubuntu: https://bugs.launchpad.net/bugs/2133704
|
|
||||||
Signed-off-by: Bin Li <binli@ubuntu.com>
|
|
||||||
---
|
|
||||||
data/autosuspend.hwdb | 3 +++
|
|
||||||
libfprint/drivers/synaptics/synaptics.c | 3 +++
|
|
||||||
2 files changed, 6 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/data/autosuspend.hwdb b/data/autosuspend.hwdb
|
|
||||||
index 7a1759e..10e643c 100644
|
|
||||||
--- a/data/autosuspend.hwdb
|
|
||||||
+++ b/data/autosuspend.hwdb
|
|
||||||
@@ -232,6 +232,8 @@ usb:v06CBp00F0*
|
|
||||||
usb:v06CBp0103*
|
|
||||||
usb:v06CBp0107*
|
|
||||||
usb:v06CBp0108*
|
|
||||||
+usb:v06CBp0109*
|
|
||||||
+usb:v06CBp010A*
|
|
||||||
usb:v06CBp0123*
|
|
||||||
usb:v06CBp0124*
|
|
||||||
usb:v06CBp0126*
|
|
||||||
@@ -242,6 +244,7 @@ usb:v06CBp0104*
|
|
||||||
usb:v06CBp0173*
|
|
||||||
usb:v06CBp0106*
|
|
||||||
usb:v06CBp019D*
|
|
||||||
+usb:v06CBp019F*
|
|
||||||
ID_AUTOSUSPEND=1
|
|
||||||
ID_PERSIST=0
|
|
||||||
|
|
||||||
diff --git a/libfprint/drivers/synaptics/synaptics.c b/libfprint/drivers/synaptics/synaptics.c
|
|
||||||
index d272421..29fb5f1 100644
|
|
||||||
--- a/libfprint/drivers/synaptics/synaptics.c
|
|
||||||
+++ b/libfprint/drivers/synaptics/synaptics.c
|
|
||||||
@@ -41,6 +41,8 @@ static const FpIdEntry id_table[] = {
|
|
||||||
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0103, },
|
|
||||||
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0107, },
|
|
||||||
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0108, },
|
|
||||||
+ { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0109, },
|
|
||||||
+ { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x010A, },
|
|
||||||
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0123, },
|
|
||||||
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0124, },
|
|
||||||
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0126, },
|
|
||||||
@@ -51,6 +53,7 @@ static const FpIdEntry id_table[] = {
|
|
||||||
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0173, },
|
|
||||||
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0106, },
|
|
||||||
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x019D, },
|
|
||||||
+ { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x019F, },
|
|
||||||
{ .vid = 0, .pid = 0, .driver_data = 0 }, /* terminating entry */
|
|
||||||
};
|
|
||||||
|
|
||||||
Vendored
-26
@@ -1,26 +0,0 @@
|
|||||||
#!/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
@@ -1 +0,0 @@
|
|||||||
3.0 (quilt)
|
|
||||||
Vendored
-3
@@ -1,3 +0,0 @@
|
|||||||
# 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
@@ -1,6 +0,0 @@
|
|||||||
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
|
|
||||||
Vendored
-32
@@ -1,32 +0,0 @@
|
|||||||
#!/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
@@ -1,4 +0,0 @@
|
|||||||
---
|
|
||||||
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
@@ -1,5 +0,0 @@
|
|||||||
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,13 +26,3 @@ 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
|
|
||||||
|
|||||||
@@ -1,161 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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 ();
|
|
||||||
}
|
|
||||||
+240
-157
@@ -32,6 +32,7 @@
|
|||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
|
|
||||||
#include "drivers_api.h"
|
#include "drivers_api.h"
|
||||||
|
#include "fpi-byte-writer.h"
|
||||||
|
|
||||||
#include "egismoc.h"
|
#include "egismoc.h"
|
||||||
|
|
||||||
@@ -42,15 +43,17 @@ struct _FpiDeviceEgisMoc
|
|||||||
FpiSsm *cmd_ssm;
|
FpiSsm *cmd_ssm;
|
||||||
FpiUsbTransfer *cmd_transfer;
|
FpiUsbTransfer *cmd_transfer;
|
||||||
GCancellable *interrupt_cancellable;
|
GCancellable *interrupt_cancellable;
|
||||||
|
|
||||||
int enrolled_num;
|
|
||||||
GPtrArray *enrolled_ids;
|
GPtrArray *enrolled_ids;
|
||||||
|
gint max_enroll_stages;
|
||||||
};
|
};
|
||||||
|
|
||||||
G_DEFINE_TYPE (FpiDeviceEgisMoc, fpi_device_egismoc, FP_TYPE_DEVICE);
|
G_DEFINE_TYPE (FpiDeviceEgisMoc, fpi_device_egismoc, FP_TYPE_DEVICE);
|
||||||
|
|
||||||
static const FpIdEntry egismoc_id_table[] = {
|
static const FpIdEntry egismoc_id_table[] = {
|
||||||
{ .vid = 0x1c7a, .pid = 0x0582, .driver_data = EGISMOC_DRIVER_CHECK_PREFIX_TYPE1 },
|
{ .vid = 0x1c7a, .pid = 0x0582, .driver_data = EGISMOC_DRIVER_CHECK_PREFIX_TYPE1 },
|
||||||
|
{ .vid = 0x1c7a, .pid = 0x0583, .driver_data = EGISMOC_DRIVER_CHECK_PREFIX_TYPE1 },
|
||||||
|
{ .vid = 0x1c7a, .pid = 0x0586, .driver_data = EGISMOC_DRIVER_CHECK_PREFIX_TYPE1 | EGISMOC_DRIVER_MAX_ENROLL_STAGES_20 },
|
||||||
|
{ .vid = 0x1c7a, .pid = 0x0587, .driver_data = EGISMOC_DRIVER_CHECK_PREFIX_TYPE1 | EGISMOC_DRIVER_MAX_ENROLL_STAGES_20 },
|
||||||
{ .vid = 0x1c7a, .pid = 0x05a1, .driver_data = EGISMOC_DRIVER_CHECK_PREFIX_TYPE2 },
|
{ .vid = 0x1c7a, .pid = 0x05a1, .driver_data = EGISMOC_DRIVER_CHECK_PREFIX_TYPE2 },
|
||||||
{ .vid = 0, .pid = 0, .driver_data = 0 }
|
{ .vid = 0, .pid = 0, .driver_data = 0 }
|
||||||
};
|
};
|
||||||
@@ -154,8 +157,6 @@ egismoc_task_ssm_done (FpiSsm *ssm,
|
|||||||
self->task_ssm = NULL;
|
self->task_ssm = NULL;
|
||||||
|
|
||||||
g_clear_pointer (&self->enrolled_ids, g_ptr_array_unref);
|
g_clear_pointer (&self->enrolled_ids, g_ptr_array_unref);
|
||||||
self->enrolled_ids = NULL;
|
|
||||||
self->enrolled_num = -1;
|
|
||||||
|
|
||||||
if (error)
|
if (error)
|
||||||
fpi_device_action_error (device, error);
|
fpi_device_action_error (device, error);
|
||||||
@@ -273,43 +274,24 @@ egismoc_cmd_ssm_done (FpiSsm *ssm,
|
|||||||
data->callback (device, NULL, 0, g_steal_pointer (&local_error));
|
data->callback (device, NULL, 0, g_steal_pointer (&local_error));
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef union
|
|
||||||
{
|
|
||||||
guint16 check_value;
|
|
||||||
guchar check_bytes[EGISMOC_CHECK_BYTES_LENGTH];
|
|
||||||
} EgisMocCheckBytes;
|
|
||||||
|
|
||||||
G_STATIC_ASSERT (G_SIZEOF_MEMBER (EgisMocCheckBytes, check_value) ==
|
|
||||||
sizeof (guint8) * EGISMOC_CHECK_BYTES_LENGTH);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Derive the 2 "check bytes" for write payloads
|
* Derive the 2 "check bytes" for write payloads
|
||||||
* 32-bit big-endian sum of all 16-bit words (including check bytes) MOD 0xFFFF
|
* 32-bit big-endian sum of all 16-bit words (including check bytes) MOD 0xFFFF
|
||||||
* should be 0, otherwise the device will reject the payload
|
* should be 0, otherwise the device will reject the payload
|
||||||
*/
|
*/
|
||||||
static EgisMocCheckBytes
|
static guint16
|
||||||
egismoc_get_check_bytes (const guchar *value,
|
egismoc_get_check_bytes (FpiByteReader *reader)
|
||||||
const gsize value_length)
|
|
||||||
{
|
{
|
||||||
fp_dbg ("Get check bytes");
|
fp_dbg ("Get check bytes");
|
||||||
EgisMocCheckBytes check_bytes;
|
|
||||||
const size_t steps = (value_length + 1) / 2;
|
|
||||||
guint16 values[steps];
|
|
||||||
size_t sum_values = 0;
|
size_t sum_values = 0;
|
||||||
|
guint16 val;
|
||||||
|
|
||||||
for (int i = 0, j = 0; i < value_length; i += 2, j++)
|
fpi_byte_reader_set_pos (reader, 0);
|
||||||
{
|
|
||||||
values[j] = (value[i] << 8 & 0xff00);
|
|
||||||
|
|
||||||
if (i < value_length - 1)
|
while (fpi_byte_reader_get_uint16_be (reader, &val))
|
||||||
values[j] |= value[i + 1] & 0x00ff;
|
sum_values += val;
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < steps; i++)
|
return G_MAXUINT16 - (sum_values % G_MAXUINT16);
|
||||||
sum_values += values[i];
|
|
||||||
|
|
||||||
check_bytes.check_value = GUINT16_TO_BE (0xffff - (sum_values % 0xffff));
|
|
||||||
return check_bytes;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -319,22 +301,15 @@ egismoc_exec_cmd (FpDevice *device,
|
|||||||
GDestroyNotify cmd_destroy,
|
GDestroyNotify cmd_destroy,
|
||||||
SynCmdMsgCallback callback)
|
SynCmdMsgCallback callback)
|
||||||
{
|
{
|
||||||
fp_dbg ("Execute command and get response");
|
g_auto(FpiByteWriter) writer = {0};
|
||||||
FpiDeviceEgisMoc *self = FPI_DEVICE_EGISMOC (device);
|
|
||||||
EgisMocCheckBytes check_bytes;
|
|
||||||
g_autofree guchar *buffer_out = NULL;
|
|
||||||
gsize buffer_out_length = 0;
|
|
||||||
|
|
||||||
g_autoptr(FpiUsbTransfer) transfer = NULL;
|
g_autoptr(FpiUsbTransfer) transfer = NULL;
|
||||||
CommandData *data = g_new0 (CommandData, 1);
|
FpiDeviceEgisMoc *self = FPI_DEVICE_EGISMOC (device);
|
||||||
|
g_autofree CommandData *data = NULL;
|
||||||
|
gsize buffer_out_length = 0;
|
||||||
|
gboolean written = TRUE;
|
||||||
|
guint16 check_value;
|
||||||
|
|
||||||
g_assert (self->cmd_ssm == NULL);
|
fp_dbg ("Execute command and get response");
|
||||||
self->cmd_ssm = fpi_ssm_new (device,
|
|
||||||
egismoc_cmd_run_state,
|
|
||||||
CMD_STATES);
|
|
||||||
|
|
||||||
transfer = fpi_usb_transfer_new (device);
|
|
||||||
transfer->short_is_error = TRUE;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* buffer_out should be a fully composed command (with prefix, check bytes, etc)
|
* buffer_out should be a fully composed command (with prefix, check bytes, etc)
|
||||||
@@ -347,40 +322,60 @@ egismoc_exec_cmd (FpDevice *device,
|
|||||||
buffer_out_length = egismoc_write_prefix_len
|
buffer_out_length = egismoc_write_prefix_len
|
||||||
+ EGISMOC_CHECK_BYTES_LENGTH
|
+ EGISMOC_CHECK_BYTES_LENGTH
|
||||||
+ cmd_length;
|
+ cmd_length;
|
||||||
buffer_out = g_new0 (guchar, buffer_out_length);
|
|
||||||
|
fpi_byte_writer_init_with_size (&writer, buffer_out_length +
|
||||||
|
(buffer_out_length % 2 ? 1 : 0), TRUE);
|
||||||
|
|
||||||
/* Prefix */
|
/* Prefix */
|
||||||
memcpy (buffer_out, egismoc_write_prefix, egismoc_write_prefix_len);
|
written &= fpi_byte_writer_put_data (&writer, egismoc_write_prefix,
|
||||||
|
egismoc_write_prefix_len);
|
||||||
|
|
||||||
/* Check Bytes - leave them as 00 for now then later generate and copy over
|
/* Check Bytes - leave them as 00 for now then later generate and copy over
|
||||||
* the real ones */
|
* the real ones */
|
||||||
|
written &= fpi_byte_writer_change_pos (&writer, EGISMOC_CHECK_BYTES_LENGTH);
|
||||||
|
|
||||||
/* Command Payload */
|
/* Command Payload */
|
||||||
memcpy (buffer_out + egismoc_write_prefix_len + EGISMOC_CHECK_BYTES_LENGTH,
|
written &= fpi_byte_writer_put_data (&writer, cmd, cmd_length);
|
||||||
cmd, cmd_length);
|
|
||||||
|
|
||||||
/* destroy cmd if requested */
|
|
||||||
if (cmd_destroy)
|
|
||||||
cmd_destroy (cmd);
|
|
||||||
|
|
||||||
/* Now fetch and set the "real" check bytes based on the currently
|
/* Now fetch and set the "real" check bytes based on the currently
|
||||||
* assembled payload */
|
* assembled payload */
|
||||||
check_bytes = egismoc_get_check_bytes (buffer_out, buffer_out_length);
|
check_value = egismoc_get_check_bytes (FPI_BYTE_READER (&writer));
|
||||||
memcpy (buffer_out + egismoc_write_prefix_len, check_bytes.check_bytes,
|
fpi_byte_writer_set_pos (&writer, egismoc_write_prefix_len);
|
||||||
EGISMOC_CHECK_BYTES_LENGTH);
|
written &= fpi_byte_writer_put_uint16_be (&writer, check_value);
|
||||||
|
|
||||||
|
/* destroy cmd if requested */
|
||||||
|
if (cmd_destroy)
|
||||||
|
g_clear_pointer (&cmd, cmd_destroy);
|
||||||
|
|
||||||
|
g_assert (self->cmd_ssm == NULL);
|
||||||
|
self->cmd_ssm = fpi_ssm_new (device,
|
||||||
|
egismoc_cmd_run_state,
|
||||||
|
CMD_STATES);
|
||||||
|
|
||||||
|
data = g_new0 (CommandData, 1);
|
||||||
|
data->callback = callback;
|
||||||
|
fpi_ssm_set_data (self->cmd_ssm, g_steal_pointer (&data), g_free);
|
||||||
|
|
||||||
|
if (!written)
|
||||||
|
{
|
||||||
|
fpi_ssm_start (self->cmd_ssm, egismoc_cmd_ssm_done);
|
||||||
|
fpi_ssm_mark_failed (self->cmd_ssm,
|
||||||
|
fpi_device_error_new (FP_DEVICE_ERROR_PROTO));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
transfer = fpi_usb_transfer_new (device);
|
||||||
|
transfer->short_is_error = TRUE;
|
||||||
|
transfer->ssm = self->cmd_ssm;
|
||||||
|
|
||||||
fpi_usb_transfer_fill_bulk_full (transfer,
|
fpi_usb_transfer_fill_bulk_full (transfer,
|
||||||
EGISMOC_EP_CMD_OUT,
|
EGISMOC_EP_CMD_OUT,
|
||||||
g_steal_pointer (&buffer_out),
|
fpi_byte_writer_reset_and_get_data (&writer),
|
||||||
buffer_out_length,
|
buffer_out_length,
|
||||||
g_free);
|
g_free);
|
||||||
transfer->ssm = self->cmd_ssm;
|
|
||||||
|
|
||||||
g_assert (self->cmd_transfer == NULL);
|
g_assert (self->cmd_transfer == NULL);
|
||||||
self->cmd_transfer = g_steal_pointer (&transfer);
|
self->cmd_transfer = g_steal_pointer (&transfer);
|
||||||
data->callback = callback;
|
|
||||||
|
|
||||||
fpi_ssm_set_data (self->cmd_ssm, data, g_free);
|
|
||||||
fpi_ssm_start (self->cmd_ssm, egismoc_cmd_ssm_done);
|
fpi_ssm_start (self->cmd_ssm, egismoc_cmd_ssm_done);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -419,11 +414,13 @@ egismoc_get_enrolled_prints (FpDevice *device)
|
|||||||
FpiDeviceEgisMoc *self = FPI_DEVICE_EGISMOC (device);
|
FpiDeviceEgisMoc *self = FPI_DEVICE_EGISMOC (device);
|
||||||
|
|
||||||
g_autoptr(GPtrArray) result = g_ptr_array_new_with_free_func (g_object_unref);
|
g_autoptr(GPtrArray) result = g_ptr_array_new_with_free_func (g_object_unref);
|
||||||
FpPrint *print = NULL;
|
|
||||||
|
|
||||||
for (int i = 0; i < self->enrolled_num; i++)
|
if (!self->enrolled_ids)
|
||||||
|
return g_steal_pointer (&result);
|
||||||
|
|
||||||
|
for (guint i = 0; i < self->enrolled_ids->len; i++)
|
||||||
{
|
{
|
||||||
print = fp_print_new (device);
|
FpPrint *print = fp_print_new (device);
|
||||||
egismoc_set_print_data (print, g_ptr_array_index (self->enrolled_ids, i), NULL);
|
egismoc_set_print_data (print, g_ptr_array_index (self->enrolled_ids, i), NULL);
|
||||||
g_ptr_array_add (result, g_object_ref_sink (print));
|
g_ptr_array_add (result, g_object_ref_sink (print));
|
||||||
}
|
}
|
||||||
@@ -448,26 +445,37 @@ egismoc_list_fill_enrolled_ids_cb (FpDevice *device,
|
|||||||
|
|
||||||
g_clear_pointer (&self->enrolled_ids, g_ptr_array_unref);
|
g_clear_pointer (&self->enrolled_ids, g_ptr_array_unref);
|
||||||
self->enrolled_ids = g_ptr_array_new_with_free_func (g_free);
|
self->enrolled_ids = g_ptr_array_new_with_free_func (g_free);
|
||||||
self->enrolled_num = 0;
|
|
||||||
|
FpiByteReader reader;
|
||||||
|
gboolean read = TRUE;
|
||||||
|
|
||||||
|
fpi_byte_reader_init (&reader, buffer_in, length_in);
|
||||||
|
|
||||||
|
read &= fpi_byte_reader_set_pos (&reader, EGISMOC_LIST_RESPONSE_PREFIX_SIZE);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Each fingerprint ID will be returned in this response as a 32 byte array
|
* Each fingerprint ID will be returned in this response as a 32 byte array
|
||||||
* The other stuff in the payload is 16 bytes long, so if there is at least 1
|
* The other stuff in the payload is 16 bytes long, so if there is at least 1
|
||||||
* print then the length should be at least 16+32=48 bytes long
|
* print then the length should be at least 16+32=48 bytes long
|
||||||
*/
|
*/
|
||||||
for (int pos = EGISMOC_LIST_RESPONSE_PREFIX_SIZE;
|
while (read)
|
||||||
pos < length_in - EGISMOC_LIST_RESPONSE_SUFFIX_SIZE;
|
|
||||||
pos += EGISMOC_FINGERPRINT_DATA_SIZE, self->enrolled_num++)
|
|
||||||
{
|
{
|
||||||
g_autofree gchar *print_id = g_strndup ((gchar *) buffer_in + pos,
|
const guint8 *data;
|
||||||
EGISMOC_FINGERPRINT_DATA_SIZE);
|
g_autofree gchar *print_id = NULL;
|
||||||
fp_dbg ("Device fingerprint %0d: %.*s", self->enrolled_num,
|
|
||||||
|
read &= fpi_byte_reader_get_data (&reader, EGISMOC_FINGERPRINT_DATA_SIZE,
|
||||||
|
&data);
|
||||||
|
if (!read)
|
||||||
|
break;
|
||||||
|
|
||||||
|
print_id = g_strndup ((gchar *) data, EGISMOC_FINGERPRINT_DATA_SIZE);
|
||||||
|
fp_dbg ("Device fingerprint %0d: %.*s", self->enrolled_ids->len + 1,
|
||||||
EGISMOC_FINGERPRINT_DATA_SIZE, print_id);
|
EGISMOC_FINGERPRINT_DATA_SIZE, print_id);
|
||||||
g_ptr_array_add (self->enrolled_ids, g_steal_pointer (&print_id));
|
g_ptr_array_add (self->enrolled_ids, g_steal_pointer (&print_id));
|
||||||
}
|
}
|
||||||
|
|
||||||
fp_info ("Number of currently enrolled fingerprints on the device is %d",
|
fp_info ("Number of currently enrolled fingerprints on the device is %d",
|
||||||
self->enrolled_num);
|
self->enrolled_ids->len);
|
||||||
|
|
||||||
if (self->task_ssm)
|
if (self->task_ssm)
|
||||||
fpi_ssm_next_state (self->task_ssm);
|
fpi_ssm_next_state (self->task_ssm);
|
||||||
@@ -514,6 +522,7 @@ egismoc_get_delete_cmd (FpDevice *device,
|
|||||||
{
|
{
|
||||||
fp_dbg ("Get delete command");
|
fp_dbg ("Get delete command");
|
||||||
FpiDeviceEgisMoc *self = FPI_DEVICE_EGISMOC (device);
|
FpiDeviceEgisMoc *self = FPI_DEVICE_EGISMOC (device);
|
||||||
|
g_auto(FpiByteWriter) writer = {0};
|
||||||
g_autoptr(GVariant) print_data = NULL;
|
g_autoptr(GVariant) print_data = NULL;
|
||||||
g_autoptr(GVariant) print_data_id_var = NULL;
|
g_autoptr(GVariant) print_data_id_var = NULL;
|
||||||
const guchar *print_data_id = NULL;
|
const guchar *print_data_id = NULL;
|
||||||
@@ -521,7 +530,7 @@ egismoc_get_delete_cmd (FpDevice *device,
|
|||||||
g_autofree gchar *print_description = NULL;
|
g_autofree gchar *print_description = NULL;
|
||||||
g_autofree guchar *enrolled_print_id = NULL;
|
g_autofree guchar *enrolled_print_id = NULL;
|
||||||
g_autofree guchar *result = NULL;
|
g_autofree guchar *result = NULL;
|
||||||
gsize pos = 0;
|
gboolean written = TRUE;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The final command body should contain:
|
* The final command body should contain:
|
||||||
@@ -537,7 +546,12 @@ egismoc_get_delete_cmd (FpDevice *device,
|
|||||||
* identifiers (enrolled_list)
|
* identifiers (enrolled_list)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const int num_to_delete = (!delete_print) ? self->enrolled_num : 1;
|
int num_to_delete = 0;
|
||||||
|
if (delete_print)
|
||||||
|
num_to_delete = 1;
|
||||||
|
else if (self->enrolled_ids)
|
||||||
|
num_to_delete = self->enrolled_ids->len;
|
||||||
|
|
||||||
const gsize body_length = sizeof (guchar) * EGISMOC_FINGERPRINT_DATA_SIZE *
|
const gsize body_length = sizeof (guchar) * EGISMOC_FINGERPRINT_DATA_SIZE *
|
||||||
num_to_delete;
|
num_to_delete;
|
||||||
/* total_length is the 6 various bytes plus prefix and body payload */
|
/* total_length is the 6 various bytes plus prefix and body payload */
|
||||||
@@ -545,10 +559,10 @@ egismoc_get_delete_cmd (FpDevice *device,
|
|||||||
body_length;
|
body_length;
|
||||||
|
|
||||||
/* pre-fill entire payload with 00s */
|
/* pre-fill entire payload with 00s */
|
||||||
result = g_new0 (guchar, total_length);
|
fpi_byte_writer_init_with_size (&writer, total_length, TRUE);
|
||||||
|
|
||||||
/* start with 00 00 (just move starting offset up by 2) */
|
/* start with 00 00 (just move starting offset up by 2) */
|
||||||
pos = 2;
|
written &= fpi_byte_writer_set_pos (&writer, 2);
|
||||||
|
|
||||||
/* Size Counter bytes */
|
/* Size Counter bytes */
|
||||||
/* "easiest" way to handle 2-bytes size for counter is to hard-code logic for
|
/* "easiest" way to handle 2-bytes size for counter is to hard-code logic for
|
||||||
@@ -557,37 +571,31 @@ egismoc_get_delete_cmd (FpDevice *device,
|
|||||||
* (assumed max is 10) */
|
* (assumed max is 10) */
|
||||||
if (num_to_delete > 7)
|
if (num_to_delete > 7)
|
||||||
{
|
{
|
||||||
memset (result + pos, 0x01, sizeof (guchar));
|
written &= fpi_byte_writer_put_uint8 (&writer, 0x01);
|
||||||
pos += sizeof (guchar);
|
written &= fpi_byte_writer_put_uint8 (&writer, ((num_to_delete - 8) * 0x20) + 0x07);
|
||||||
memset (result + pos, ((num_to_delete - 8) * 0x20) + 0x07, sizeof (guchar));
|
|
||||||
pos += sizeof (guchar);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* first byte is 0x00, just skip it */
|
/* first byte is 0x00, just skip it */
|
||||||
pos += sizeof (guchar);
|
written &= fpi_byte_writer_change_pos (&writer, 1);
|
||||||
memset (result + pos, (num_to_delete * 0x20) + 0x07, sizeof (guchar));
|
written &= fpi_byte_writer_put_uint8 (&writer, (num_to_delete * 0x20) + 0x07);
|
||||||
pos += sizeof (guchar);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* command prefix */
|
/* command prefix */
|
||||||
memcpy (result + pos, cmd_delete_prefix, cmd_delete_prefix_len);
|
written &= fpi_byte_writer_put_data (&writer, cmd_delete_prefix,
|
||||||
pos += cmd_delete_prefix_len;
|
cmd_delete_prefix_len);
|
||||||
|
|
||||||
/* 2-bytes size logic for counter again */
|
/* 2-bytes size logic for counter again */
|
||||||
if (num_to_delete > 7)
|
if (num_to_delete > 7)
|
||||||
{
|
{
|
||||||
memset (result + pos, 0x01, sizeof (guchar));
|
written &= fpi_byte_writer_put_uint8 (&writer, 0x01);
|
||||||
pos += sizeof (guchar);
|
written &= fpi_byte_writer_put_uint8 (&writer, (num_to_delete - 8) * 0x20);
|
||||||
memset (result + pos, ((num_to_delete - 8) * 0x20), sizeof (guchar));
|
|
||||||
pos += sizeof (guchar);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* first byte is 0x00, just skip it */
|
/* first byte is 0x00, just skip it */
|
||||||
pos += sizeof (guchar);
|
written &= fpi_byte_writer_change_pos (&writer, 1);
|
||||||
memset (result + pos, (num_to_delete * 0x20), sizeof (guchar));
|
written &= fpi_byte_writer_put_uint8 (&writer, num_to_delete * 0x20);
|
||||||
pos += sizeof (guchar);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* append desired 32-byte fingerprint IDs */
|
/* append desired 32-byte fingerprint IDs */
|
||||||
@@ -614,21 +622,26 @@ egismoc_get_delete_cmd (FpDevice *device,
|
|||||||
|
|
||||||
fp_info ("Delete fingerprint %s (%s)", print_description, print_data_id);
|
fp_info ("Delete fingerprint %s (%s)", print_description, print_data_id);
|
||||||
|
|
||||||
memcpy (result + pos, print_data_id, EGISMOC_FINGERPRINT_DATA_SIZE);
|
written &= fpi_byte_writer_put_data (&writer, print_data_id,
|
||||||
|
EGISMOC_FINGERPRINT_DATA_SIZE);
|
||||||
}
|
}
|
||||||
/* Otherwise assume this is a "clear" - just loop through and append all enrolled IDs */
|
/* Otherwise assume this is a "clear" - just loop through and append all enrolled IDs */
|
||||||
else
|
else if (self->enrolled_ids)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < self->enrolled_ids->len; i++)
|
for (guint i = 0; i < self->enrolled_ids->len && written; i++)
|
||||||
memcpy (result + pos + (EGISMOC_FINGERPRINT_DATA_SIZE * i),
|
{
|
||||||
g_ptr_array_index (self->enrolled_ids, i),
|
written &= fpi_byte_writer_put_data (&writer,
|
||||||
EGISMOC_FINGERPRINT_DATA_SIZE);
|
g_ptr_array_index (self->enrolled_ids, i),
|
||||||
|
EGISMOC_FINGERPRINT_DATA_SIZE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
g_assert (written);
|
||||||
|
|
||||||
if (length_out)
|
if (length_out)
|
||||||
*length_out = total_length;
|
*length_out = total_length;
|
||||||
|
|
||||||
return g_steal_pointer (&result);
|
return fpi_byte_writer_reset_and_get_data (&writer);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -687,9 +700,7 @@ egismoc_delete_run_state (FpiSsm *ssm,
|
|||||||
switch (fpi_ssm_get_cur_state (ssm))
|
switch (fpi_ssm_get_cur_state (ssm))
|
||||||
{
|
{
|
||||||
case DELETE_GET_ENROLLED_IDS:
|
case DELETE_GET_ENROLLED_IDS:
|
||||||
/* get enrolled_ids and enrolled_num from device for use building
|
/* get enrolled_ids from device for use building delete payload below */
|
||||||
* delete payload below
|
|
||||||
*/
|
|
||||||
egismoc_exec_cmd (device, cmd_list, cmd_list_len, NULL,
|
egismoc_exec_cmd (device, cmd_list, cmd_list_len, NULL,
|
||||||
egismoc_list_fill_enrolled_ids_cb);
|
egismoc_list_fill_enrolled_ids_cb);
|
||||||
break;
|
break;
|
||||||
@@ -761,7 +772,7 @@ egismoc_enroll_status_report (FpDevice *device,
|
|||||||
enroll_print->stage++;
|
enroll_print->stage++;
|
||||||
fp_info ("Partial capture successful. Please touch the sensor again (%d/%d)",
|
fp_info ("Partial capture successful. Please touch the sensor again (%d/%d)",
|
||||||
enroll_print->stage,
|
enroll_print->stage,
|
||||||
EGISMOC_MAX_ENROLL_NUM);
|
self->max_enroll_stages);
|
||||||
fpi_device_enroll_progress (device, enroll_print->stage, enroll_print->print, NULL);
|
fpi_device_enroll_progress (device, enroll_print->stage, enroll_print->print, NULL);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -841,7 +852,7 @@ egismoc_read_capture_cb (FpDevice *device,
|
|||||||
egismoc_enroll_status_report (device, enroll_print, ENROLL_STATUS_RETRY, error);
|
egismoc_enroll_status_report (device, enroll_print, ENROLL_STATUS_RETRY, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (enroll_print->stage == EGISMOC_ENROLL_TIMES)
|
if (enroll_print->stage == self->max_enroll_stages)
|
||||||
fpi_ssm_next_state (self->task_ssm);
|
fpi_ssm_next_state (self->task_ssm);
|
||||||
else
|
else
|
||||||
fpi_ssm_jump_to_state (self->task_ssm, ENROLL_CAPTURE_SENSOR_RESET);
|
fpi_ssm_jump_to_state (self->task_ssm, ENROLL_CAPTURE_SENSOR_RESET);
|
||||||
@@ -884,26 +895,28 @@ egismoc_get_check_cmd (FpDevice *device,
|
|||||||
{
|
{
|
||||||
fp_dbg ("Get check command");
|
fp_dbg ("Get check command");
|
||||||
FpiDeviceEgisMoc *self = FPI_DEVICE_EGISMOC (device);
|
FpiDeviceEgisMoc *self = FPI_DEVICE_EGISMOC (device);
|
||||||
|
g_auto(FpiByteWriter) writer = {0};
|
||||||
g_autofree guchar *result = NULL;
|
g_autofree guchar *result = NULL;
|
||||||
gsize pos = 0;
|
gboolean written = TRUE;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The final command body should contain:
|
* The final command body should contain:
|
||||||
* 1) hard-coded 00 00
|
* 1) hard-coded 00 00
|
||||||
* 2) 2-byte size indiciator, 20*Number enrolled identifiers plus 9 in form of:
|
* 2) 2-byte size indiciator, 20*Number enrolled identifiers plus 9 in form of:
|
||||||
* (enrolled_num + 1) * 0x20 + 0x09
|
* (enrolled_ids->len + 1) * 0x20 + 0x09
|
||||||
* Since max prints can be higher than 7 then this goes up to 2 bytes
|
* Since max prints can be higher than 7 then this goes up to 2 bytes
|
||||||
* (e9 + 9 = 109)
|
* (e9 + 9 = 109)
|
||||||
* 3) Hard-coded prefix (cmd_check_prefix)
|
* 3) Hard-coded prefix (cmd_check_prefix)
|
||||||
* 4) 2-byte size indiciator, 20*Number of enrolled identifiers without plus 9
|
* 4) 2-byte size indiciator, 20*Number of enrolled identifiers without plus 9
|
||||||
* ((enrolled_num + 1) * 0x20)
|
* ((enrolled_ids->len + 1) * 0x20)
|
||||||
* 5) Hard-coded 32 * 0x00 bytes
|
* 5) Hard-coded 32 * 0x00 bytes
|
||||||
* 6) All of the currently registered prints in their 32-byte device identifiers
|
* 6) All of the currently registered prints in their 32-byte device identifiers
|
||||||
* (enrolled_list)
|
* (enrolled_list)
|
||||||
* 7) Hard-coded suffix (cmd_check_suffix)
|
* 7) Hard-coded suffix (cmd_check_suffix)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const gsize body_length = sizeof (guchar) * self->enrolled_num *
|
g_assert (self->enrolled_ids);
|
||||||
|
const gsize body_length = sizeof (guchar) * self->enrolled_ids->len *
|
||||||
EGISMOC_FINGERPRINT_DATA_SIZE;
|
EGISMOC_FINGERPRINT_DATA_SIZE;
|
||||||
|
|
||||||
/* prefix length can depend on the type */
|
/* prefix length can depend on the type */
|
||||||
@@ -921,87 +934,82 @@ egismoc_get_check_cmd (FpDevice *device,
|
|||||||
+ cmd_check_suffix_len;
|
+ cmd_check_suffix_len;
|
||||||
|
|
||||||
/* pre-fill entire payload with 00s */
|
/* pre-fill entire payload with 00s */
|
||||||
result = g_new0 (guchar, total_length);
|
fpi_byte_writer_init_with_size (&writer, total_length, TRUE);
|
||||||
|
|
||||||
/* start with 00 00 (just move starting offset up by 2) */
|
/* start with 00 00 (just move starting offset up by 2) */
|
||||||
pos = 2;
|
written &= fpi_byte_writer_set_pos (&writer, 2);
|
||||||
|
|
||||||
/* Size Counter bytes */
|
/* Size Counter bytes */
|
||||||
/* "easiest" way to handle 2-bytes size for counter is to hard-code logic for
|
/* "easiest" way to handle 2-bytes size for counter is to hard-code logic for
|
||||||
* when we go to the 2nd byte
|
* when we go to the 2nd byte
|
||||||
* note this will not work in case any model ever supports more than 14 prints
|
* note this will not work in case any model ever supports more than 14 prints
|
||||||
* (assumed max is 10) */
|
* (assumed max is 10) */
|
||||||
if (self->enrolled_num > 6)
|
if (self->enrolled_ids->len > 6)
|
||||||
{
|
{
|
||||||
memset (result + pos, 0x01, sizeof (guchar));
|
written &= fpi_byte_writer_put_uint8 (&writer, 0x01);
|
||||||
pos += sizeof (guchar);
|
written &= fpi_byte_writer_put_uint8 (&writer,
|
||||||
memset (result + pos, ((self->enrolled_num - 7) * 0x20) + 0x09,
|
((self->enrolled_ids->len - 7) * 0x20)
|
||||||
sizeof (guchar));
|
+ 0x09);
|
||||||
pos += sizeof (guchar);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* first byte is 0x00, just skip it */
|
/* first byte is 0x00, just skip it */
|
||||||
pos += sizeof (guchar);
|
written &= fpi_byte_writer_change_pos (&writer, 1);
|
||||||
memset (result + pos, ((self->enrolled_num + 1) * 0x20) + 0x09,
|
written &= fpi_byte_writer_put_uint8 (&writer,
|
||||||
sizeof (guchar));
|
((self->enrolled_ids->len + 1) * 0x20) +
|
||||||
pos += sizeof (guchar);
|
0x09);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* command prefix */
|
/* command prefix */
|
||||||
if (fpi_device_get_driver_data (device) & EGISMOC_DRIVER_CHECK_PREFIX_TYPE2)
|
if (fpi_device_get_driver_data (device) & EGISMOC_DRIVER_CHECK_PREFIX_TYPE2)
|
||||||
{
|
written &= fpi_byte_writer_put_data (&writer, cmd_check_prefix_type2,
|
||||||
memcpy (result + pos, cmd_check_prefix_type2, cmd_check_prefix_type2_len);
|
cmd_check_prefix_type2_len);
|
||||||
pos += cmd_check_prefix_type2_len;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
written &= fpi_byte_writer_put_data (&writer, cmd_check_prefix_type1,
|
||||||
memcpy (result + pos, cmd_check_prefix_type1, cmd_check_prefix_type1_len);
|
cmd_check_prefix_type1_len);
|
||||||
pos += cmd_check_prefix_type1_len;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 2-bytes size logic for counter again */
|
/* 2-bytes size logic for counter again */
|
||||||
if (self->enrolled_num > 6)
|
if (self->enrolled_ids->len > 6)
|
||||||
{
|
{
|
||||||
memset (result + pos, 0x01, sizeof (guchar));
|
written &= fpi_byte_writer_put_uint8 (&writer, 0x01);
|
||||||
pos += sizeof (guchar);
|
written &= fpi_byte_writer_put_uint8 (&writer,
|
||||||
memset (result + pos, (self->enrolled_num - 7) * 0x20, sizeof (guchar));
|
(self->enrolled_ids->len - 7) * 0x20);
|
||||||
pos += sizeof (guchar);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* first byte is 0x00, just skip it */
|
/* first byte is 0x00, just skip it */
|
||||||
pos += sizeof (guchar);
|
written &= fpi_byte_writer_change_pos (&writer, 1);
|
||||||
memset (result + pos, (self->enrolled_num + 1) * 0x20, sizeof (guchar));
|
written &= fpi_byte_writer_put_uint8 (&writer,
|
||||||
pos += sizeof (guchar);
|
(self->enrolled_ids->len + 1) * 0x20);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* add 00s "separator" to offset position */
|
/* add 00s "separator" to offset position */
|
||||||
pos += EGISMOC_CMD_CHECK_SEPARATOR_LENGTH;
|
written &= fpi_byte_writer_change_pos (&writer,
|
||||||
|
EGISMOC_CMD_CHECK_SEPARATOR_LENGTH);
|
||||||
|
|
||||||
/* append all currently registered 32-byte fingerprint IDs */
|
for (guint i = 0; i < self->enrolled_ids->len && written; i++)
|
||||||
const gsize print_id_length = sizeof (guchar) * EGISMOC_FINGERPRINT_DATA_SIZE;
|
|
||||||
|
|
||||||
for (int i = 0; i < self->enrolled_num; i++)
|
|
||||||
{
|
{
|
||||||
gchar *device_print_id = g_ptr_array_index (self->enrolled_ids, i);
|
written &= fpi_byte_writer_put_data (&writer,
|
||||||
memcpy (result + pos + (print_id_length * i), device_print_id, print_id_length);
|
g_ptr_array_index (self->enrolled_ids, i),
|
||||||
|
EGISMOC_FINGERPRINT_DATA_SIZE);
|
||||||
}
|
}
|
||||||
pos += body_length;
|
|
||||||
|
|
||||||
/* command suffix */
|
/* command suffix */
|
||||||
memcpy (result + pos, cmd_check_suffix, cmd_check_suffix_len);
|
written &= fpi_byte_writer_put_data (&writer, cmd_check_suffix,
|
||||||
|
cmd_check_suffix_len);
|
||||||
|
g_assert (written);
|
||||||
|
|
||||||
if (length_out)
|
if (length_out)
|
||||||
*length_out = total_length;
|
*length_out = total_length;
|
||||||
|
|
||||||
return g_steal_pointer (&result);
|
return fpi_byte_writer_reset_and_get_data (&writer);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
egismoc_enroll_run_state (FpiSsm *ssm,
|
egismoc_enroll_run_state (FpiSsm *ssm,
|
||||||
FpDevice *device)
|
FpDevice *device)
|
||||||
{
|
{
|
||||||
|
g_auto(FpiByteWriter) writer = {0};
|
||||||
FpiDeviceEgisMoc *self = FPI_DEVICE_EGISMOC (device);
|
FpiDeviceEgisMoc *self = FPI_DEVICE_EGISMOC (device);
|
||||||
EnrollPrint *enroll_print = fpi_ssm_get_data (ssm);
|
EnrollPrint *enroll_print = fpi_ssm_get_data (ssm);
|
||||||
g_autofree guchar *payload = NULL;
|
g_autofree guchar *payload = NULL;
|
||||||
@@ -1012,13 +1020,13 @@ egismoc_enroll_run_state (FpiSsm *ssm,
|
|||||||
switch (fpi_ssm_get_cur_state (ssm))
|
switch (fpi_ssm_get_cur_state (ssm))
|
||||||
{
|
{
|
||||||
case ENROLL_GET_ENROLLED_IDS:
|
case ENROLL_GET_ENROLLED_IDS:
|
||||||
/* get enrolled_ids and enrolled_num from device for use in check stages below */
|
/* get enrolled_ids from device for use in check stages below */
|
||||||
egismoc_exec_cmd (device, cmd_list, cmd_list_len,
|
egismoc_exec_cmd (device, cmd_list, cmd_list_len,
|
||||||
NULL, egismoc_list_fill_enrolled_ids_cb);
|
NULL, egismoc_list_fill_enrolled_ids_cb);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ENROLL_CHECK_ENROLLED_NUM:
|
case ENROLL_CHECK_ENROLLED_NUM:
|
||||||
if (self->enrolled_num >= EGISMOC_MAX_ENROLL_NUM)
|
if (self->enrolled_ids->len >= EGISMOC_MAX_ENROLL_NUM)
|
||||||
{
|
{
|
||||||
egismoc_enroll_status_report (device, enroll_print, ENROLL_STATUS_DEVICE_FULL,
|
egismoc_enroll_status_report (device, enroll_print, ENROLL_STATUS_DEVICE_FULL,
|
||||||
fpi_device_error_new (FP_DEVICE_ERROR_DATA_FULL));
|
fpi_device_error_new (FP_DEVICE_ERROR_DATA_FULL));
|
||||||
@@ -1089,14 +1097,23 @@ egismoc_enroll_run_state (FpiSsm *ssm,
|
|||||||
device_print_id = g_strndup (user_id, EGISMOC_FINGERPRINT_DATA_SIZE);
|
device_print_id = g_strndup (user_id, EGISMOC_FINGERPRINT_DATA_SIZE);
|
||||||
egismoc_set_print_data (enroll_print->print, device_print_id, user_id);
|
egismoc_set_print_data (enroll_print->print, device_print_id, user_id);
|
||||||
|
|
||||||
/* create new dynamic payload of cmd_new_print_prefix + device_print_id */
|
fpi_byte_writer_init (&writer);
|
||||||
payload_length = cmd_new_print_prefix_len + EGISMOC_FINGERPRINT_DATA_SIZE;
|
if (!fpi_byte_writer_put_data (&writer, cmd_new_print_prefix,
|
||||||
payload = g_new0 (guchar, payload_length);
|
cmd_new_print_prefix_len))
|
||||||
memcpy (payload, cmd_new_print_prefix, cmd_new_print_prefix_len);
|
{
|
||||||
memcpy (payload + cmd_new_print_prefix_len, device_print_id,
|
fpi_ssm_mark_failed (ssm, fpi_device_error_new (FP_DEVICE_ERROR_PROTO));
|
||||||
EGISMOC_FINGERPRINT_DATA_SIZE);
|
break;
|
||||||
|
}
|
||||||
|
if (!fpi_byte_writer_put_data (&writer, (guint8 *) device_print_id,
|
||||||
|
EGISMOC_FINGERPRINT_DATA_SIZE))
|
||||||
|
{
|
||||||
|
fpi_ssm_mark_failed (ssm, fpi_device_error_new (FP_DEVICE_ERROR_PROTO));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
egismoc_exec_cmd (device, g_steal_pointer (&payload), payload_length,
|
payload_length = fpi_byte_writer_get_size (&writer);
|
||||||
|
egismoc_exec_cmd (device, fpi_byte_writer_reset_and_get_data (&writer),
|
||||||
|
payload_length,
|
||||||
g_free, egismoc_task_ssm_next_state_cb);
|
g_free, egismoc_task_ssm_next_state_cb);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -1239,13 +1256,13 @@ egismoc_identify_run_state (FpiSsm *ssm,
|
|||||||
switch (fpi_ssm_get_cur_state (ssm))
|
switch (fpi_ssm_get_cur_state (ssm))
|
||||||
{
|
{
|
||||||
case IDENTIFY_GET_ENROLLED_IDS:
|
case IDENTIFY_GET_ENROLLED_IDS:
|
||||||
/* get enrolled_ids and enrolled_num from device for use in check stages below */
|
/* get enrolled_ids from device for use in check stages below */
|
||||||
egismoc_exec_cmd (device, cmd_list, cmd_list_len,
|
egismoc_exec_cmd (device, cmd_list, cmd_list_len,
|
||||||
NULL, egismoc_list_fill_enrolled_ids_cb);
|
NULL, egismoc_list_fill_enrolled_ids_cb);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IDENTIFY_CHECK_ENROLLED_NUM:
|
case IDENTIFY_CHECK_ENROLLED_NUM:
|
||||||
if (self->enrolled_num == 0)
|
if (self->enrolled_ids->len == 0)
|
||||||
{
|
{
|
||||||
fpi_ssm_mark_failed (g_steal_pointer (&self->task_ssm),
|
fpi_ssm_mark_failed (g_steal_pointer (&self->task_ssm),
|
||||||
fpi_device_error_new (FP_DEVICE_ERROR_DATA_NOT_FOUND));
|
fpi_device_error_new (FP_DEVICE_ERROR_DATA_NOT_FOUND));
|
||||||
@@ -1446,6 +1463,71 @@ egismoc_dev_init_handler (FpiSsm *ssm,
|
|||||||
NULL);
|
NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
egismoc_probe (FpDevice *device)
|
||||||
|
{
|
||||||
|
GUsbDevice *usb_dev;
|
||||||
|
GError *error = NULL;
|
||||||
|
g_autofree gchar *serial = NULL;
|
||||||
|
FpiDeviceEgisMoc *self = FPI_DEVICE_EGISMOC (device);
|
||||||
|
|
||||||
|
fp_dbg ("%s enter --> ", G_STRFUNC);
|
||||||
|
|
||||||
|
/* Claim usb interface */
|
||||||
|
usb_dev = fpi_device_get_usb_device (device);
|
||||||
|
if (!g_usb_device_open (usb_dev, &error))
|
||||||
|
{
|
||||||
|
fp_dbg ("%s g_usb_device_open failed %s", G_STRFUNC, error->message);
|
||||||
|
fpi_device_probe_complete (device, NULL, NULL, error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!g_usb_device_reset (usb_dev, &error))
|
||||||
|
{
|
||||||
|
fp_dbg ("%s g_usb_device_reset failed %s", G_STRFUNC, error->message);
|
||||||
|
g_usb_device_close (usb_dev, NULL);
|
||||||
|
fpi_device_probe_complete (device, NULL, NULL, error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!g_usb_device_claim_interface (usb_dev, 0, 0, &error))
|
||||||
|
{
|
||||||
|
fp_dbg ("%s g_usb_device_claim_interface failed %s", G_STRFUNC, error->message);
|
||||||
|
g_usb_device_close (usb_dev, NULL);
|
||||||
|
fpi_device_probe_complete (device, NULL, NULL, error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (g_strcmp0 (g_getenv ("FP_DEVICE_EMULATION"), "1") == 0)
|
||||||
|
serial = g_strdup ("emulated-device");
|
||||||
|
else
|
||||||
|
serial = g_usb_device_get_string_descriptor (usb_dev,
|
||||||
|
g_usb_device_get_serial_number_index (usb_dev),
|
||||||
|
&error);
|
||||||
|
|
||||||
|
if (error)
|
||||||
|
{
|
||||||
|
fp_dbg ("%s g_usb_device_get_string_descriptor failed %s", G_STRFUNC, error->message);
|
||||||
|
g_usb_device_release_interface (fpi_device_get_usb_device (FP_DEVICE (device)),
|
||||||
|
0, 0, NULL);
|
||||||
|
g_usb_device_close (usb_dev, NULL);
|
||||||
|
fpi_device_probe_complete (device, NULL, NULL, error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fpi_device_get_driver_data (device) & EGISMOC_DRIVER_MAX_ENROLL_STAGES_20)
|
||||||
|
self->max_enroll_stages = 20;
|
||||||
|
else
|
||||||
|
self->max_enroll_stages = EGISMOC_MAX_ENROLL_STAGES_DEFAULT;
|
||||||
|
|
||||||
|
fpi_device_set_nr_enroll_stages (device, self->max_enroll_stages);
|
||||||
|
|
||||||
|
g_usb_device_release_interface (fpi_device_get_usb_device (FP_DEVICE (device)), 0, 0, NULL);
|
||||||
|
g_usb_device_close (usb_dev, NULL);
|
||||||
|
|
||||||
|
fpi_device_probe_complete (device, serial, NULL, error);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
egismoc_open (FpDevice *device)
|
egismoc_open (FpDevice *device)
|
||||||
{
|
{
|
||||||
@@ -1526,10 +1608,11 @@ fpi_device_egismoc_class_init (FpiDeviceEgisMocClass *klass)
|
|||||||
dev_class->type = FP_DEVICE_TYPE_USB;
|
dev_class->type = FP_DEVICE_TYPE_USB;
|
||||||
dev_class->scan_type = FP_SCAN_TYPE_PRESS;
|
dev_class->scan_type = FP_SCAN_TYPE_PRESS;
|
||||||
dev_class->id_table = egismoc_id_table;
|
dev_class->id_table = egismoc_id_table;
|
||||||
dev_class->nr_enroll_stages = EGISMOC_ENROLL_TIMES;
|
dev_class->nr_enroll_stages = EGISMOC_MAX_ENROLL_STAGES_DEFAULT;
|
||||||
/* device should be "always off" unless being used */
|
/* device should be "always off" unless being used */
|
||||||
dev_class->temp_hot_seconds = 0;
|
dev_class->temp_hot_seconds = 0;
|
||||||
|
|
||||||
|
dev_class->probe = egismoc_probe;
|
||||||
dev_class->open = egismoc_open;
|
dev_class->open = egismoc_open;
|
||||||
dev_class->cancel = egismoc_cancel;
|
dev_class->cancel = egismoc_cancel;
|
||||||
dev_class->suspend = egismoc_suspend;
|
dev_class->suspend = egismoc_suspend;
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ G_DECLARE_FINAL_TYPE (FpiDeviceEgisMoc, fpi_device_egismoc, FPI, DEVICE_EGISMOC,
|
|||||||
|
|
||||||
#define EGISMOC_DRIVER_CHECK_PREFIX_TYPE1 (1 << 0)
|
#define EGISMOC_DRIVER_CHECK_PREFIX_TYPE1 (1 << 0)
|
||||||
#define EGISMOC_DRIVER_CHECK_PREFIX_TYPE2 (1 << 1)
|
#define EGISMOC_DRIVER_CHECK_PREFIX_TYPE2 (1 << 1)
|
||||||
|
#define EGISMOC_DRIVER_MAX_ENROLL_STAGES_20 (1 << 2)
|
||||||
|
|
||||||
#define EGISMOC_EP_CMD_OUT (0x02 | FPI_USB_ENDPOINT_OUT)
|
#define EGISMOC_EP_CMD_OUT (0x02 | FPI_USB_ENDPOINT_OUT)
|
||||||
#define EGISMOC_EP_CMD_IN (0x81 | FPI_USB_ENDPOINT_IN)
|
#define EGISMOC_EP_CMD_IN (0x81 | FPI_USB_ENDPOINT_IN)
|
||||||
@@ -49,7 +50,7 @@ G_DECLARE_FINAL_TYPE (FpiDeviceEgisMoc, fpi_device_egismoc, FPI, DEVICE_EGISMOC,
|
|||||||
#define EGISMOC_USB_IN_RECV_LENGTH 4096
|
#define EGISMOC_USB_IN_RECV_LENGTH 4096
|
||||||
#define EGISMOC_USB_INTERRUPT_IN_RECV_LENGTH 64
|
#define EGISMOC_USB_INTERRUPT_IN_RECV_LENGTH 64
|
||||||
|
|
||||||
#define EGISMOC_ENROLL_TIMES 10
|
#define EGISMOC_MAX_ENROLL_STAGES_DEFAULT 10
|
||||||
#define EGISMOC_MAX_ENROLL_NUM 10
|
#define EGISMOC_MAX_ENROLL_NUM 10
|
||||||
#define EGISMOC_FINGERPRINT_DATA_SIZE 32
|
#define EGISMOC_FINGERPRINT_DATA_SIZE 32
|
||||||
#define EGISMOC_LIST_RESPONSE_PREFIX_SIZE 14
|
#define EGISMOC_LIST_RESPONSE_PREFIX_SIZE 14
|
||||||
@@ -100,11 +101,11 @@ static guchar cmd_read_capture[] = {0x00, 0x00, 0x00, 0x07, 0x50, 0x16, 0x02, 0x
|
|||||||
static gsize cmd_read_capture_len = sizeof (cmd_read_capture) / sizeof (cmd_read_capture[0]);
|
static gsize cmd_read_capture_len = sizeof (cmd_read_capture) / sizeof (cmd_read_capture[0]);
|
||||||
static guchar rsp_read_success_prefix[] = {0x00, 0x00, 0x00, 0x04};
|
static guchar rsp_read_success_prefix[] = {0x00, 0x00, 0x00, 0x04};
|
||||||
static gsize rsp_read_success_prefix_len = sizeof (rsp_read_success_prefix) / sizeof (rsp_read_success_prefix[0]);
|
static gsize rsp_read_success_prefix_len = sizeof (rsp_read_success_prefix) / sizeof (rsp_read_success_prefix[0]);
|
||||||
static guchar rsp_read_success_suffix[] = {0x0a, 0x90, 0x00};
|
static guchar rsp_read_success_suffix[] = {0x90, 0x00};
|
||||||
static gsize rsp_read_success_suffix_len = sizeof (rsp_read_success_suffix) / sizeof (rsp_read_success_suffix[0]);
|
static gsize rsp_read_success_suffix_len = sizeof (rsp_read_success_suffix) / sizeof (rsp_read_success_suffix[0]);
|
||||||
static guchar rsp_read_offcenter_prefix[] = {0x00, 0x00, 0x00, 0x04};
|
static guchar rsp_read_offcenter_prefix[] = {0x00, 0x00, 0x00, 0x04};
|
||||||
static gsize rsp_read_offcenter_prefix_len = sizeof (rsp_read_offcenter_prefix) / sizeof (rsp_read_offcenter_prefix[0]);
|
static gsize rsp_read_offcenter_prefix_len = sizeof (rsp_read_offcenter_prefix) / sizeof (rsp_read_offcenter_prefix[0]);
|
||||||
static guchar rsp_read_offcenter_suffix[] = {0x0a, 0x64, 0x91};
|
static guchar rsp_read_offcenter_suffix[] = {0x64, 0x91};
|
||||||
static gsize rsp_read_offcenter_suffix_len = sizeof (rsp_read_offcenter_suffix) / sizeof (rsp_read_offcenter_suffix[0]);
|
static gsize rsp_read_offcenter_suffix_len = sizeof (rsp_read_offcenter_suffix) / sizeof (rsp_read_offcenter_suffix[0]);
|
||||||
static guchar rsp_read_dirty_prefix[] = {0x00, 0x00, 0x00, 0x02, 0x64};
|
static guchar rsp_read_dirty_prefix[] = {0x00, 0x00, 0x00, 0x02, 0x64};
|
||||||
static gsize rsp_read_dirty_prefix_len = sizeof (rsp_read_dirty_prefix) / sizeof (rsp_read_dirty_prefix[0]);
|
static gsize rsp_read_dirty_prefix_len = sizeof (rsp_read_dirty_prefix) / sizeof (rsp_read_dirty_prefix[0]);
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ static const FpIdEntry id_table[] = {
|
|||||||
{ .vid = 0x04f3, .pid = 0x0c8c, },
|
{ .vid = 0x04f3, .pid = 0x0c8c, },
|
||||||
{ .vid = 0x04f3, .pid = 0x0c8d, },
|
{ .vid = 0x04f3, .pid = 0x0c8d, },
|
||||||
{ .vid = 0x04f3, .pid = 0x0c99, },
|
{ .vid = 0x04f3, .pid = 0x0c99, },
|
||||||
|
{ .vid = 0x04f3, .pid = 0x0c9f, },
|
||||||
{ .vid = 0, .pid = 0, .driver_data = 0 }, /* terminating entry */
|
{ .vid = 0, .pid = 0, .driver_data = 0 }, /* terminating entry */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
|
|
||||||
#define FP_COMPONENT "fpcmoc"
|
#define FP_COMPONENT "fpcmoc"
|
||||||
#define MAX_ENROLL_SAMPLES (25)
|
#define MAX_ENROLL_SAMPLES (25)
|
||||||
#define CTRL_TIMEOUT (1000)
|
#define CTRL_TIMEOUT (2000)
|
||||||
#define DATA_TIMEOUT (5000)
|
#define DATA_TIMEOUT (5000)
|
||||||
|
|
||||||
/* Usb port setting */
|
/* Usb port setting */
|
||||||
@@ -68,6 +68,8 @@ static const FpIdEntry id_table[] = {
|
|||||||
{ .vid = 0x10A5, .pid = 0xDA04, },
|
{ .vid = 0x10A5, .pid = 0xDA04, },
|
||||||
{ .vid = 0x10A5, .pid = 0xD805, },
|
{ .vid = 0x10A5, .pid = 0xD805, },
|
||||||
{ .vid = 0x10A5, .pid = 0xD205, },
|
{ .vid = 0x10A5, .pid = 0xD205, },
|
||||||
|
{ .vid = 0x10A5, .pid = 0x9524, },
|
||||||
|
{ .vid = 0x10A5, .pid = 0x9544, },
|
||||||
/* terminating entry */
|
/* terminating entry */
|
||||||
{ .vid = 0, .pid = 0, .driver_data = 0 },
|
{ .vid = 0, .pid = 0, .driver_data = 0 },
|
||||||
};
|
};
|
||||||
@@ -269,6 +271,7 @@ fpc_cmd_ssm_done (FpiSsm *ssm, FpDevice *dev, GError *error)
|
|||||||
FpiDeviceFpcMoc *self = FPI_DEVICE_FPCMOC (dev);
|
FpiDeviceFpcMoc *self = FPI_DEVICE_FPCMOC (dev);
|
||||||
CommandData *data = fpi_ssm_get_data (ssm);
|
CommandData *data = fpi_ssm_get_data (ssm);
|
||||||
|
|
||||||
|
self->cmd_ssm = NULL;
|
||||||
/* Notify about the SSM failure from here instead. */
|
/* Notify about the SSM failure from here instead. */
|
||||||
if (error)
|
if (error)
|
||||||
{
|
{
|
||||||
@@ -276,8 +279,6 @@ fpc_cmd_ssm_done (FpiSsm *ssm, FpDevice *dev, GError *error)
|
|||||||
if (data->callback)
|
if (data->callback)
|
||||||
data->callback (self, NULL, error);
|
data->callback (self, NULL, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
self->cmd_ssm = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -388,7 +389,7 @@ fpc_dev_release_interface (FpiDeviceFpcMoc *self,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Notify close complete */
|
/* Notify close complete */
|
||||||
fpi_device_close_complete (FP_DEVICE (self), release_error);
|
fpi_device_close_complete (FP_DEVICE (self), g_steal_pointer (&release_error));
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
@@ -446,10 +447,16 @@ fpc_evt_cb (FpiDeviceFpcMoc *self,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case FPC_EVT_FINGER_DWN:
|
case FPC_EVT_FINGER_DWN:
|
||||||
fp_dbg ("%s Got finger down event", G_STRFUNC);
|
fp_dbg ("%s Got finger down event (%d)", G_STRFUNC, presp->evt_hdr.status);
|
||||||
fpi_device_report_finger_status_changes (FP_DEVICE (self),
|
fpi_device_report_finger_status_changes (FP_DEVICE (self),
|
||||||
FP_FINGER_STATUS_PRESENT,
|
FP_FINGER_STATUS_PRESENT,
|
||||||
FP_FINGER_STATUS_NONE);
|
FP_FINGER_STATUS_NONE);
|
||||||
|
if (presp->evt_hdr.status != 0)
|
||||||
|
{
|
||||||
|
/* Redo the current task state if capture failed */
|
||||||
|
fpi_ssm_jump_to_state (self->task_ssm, fpi_ssm_get_cur_state (self->task_ssm));
|
||||||
|
return;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FPC_EVT_IMG:
|
case FPC_EVT_IMG:
|
||||||
@@ -742,15 +749,22 @@ fpc_enroll_update_cb (FpiDeviceFpcMoc *self,
|
|||||||
/* here should tips remove finger and try again */
|
/* here should tips remove finger and try again */
|
||||||
if (self->max_immobile_stage)
|
if (self->max_immobile_stage)
|
||||||
{
|
{
|
||||||
if (self->immobile_stage >= self->max_immobile_stage)
|
self->immobile_stage++;
|
||||||
|
if (self->immobile_stage > self->max_immobile_stage)
|
||||||
{
|
{
|
||||||
fp_dbg ("Skip similar handle due to customer enrollment %d(%d)",
|
fp_dbg ("Skip similar handle due to customer enrollment %d(%d)",
|
||||||
self->immobile_stage, self->max_immobile_stage);
|
self->immobile_stage, self->max_immobile_stage);
|
||||||
/* Skip too similar handle, treat as normal enroll progress. */
|
/* Skip too similar handle, treat as normal enroll progress. */
|
||||||
fpi_ssm_jump_to_state (self->task_ssm, FPC_ENROL_STATUS_PROGRESS);
|
self->enroll_stage++;
|
||||||
|
fpi_device_enroll_progress (FP_DEVICE (self), self->enroll_stage, NULL, NULL);
|
||||||
|
/* Used for customer enrollment scheme */
|
||||||
|
if (self->enroll_stage >= (self->max_enroll_stage - self->max_immobile_stage))
|
||||||
|
{
|
||||||
|
fpi_ssm_jump_to_state (self->task_ssm, FP_ENROLL_COMPLETE);
|
||||||
|
return;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
self->immobile_stage++;
|
|
||||||
}
|
}
|
||||||
fpi_device_enroll_progress (FP_DEVICE (self),
|
fpi_device_enroll_progress (FP_DEVICE (self),
|
||||||
self->enroll_stage,
|
self->enroll_stage,
|
||||||
@@ -763,7 +777,10 @@ fpc_enroll_update_cb (FpiDeviceFpcMoc *self,
|
|||||||
fpi_device_enroll_progress (FP_DEVICE (self), self->enroll_stage, NULL, NULL);
|
fpi_device_enroll_progress (FP_DEVICE (self), self->enroll_stage, NULL, NULL);
|
||||||
/* Used for customer enrollment scheme */
|
/* Used for customer enrollment scheme */
|
||||||
if (self->enroll_stage >= (self->max_enroll_stage - self->max_immobile_stage))
|
if (self->enroll_stage >= (self->max_enroll_stage - self->max_immobile_stage))
|
||||||
fpi_ssm_jump_to_state (self->task_ssm, FP_ENROLL_COMPLETE);
|
{
|
||||||
|
fpi_ssm_jump_to_state (self->task_ssm, FP_ENROLL_COMPLETE);
|
||||||
|
return;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FPC_ENROL_STATUS_IMAGE_LOW_COVERAGE:
|
case FPC_ENROL_STATUS_IMAGE_LOW_COVERAGE:
|
||||||
@@ -1623,6 +1640,8 @@ fpc_dev_probe (FpDevice *device)
|
|||||||
case 0xD805:
|
case 0xD805:
|
||||||
case 0xDA04:
|
case 0xDA04:
|
||||||
case 0xD205:
|
case 0xD205:
|
||||||
|
case 0x9524:
|
||||||
|
case 0x9544:
|
||||||
self->max_enroll_stage = MAX_ENROLL_SAMPLES;
|
self->max_enroll_stage = MAX_ENROLL_SAMPLES;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|||||||
@@ -1363,6 +1363,7 @@ gx_fp_probe (FpDevice *device)
|
|||||||
case 0x6014:
|
case 0x6014:
|
||||||
case 0x6092:
|
case 0x6092:
|
||||||
case 0x6094:
|
case 0x6094:
|
||||||
|
case 0x609A:
|
||||||
case 0x609C:
|
case 0x609C:
|
||||||
case 0x60BC:
|
case 0x60BC:
|
||||||
case 0x6304:
|
case 0x6304:
|
||||||
@@ -1374,6 +1375,8 @@ gx_fp_probe (FpDevice *device)
|
|||||||
case 0x63AC:
|
case 0x63AC:
|
||||||
case 0x63BC:
|
case 0x63BC:
|
||||||
case 0x63CC:
|
case 0x63CC:
|
||||||
|
case 0x650A:
|
||||||
|
case 0x650C:
|
||||||
case 0x6582:
|
case 0x6582:
|
||||||
case 0x6A94:
|
case 0x6A94:
|
||||||
case 0x659A:
|
case 0x659A:
|
||||||
@@ -1610,6 +1613,7 @@ static const FpIdEntry id_table[] = {
|
|||||||
{ .vid = 0x27c6, .pid = 0x6014, },
|
{ .vid = 0x27c6, .pid = 0x6014, },
|
||||||
{ .vid = 0x27c6, .pid = 0x6092, },
|
{ .vid = 0x27c6, .pid = 0x6092, },
|
||||||
{ .vid = 0x27c6, .pid = 0x6094, },
|
{ .vid = 0x27c6, .pid = 0x6094, },
|
||||||
|
{ .vid = 0x27c6, .pid = 0x609A, },
|
||||||
{ .vid = 0x27c6, .pid = 0x609C, },
|
{ .vid = 0x27c6, .pid = 0x609C, },
|
||||||
{ .vid = 0x27c6, .pid = 0x60A2, },
|
{ .vid = 0x27c6, .pid = 0x60A2, },
|
||||||
{ .vid = 0x27c6, .pid = 0x60A4, },
|
{ .vid = 0x27c6, .pid = 0x60A4, },
|
||||||
@@ -1624,6 +1628,8 @@ static const FpIdEntry id_table[] = {
|
|||||||
{ .vid = 0x27c6, .pid = 0x63BC, },
|
{ .vid = 0x27c6, .pid = 0x63BC, },
|
||||||
{ .vid = 0x27c6, .pid = 0x63CC, },
|
{ .vid = 0x27c6, .pid = 0x63CC, },
|
||||||
{ .vid = 0x27c6, .pid = 0x6496, },
|
{ .vid = 0x27c6, .pid = 0x6496, },
|
||||||
|
{ .vid = 0x27c6, .pid = 0x650A, },
|
||||||
|
{ .vid = 0x27c6, .pid = 0x650C, },
|
||||||
{ .vid = 0x27c6, .pid = 0x6582, },
|
{ .vid = 0x27c6, .pid = 0x6582, },
|
||||||
{ .vid = 0x27c6, .pid = 0x6584, },
|
{ .vid = 0x27c6, .pid = 0x6584, },
|
||||||
{ .vid = 0x27c6, .pid = 0x658C, },
|
{ .vid = 0x27c6, .pid = 0x658C, },
|
||||||
@@ -1632,6 +1638,7 @@ static const FpIdEntry id_table[] = {
|
|||||||
{ .vid = 0x27c6, .pid = 0x659A, },
|
{ .vid = 0x27c6, .pid = 0x659A, },
|
||||||
{ .vid = 0x27c6, .pid = 0x659C, },
|
{ .vid = 0x27c6, .pid = 0x659C, },
|
||||||
{ .vid = 0x27c6, .pid = 0x6A94, },
|
{ .vid = 0x27c6, .pid = 0x6A94, },
|
||||||
|
{ .vid = 0x27c6, .pid = 0x6512, },
|
||||||
{ .vid = 0, .pid = 0, .driver_data = 0 }, /* terminating entry */
|
{ .vid = 0, .pid = 0, .driver_data = 0 }, /* terminating entry */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ G_DEFINE_TYPE (FpiDeviceRealtek, fpi_device_realtek, FP_TYPE_DEVICE)
|
|||||||
|
|
||||||
static const FpIdEntry id_table[] = {
|
static const FpIdEntry id_table[] = {
|
||||||
{ .vid = 0x0bda, .pid = 0x5813, },
|
{ .vid = 0x0bda, .pid = 0x5813, },
|
||||||
|
{ .vid = 0x0bda, .pid = 0x5816, },
|
||||||
{ .vid = 0, .pid = 0, .driver_data = 0 }, /* terminating entry */
|
{ .vid = 0, .pid = 0, .driver_data = 0 }, /* terminating entry */
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -92,6 +93,50 @@ fp_task_ssm_generic_cb (FpiDeviceRealtek *self,
|
|||||||
fpi_ssm_next_state (self->task_ssm);
|
fpi_ssm_next_state (self->task_ssm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
fp_get_device_info_cb (FpiDeviceRealtek *self,
|
||||||
|
uint8_t *buffer_in,
|
||||||
|
GError *error)
|
||||||
|
{
|
||||||
|
if (error)
|
||||||
|
{
|
||||||
|
fpi_ssm_mark_failed (self->task_ssm, error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
self->template_len = TEMPLATE_LEN_COMMON;
|
||||||
|
|
||||||
|
fpi_ssm_next_state (self->task_ssm);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
fp_update_template_cb (FpiDeviceRealtek *self,
|
||||||
|
uint8_t *buffer_in,
|
||||||
|
GError *error)
|
||||||
|
{
|
||||||
|
if (error)
|
||||||
|
{
|
||||||
|
fpi_ssm_mark_failed (self->task_ssm, error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
fpi_ssm_jump_to_state (self->task_ssm, FP_RTK_VERIFY_NUM_STATES);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
fp_enroll_commit_cb (FpiDeviceRealtek *self,
|
||||||
|
uint8_t *buffer_in,
|
||||||
|
GError *error)
|
||||||
|
{
|
||||||
|
if (error)
|
||||||
|
{
|
||||||
|
fpi_ssm_mark_failed (self->task_ssm, error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
fpi_ssm_jump_to_state (self->task_ssm, FP_RTK_ENROLL_NUM_STATES);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
fp_finish_capture_cb (FpiDeviceRealtek *self,
|
fp_finish_capture_cb (FpiDeviceRealtek *self,
|
||||||
uint8_t *buffer_in,
|
uint8_t *buffer_in,
|
||||||
@@ -103,8 +148,17 @@ fp_finish_capture_cb (FpiDeviceRealtek *self,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
gint capture_status = buffer_in[0];
|
/* We hope this polling CMD can be completed before the action is cancelled */
|
||||||
|
GCancellable *cancellable = fpi_device_get_cancellable (FP_DEVICE (self));
|
||||||
|
if (g_cancellable_is_cancelled (cancellable))
|
||||||
|
{
|
||||||
|
fpi_ssm_mark_failed (self->task_ssm,
|
||||||
|
fpi_device_error_new_msg (FP_DEVICE_ERROR_PROTO,
|
||||||
|
"Action is cancelled!"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
gint capture_status = buffer_in[0];
|
||||||
if (capture_status == 0)
|
if (capture_status == 0)
|
||||||
{
|
{
|
||||||
fpi_device_report_finger_status_changes (FP_DEVICE (self),
|
fpi_device_report_finger_status_changes (FP_DEVICE (self),
|
||||||
@@ -238,7 +292,6 @@ fp_identify_feature_cb (FpiDeviceRealtek *self,
|
|||||||
}
|
}
|
||||||
|
|
||||||
gint in_status = buffer_in[0];
|
gint in_status = buffer_in[0];
|
||||||
|
|
||||||
if (in_status == FP_RTK_CMD_ERR)
|
if (in_status == FP_RTK_CMD_ERR)
|
||||||
{
|
{
|
||||||
fpi_ssm_mark_failed (self->task_ssm,
|
fpi_ssm_mark_failed (self->task_ssm,
|
||||||
@@ -291,7 +344,7 @@ fp_identify_feature_cb (FpiDeviceRealtek *self,
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
fpi_device_identify_report (device, print, match, error);
|
fpi_device_identify_report (device, print, match, error);
|
||||||
fpi_ssm_mark_completed (self->task_ssm);
|
fpi_ssm_jump_to_state (self->task_ssm, FP_RTK_VERIFY_NUM_STATES);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -340,9 +393,9 @@ fp_get_delete_pos_cb (FpiDeviceRealtek *self,
|
|||||||
|
|
||||||
for (gint i = 0; i < self->template_num; i++)
|
for (gint i = 0; i < self->template_num; i++)
|
||||||
{
|
{
|
||||||
if (buffer_in[i * TEMPLATE_LEN] != 0)
|
if (buffer_in[i * self->template_len] != 0)
|
||||||
{
|
{
|
||||||
memcpy (temp_userid, buffer_in + i * TEMPLATE_LEN + UID_OFFSET, DEFAULT_UID_LEN);
|
memcpy (temp_userid, buffer_in + i * self->template_len + UID_OFFSET, DEFAULT_UID_LEN);
|
||||||
if (g_strcmp0 (fp_print_get_description (print), (const char *) temp_userid) == 0)
|
if (g_strcmp0 (fp_print_get_description (print), (const char *) temp_userid) == 0)
|
||||||
{
|
{
|
||||||
self->pos_index = i;
|
self->pos_index = i;
|
||||||
@@ -380,10 +433,25 @@ fp_get_enroll_num_cb (FpiDeviceRealtek *self,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
fp_get_template_cb (FpiDeviceRealtek *self,
|
fp_verify_get_template_cb (FpiDeviceRealtek *self,
|
||||||
uint8_t *buffer_in,
|
uint8_t *buffer_in,
|
||||||
GError *error)
|
GError *error)
|
||||||
{
|
{
|
||||||
|
if (error)
|
||||||
|
{
|
||||||
|
fpi_ssm_mark_failed (self->task_ssm, error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
fpi_ssm_next_state (self->task_ssm);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
fp_enroll_get_template_cb (FpiDeviceRealtek *self,
|
||||||
|
uint8_t *buffer_in,
|
||||||
|
GError *error)
|
||||||
|
{
|
||||||
|
g_autofree guchar *seq_list = NULL;
|
||||||
gboolean found = FALSE;
|
gboolean found = FALSE;
|
||||||
|
|
||||||
if (error)
|
if (error)
|
||||||
@@ -394,7 +462,7 @@ fp_get_template_cb (FpiDeviceRealtek *self,
|
|||||||
|
|
||||||
for (gint i = 0; i < self->template_num; i++)
|
for (gint i = 0; i < self->template_num; i++)
|
||||||
{
|
{
|
||||||
if (buffer_in[i * TEMPLATE_LEN] == 0)
|
if (buffer_in[i * self->template_len] == 0)
|
||||||
{
|
{
|
||||||
self->pos_index = i;
|
self->pos_index = i;
|
||||||
found = TRUE;
|
found = TRUE;
|
||||||
@@ -425,7 +493,6 @@ fp_check_duplicate_cb (FpiDeviceRealtek *self,
|
|||||||
}
|
}
|
||||||
|
|
||||||
gint in_status = buffer_in[0];
|
gint in_status = buffer_in[0];
|
||||||
|
|
||||||
if (in_status == FP_RTK_CMD_ERR)
|
if (in_status == FP_RTK_CMD_ERR)
|
||||||
{
|
{
|
||||||
fpi_ssm_mark_failed (self->task_ssm,
|
fpi_ssm_mark_failed (self->task_ssm,
|
||||||
@@ -471,10 +538,10 @@ fp_list_cb (FpiDeviceRealtek *self,
|
|||||||
|
|
||||||
for (gint i = 0; i < self->template_num; i++)
|
for (gint i = 0; i < self->template_num; i++)
|
||||||
{
|
{
|
||||||
if (buffer_in[i * TEMPLATE_LEN] != 0)
|
if (buffer_in[i * self->template_len] != 0)
|
||||||
{
|
{
|
||||||
FpPrint *print = NULL;
|
FpPrint *print = NULL;
|
||||||
print = fp_print_from_data (self, buffer_in + i * TEMPLATE_LEN + SUBFACTOR_OFFSET);
|
print = fp_print_from_data (self, buffer_in + i * self->template_len + SUBFACTOR_OFFSET);
|
||||||
g_ptr_array_add (list_result, g_object_ref_sink (print));
|
g_ptr_array_add (list_result, g_object_ref_sink (print));
|
||||||
found = TRUE;
|
found = TRUE;
|
||||||
}
|
}
|
||||||
@@ -518,11 +585,11 @@ parse_status (guint8 *buffer, gint status_type)
|
|||||||
{
|
{
|
||||||
switch (status_type)
|
switch (status_type)
|
||||||
{
|
{
|
||||||
case FP_RTK_MSG_PLAINTEXT_NO_STATUS:
|
case FP_RTK_MSG_NO_STATUS:
|
||||||
return 0;
|
return 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FP_RTK_MSG_PLAINTEXT:
|
case FP_RTK_MSG_DEFAULT:
|
||||||
return buffer[0];
|
return buffer[0];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -621,13 +688,13 @@ fp_cmd_run_state (FpiSsm *ssm, FpDevice *dev)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case FP_RTK_CMD_TRANS_DATA:
|
case FP_RTK_CMD_TRANS_DATA:
|
||||||
if (self->cmd_type == FP_RTK_CMD_ONLY)
|
if (self->cmd_type == FP_RTK_CMD_BULK_ONLY)
|
||||||
{
|
{
|
||||||
fpi_ssm_jump_to_state (ssm, FP_RTK_CMD_GET_STATUS);
|
fpi_ssm_jump_to_state (ssm, FP_RTK_CMD_GET_STATUS);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (self->cmd_type == FP_RTK_CMD_WRITE)
|
if (self->cmd_type == FP_RTK_CMD_BULK_WRITE)
|
||||||
{
|
{
|
||||||
if (self->data_transfer)
|
if (self->data_transfer)
|
||||||
{
|
{
|
||||||
@@ -688,10 +755,10 @@ fp_cmd_ssm_done (FpiSsm *ssm, FpDevice *dev, GError *error)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static FpiUsbTransfer *
|
static FpiUsbTransfer *
|
||||||
prepare_transfer (FpDevice *dev,
|
prepare_bulk_transfer (FpDevice *dev,
|
||||||
guint8 *data,
|
guint8 *data,
|
||||||
gsize data_len,
|
gsize data_len,
|
||||||
GDestroyNotify free_func)
|
GDestroyNotify free_func)
|
||||||
{
|
{
|
||||||
g_autoptr(FpiUsbTransfer) transfer = NULL;
|
g_autoptr(FpiUsbTransfer) transfer = NULL;
|
||||||
|
|
||||||
@@ -708,29 +775,100 @@ prepare_transfer (FpDevice *dev,
|
|||||||
return g_steal_pointer (&transfer);
|
return g_steal_pointer (&transfer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
realtek_sensor_cmd (FpiDeviceRealtek *self,
|
fp_ctrl_cmd_cb (FpiUsbTransfer *transfer,
|
||||||
guint8 *cmd,
|
FpDevice *device,
|
||||||
guint8 *trans_data,
|
gpointer user_data,
|
||||||
FpRtkMsgType message_type,
|
GError *error)
|
||||||
gboolean bwait_data_delay,
|
{
|
||||||
SynCmdMsgCallback callback)
|
FpiDeviceRealtek *self = FPI_DEVICE_REALTEK (device);
|
||||||
|
g_autofree CommandData *data = g_steal_pointer (&user_data);
|
||||||
|
|
||||||
|
g_return_if_fail (data != NULL);
|
||||||
|
|
||||||
|
if (error)
|
||||||
|
{
|
||||||
|
fpi_ssm_mark_failed (transfer->ssm, error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (transfer->direction == G_USB_DEVICE_DIRECTION_HOST_TO_DEVICE)
|
||||||
|
{
|
||||||
|
if (data->callback)
|
||||||
|
data->callback (self, NULL, NULL);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (transfer->actual_length == 0)
|
||||||
|
{
|
||||||
|
fp_info ("Control transfer receive data failed!");
|
||||||
|
fpi_ssm_mark_failed (transfer->ssm,
|
||||||
|
fpi_device_error_new (FP_DEVICE_ERROR_DATA_INVALID));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data->callback)
|
||||||
|
data->callback (self, transfer->buffer, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
rtk_send_ctrl_cmd (FpiDeviceRealtek *self,
|
||||||
|
struct rtk_cmd_ctrl *ctrl_cmd,
|
||||||
|
guint8 *cmd_data,
|
||||||
|
SynCmdMsgCallback callback)
|
||||||
|
{
|
||||||
|
FpiUsbTransfer *transfer = NULL;
|
||||||
|
g_autofree CommandData *data = g_new0 (CommandData, 1);
|
||||||
|
|
||||||
|
data->callback = callback;
|
||||||
|
|
||||||
|
transfer = fpi_usb_transfer_new (FP_DEVICE (self));
|
||||||
|
fpi_usb_transfer_fill_control (transfer,
|
||||||
|
ctrl_cmd->direction,
|
||||||
|
G_USB_DEVICE_REQUEST_TYPE_VENDOR,
|
||||||
|
G_USB_DEVICE_RECIPIENT_DEVICE,
|
||||||
|
ctrl_cmd->request,
|
||||||
|
ctrl_cmd->value,
|
||||||
|
ctrl_cmd->index,
|
||||||
|
ctrl_cmd->len);
|
||||||
|
|
||||||
|
transfer->ssm = self->task_ssm;
|
||||||
|
if (ctrl_cmd->direction == G_USB_DEVICE_DIRECTION_DEVICE_TO_HOST &&
|
||||||
|
cmd_data != NULL && ctrl_cmd->len != 0)
|
||||||
|
memcpy (transfer->buffer, cmd_data, ctrl_cmd->len);
|
||||||
|
|
||||||
|
fpi_usb_transfer_submit (transfer,
|
||||||
|
CMD_TIMEOUT,
|
||||||
|
NULL,
|
||||||
|
fp_ctrl_cmd_cb,
|
||||||
|
g_steal_pointer (&data));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
rtk_sensor_bulk_cmd (FpiDeviceRealtek *self,
|
||||||
|
guint8 *cmd,
|
||||||
|
guint8 *trans_data,
|
||||||
|
FpRtkMsgType message_type,
|
||||||
|
gboolean bwait_data_delay,
|
||||||
|
SynCmdMsgCallback callback)
|
||||||
{
|
{
|
||||||
g_autoptr(FpiUsbTransfer) cmd_transfer = NULL;
|
g_autoptr(FpiUsbTransfer) cmd_transfer = NULL;
|
||||||
g_autoptr(FpiUsbTransfer) data_transfer = NULL;
|
g_autoptr(FpiUsbTransfer) data_transfer = NULL;
|
||||||
CommandData *data = g_new0 (CommandData, 1);
|
CommandData *data = g_new0 (CommandData, 1);
|
||||||
|
|
||||||
self->cmd_type = GET_CMD_TYPE (cmd[0]);
|
self->cmd_type = GET_BULK_CMD_TYPE (cmd[0]);
|
||||||
self->message_type = message_type;
|
self->message_type = message_type;
|
||||||
self->trans_data_len = GET_TRANS_DATA_LEN (cmd[11], cmd[10]);
|
self->trans_data_len = GET_TRANS_DATA_LEN (cmd[11], cmd[10]);
|
||||||
self->cmd_cancellable = bwait_data_delay;
|
self->cmd_cancellable = bwait_data_delay;
|
||||||
|
|
||||||
cmd_transfer = prepare_transfer (FP_DEVICE (self), cmd, FP_RTK_CMD_TOTAL_LEN, NULL);
|
cmd_transfer = prepare_bulk_transfer (FP_DEVICE (self), cmd, FP_RTK_CMD_BULK_TOTAL_LEN, NULL);
|
||||||
self->cmd_transfer = g_steal_pointer (&cmd_transfer);
|
self->cmd_transfer = g_steal_pointer (&cmd_transfer);
|
||||||
|
|
||||||
if ((self->cmd_type == FP_RTK_CMD_WRITE) && trans_data)
|
if ((self->cmd_type == FP_RTK_CMD_BULK_WRITE) && trans_data)
|
||||||
{
|
{
|
||||||
data_transfer = prepare_transfer (FP_DEVICE (self), trans_data, self->trans_data_len, g_free);
|
data_transfer = prepare_bulk_transfer (FP_DEVICE (self), trans_data, self->trans_data_len, g_free);
|
||||||
self->data_transfer = g_steal_pointer (&data_transfer);
|
self->data_transfer = g_steal_pointer (&data_transfer);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -829,34 +967,49 @@ fp_verify_sm_run_state (FpiSsm *ssm, FpDevice *device)
|
|||||||
|
|
||||||
switch (fpi_ssm_get_cur_state (ssm))
|
switch (fpi_ssm_get_cur_state (ssm))
|
||||||
{
|
{
|
||||||
|
case FP_RTK_VERIFY_GET_TEMPLATE:
|
||||||
|
g_assert (self->template_num > 0);
|
||||||
|
|
||||||
|
co_get_template.data_len[0] = GET_LEN_L (self->template_len * self->template_num);
|
||||||
|
co_get_template.data_len[1] = GET_LEN_H (self->template_len * self->template_num);
|
||||||
|
cmd_buf = (guint8 *) &co_get_template;
|
||||||
|
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_DEFAULT, 0, fp_verify_get_template_cb);
|
||||||
|
break;
|
||||||
|
|
||||||
case FP_RTK_VERIFY_CAPTURE:
|
case FP_RTK_VERIFY_CAPTURE:
|
||||||
fpi_device_report_finger_status_changes (device,
|
fpi_device_report_finger_status_changes (device,
|
||||||
FP_FINGER_STATUS_NEEDED,
|
FP_FINGER_STATUS_NEEDED,
|
||||||
FP_FINGER_STATUS_NONE);
|
FP_FINGER_STATUS_NONE);
|
||||||
|
|
||||||
cmd_buf = (guint8 *) &co_start_capture;
|
cmd_buf = (guint8 *) &co_start_capture;
|
||||||
realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT, 1, fp_task_ssm_generic_cb);
|
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_DEFAULT, 0, fp_task_ssm_generic_cb);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FP_RTK_VERIFY_FINISH_CAPTURE:
|
case FP_RTK_VERIFY_FINISH_CAPTURE:
|
||||||
cmd_buf = (guint8 *) &co_finish_capture;
|
cmd_buf = (guint8 *) &co_finish_capture;
|
||||||
realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT, 1, fp_finish_capture_cb);
|
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_DEFAULT, 0, fp_finish_capture_cb);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FP_RTK_VERIFY_ACCEPT_SAMPLE:
|
case FP_RTK_VERIFY_ACCEPT_SAMPLE:
|
||||||
co_accept_sample.param[0] = self->fp_purpose;
|
co_accept_sample.param[0] = self->fp_purpose;
|
||||||
cmd_buf = (guint8 *) &co_accept_sample;
|
cmd_buf = (guint8 *) &co_accept_sample;
|
||||||
realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT_NO_STATUS, 1, fp_accept_sample_cb);
|
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_NO_STATUS, 0, fp_accept_sample_cb);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FP_RTK_VERIFY_INDENTIFY_FEATURE:
|
case FP_RTK_VERIFY_INDENTIFY_FEATURE:
|
||||||
cmd_buf = (guint8 *) &tls_identify_feature;
|
cmd_buf = (guint8 *) &nor_identify_feature;
|
||||||
realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT_NO_STATUS, 0, fp_identify_feature_cb);
|
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_NO_STATUS, 0, fp_identify_feature_cb);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FP_RTK_VERIFY_UPDATE_TEMPLATE:
|
case FP_RTK_VERIFY_UPDATE_TEMPLATE:
|
||||||
cmd_buf = (guint8 *) &co_update_template;
|
cmd_buf = (guint8 *) &co_update_template;
|
||||||
realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT, 0, fp_task_ssm_generic_cb);
|
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_DEFAULT, 0, fp_update_template_cb);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FP_RTK_VERIFY_CANCEL_CAPTURE:
|
||||||
|
co_cancel_capture.param[0] = self->fp_purpose;
|
||||||
|
cmd_buf = (guint8 *) &co_cancel_capture;
|
||||||
|
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_DEFAULT, 0, fp_task_ssm_generic_cb);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -869,7 +1022,6 @@ fp_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device)
|
|||||||
FpiDeviceRealtek *self = FPI_DEVICE_REALTEK (device);
|
FpiDeviceRealtek *self = FPI_DEVICE_REALTEK (device);
|
||||||
FpPrint *print = NULL;
|
FpPrint *print = NULL;
|
||||||
guint8 *cmd_buf = NULL;
|
guint8 *cmd_buf = NULL;
|
||||||
guint8 *trans_id = NULL;
|
|
||||||
GVariant *uid = NULL;
|
GVariant *uid = NULL;
|
||||||
GVariant *data = NULL;
|
GVariant *data = NULL;
|
||||||
gsize user_id_len;
|
gsize user_id_len;
|
||||||
@@ -880,17 +1032,17 @@ fp_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device)
|
|||||||
case FP_RTK_ENROLL_GET_TEMPLATE:
|
case FP_RTK_ENROLL_GET_TEMPLATE:
|
||||||
g_assert (self->template_num > 0);
|
g_assert (self->template_num > 0);
|
||||||
|
|
||||||
co_get_template.data_len[0] = GET_LEN_L (TEMPLATE_LEN * self->template_num);
|
co_get_template.data_len[0] = GET_LEN_L (self->template_len * self->template_num);
|
||||||
co_get_template.data_len[1] = GET_LEN_H (TEMPLATE_LEN * self->template_num);
|
co_get_template.data_len[1] = GET_LEN_H (self->template_len * self->template_num);
|
||||||
|
|
||||||
cmd_buf = (guint8 *) &co_get_template;
|
cmd_buf = (guint8 *) &co_get_template;
|
||||||
realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT, 0, fp_get_template_cb);
|
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_DEFAULT, 0, fp_enroll_get_template_cb);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FP_RTK_ENROLL_BEGIN_POS:
|
case FP_RTK_ENROLL_BEGIN_POS:
|
||||||
tls_enroll_begin.param[0] = self->pos_index;
|
nor_enroll_begin.param[0] = self->pos_index;
|
||||||
cmd_buf = (guint8 *) &tls_enroll_begin;
|
cmd_buf = (guint8 *) &nor_enroll_begin;
|
||||||
realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT, 0, fp_task_ssm_generic_cb);
|
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_DEFAULT, 0, fp_task_ssm_generic_cb);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FP_RTK_ENROLL_CAPTURE:
|
case FP_RTK_ENROLL_CAPTURE:
|
||||||
@@ -899,32 +1051,37 @@ fp_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device)
|
|||||||
FP_FINGER_STATUS_NONE);
|
FP_FINGER_STATUS_NONE);
|
||||||
|
|
||||||
cmd_buf = (guint8 *) &co_start_capture;
|
cmd_buf = (guint8 *) &co_start_capture;
|
||||||
realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT, 1, fp_task_ssm_generic_cb);
|
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_DEFAULT, 0, fp_task_ssm_generic_cb);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FP_RTK_ENROLL_FINISH_CAPTURE:
|
case FP_RTK_ENROLL_FINISH_CAPTURE:
|
||||||
cmd_buf = (guint8 *) &co_finish_capture;
|
cmd_buf = (guint8 *) &co_finish_capture;
|
||||||
realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT, 1, fp_finish_capture_cb);
|
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_DEFAULT, 0, fp_finish_capture_cb);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FP_RTK_ENROLL_ACCEPT_SAMPLE:
|
case FP_RTK_ENROLL_ACCEPT_SAMPLE:
|
||||||
co_accept_sample.param[0] = self->fp_purpose;
|
co_accept_sample.param[0] = self->fp_purpose;
|
||||||
cmd_buf = (guint8 *) &co_accept_sample;
|
cmd_buf = (guint8 *) &co_accept_sample;
|
||||||
realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT_NO_STATUS, 1, fp_accept_sample_cb);
|
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_NO_STATUS, 0, fp_accept_sample_cb);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FP_RTK_ENROLL_CHECK_DUPLICATE:
|
case FP_RTK_ENROLL_CHECK_DUPLICATE:
|
||||||
cmd_buf = (guint8 *) &co_check_duplicate;
|
cmd_buf = (guint8 *) &co_check_duplicate;
|
||||||
realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT_NO_STATUS, 1, fp_check_duplicate_cb);
|
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_NO_STATUS, 0, fp_check_duplicate_cb);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FP_RTK_ENROLL_COMMIT:
|
case FP_RTK_ENROLL_COMMIT:
|
||||||
|
guint8 *trans_id = NULL;
|
||||||
|
gint payload_len;
|
||||||
|
|
||||||
|
payload_len = UID_PAYLOAD_LEN_DEFAULT;
|
||||||
|
|
||||||
fpi_device_get_enroll_data (device, &print);
|
fpi_device_get_enroll_data (device, &print);
|
||||||
user_id = fpi_print_generate_user_id (print);
|
user_id = fpi_print_generate_user_id (print);
|
||||||
user_id_len = strlen (user_id);
|
user_id_len = strlen (user_id);
|
||||||
user_id_len = MIN (DEFAULT_UID_LEN, user_id_len);
|
user_id_len = MIN (DEFAULT_UID_LEN, user_id_len);
|
||||||
|
|
||||||
payload = g_malloc0 (UID_PAYLOAD_LEN);
|
payload = g_malloc0 (payload_len);
|
||||||
memcpy (payload, user_id, user_id_len);
|
memcpy (payload, user_id, user_id_len);
|
||||||
|
|
||||||
trans_id = g_steal_pointer (&payload);
|
trans_id = g_steal_pointer (&payload);
|
||||||
@@ -945,10 +1102,18 @@ fp_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device)
|
|||||||
|
|
||||||
g_debug ("user_id: %s, finger: 0x%x", user_id, finger);
|
g_debug ("user_id: %s, finger: 0x%x", user_id, finger);
|
||||||
|
|
||||||
tls_enroll_commit.param[0] = SUB_FINGER_01;
|
nor_enroll_commit.param[0] = SUB_FINGER_01;
|
||||||
cmd_buf = (guint8 *) &tls_enroll_commit;
|
nor_enroll_commit.data_len[0] = GET_LEN_L (payload_len);
|
||||||
realtek_sensor_cmd (self, cmd_buf, trans_id, FP_RTK_MSG_PLAINTEXT, 0, fp_task_ssm_generic_cb);
|
nor_enroll_commit.data_len[1] = GET_LEN_H (payload_len);
|
||||||
|
|
||||||
|
cmd_buf = (guint8 *) &nor_enroll_commit;
|
||||||
|
rtk_sensor_bulk_cmd (self, cmd_buf, trans_id, FP_RTK_MSG_DEFAULT, 1, fp_enroll_commit_cb);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case FP_RTK_ENROLL_CANCEL_CAPTURE:
|
||||||
|
co_cancel_capture.param[0] = self->fp_purpose;
|
||||||
|
cmd_buf = (guint8 *) &co_cancel_capture;
|
||||||
|
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_DEFAULT, 0, fp_task_ssm_generic_cb);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -960,15 +1125,19 @@ fp_init_sm_run_state (FpiSsm *ssm, FpDevice *device)
|
|||||||
|
|
||||||
switch (fpi_ssm_get_cur_state (ssm))
|
switch (fpi_ssm_get_cur_state (ssm))
|
||||||
{
|
{
|
||||||
|
case FP_RTK_INIT_GET_DEVICE_INFO:
|
||||||
|
rtk_send_ctrl_cmd (self, &get_device_info, NULL, fp_get_device_info_cb);
|
||||||
|
break;
|
||||||
|
|
||||||
case FP_RTK_INIT_SELECT_OS:
|
case FP_RTK_INIT_SELECT_OS:
|
||||||
co_select_system.param[0] = 0x01;
|
co_select_system.param[0] = 0x01;
|
||||||
cmd_buf = (guint8 *) &co_select_system;
|
cmd_buf = (guint8 *) &co_select_system;
|
||||||
realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT, 0, fp_task_ssm_generic_cb);
|
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_DEFAULT, 0, fp_task_ssm_generic_cb);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FP_RTK_INIT_GET_ENROLL_NUM:
|
case FP_RTK_INIT_GET_ENROLL_NUM:
|
||||||
cmd_buf = (guint8 *) &co_get_enroll_num;
|
cmd_buf = (guint8 *) &co_get_enroll_num;
|
||||||
realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT, 0, fp_get_enroll_num_cb);
|
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_DEFAULT, 0, fp_get_enroll_num_cb);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -984,17 +1153,17 @@ fp_delete_sm_run_state (FpiSsm *ssm, FpDevice *device)
|
|||||||
case FP_RTK_DELETE_GET_POS:
|
case FP_RTK_DELETE_GET_POS:
|
||||||
g_assert (self->template_num > 0);
|
g_assert (self->template_num > 0);
|
||||||
|
|
||||||
co_get_template.data_len[0] = GET_LEN_L (TEMPLATE_LEN * self->template_num);
|
co_get_template.data_len[0] = GET_LEN_L (self->template_len * self->template_num);
|
||||||
co_get_template.data_len[1] = GET_LEN_H (TEMPLATE_LEN * self->template_num);
|
co_get_template.data_len[1] = GET_LEN_H (self->template_len * self->template_num);
|
||||||
|
|
||||||
cmd_buf = (guint8 *) &co_get_template;
|
cmd_buf = (guint8 *) &co_get_template;
|
||||||
realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT, 0, fp_get_delete_pos_cb);
|
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_DEFAULT, 0, fp_get_delete_pos_cb);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FP_RTK_DELETE_PRINT:
|
case FP_RTK_DELETE_PRINT:
|
||||||
co_delete_record.param[0] = self->pos_index;
|
co_delete_record.param[0] = self->pos_index;
|
||||||
cmd_buf = (guint8 *) &co_delete_record;
|
cmd_buf = (guint8 *) &co_delete_record;
|
||||||
realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT, 0, fp_task_ssm_generic_cb);
|
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_DEFAULT, 0, fp_task_ssm_generic_cb);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1012,17 +1181,14 @@ identify_verify (FpDevice *device)
|
|||||||
g_assert (current_action == FPI_DEVICE_ACTION_VERIFY ||
|
g_assert (current_action == FPI_DEVICE_ACTION_VERIFY ||
|
||||||
current_action == FPI_DEVICE_ACTION_IDENTIFY);
|
current_action == FPI_DEVICE_ACTION_IDENTIFY);
|
||||||
|
|
||||||
if (current_action == FPI_DEVICE_ACTION_IDENTIFY)
|
self->fp_purpose = FP_RTK_PURPOSE_IDENTIFY;
|
||||||
self->fp_purpose = FP_RTK_PURPOSE_IDENTIFY;
|
|
||||||
else
|
|
||||||
self->fp_purpose = FP_RTK_PURPOSE_VERIFY;
|
|
||||||
|
|
||||||
g_assert (!self->task_ssm);
|
g_assert (!self->task_ssm);
|
||||||
|
|
||||||
self->task_ssm = fpi_ssm_new_full (device,
|
self->task_ssm = fpi_ssm_new_full (device,
|
||||||
fp_verify_sm_run_state,
|
fp_verify_sm_run_state,
|
||||||
FP_RTK_VERIFY_NUM_STATES,
|
FP_RTK_VERIFY_NUM_STATES,
|
||||||
FP_RTK_VERIFY_NUM_STATES,
|
FP_RTK_VERIFY_CANCEL_CAPTURE,
|
||||||
"Verify & Identify");
|
"Verify & Identify");
|
||||||
|
|
||||||
fpi_ssm_start (self->task_ssm, fp_verify_ssm_done);
|
fpi_ssm_start (self->task_ssm, fp_verify_ssm_done);
|
||||||
@@ -1042,7 +1208,7 @@ enroll (FpDevice *device)
|
|||||||
self->task_ssm = fpi_ssm_new_full (device,
|
self->task_ssm = fpi_ssm_new_full (device,
|
||||||
fp_enroll_sm_run_state,
|
fp_enroll_sm_run_state,
|
||||||
FP_RTK_ENROLL_NUM_STATES,
|
FP_RTK_ENROLL_NUM_STATES,
|
||||||
FP_RTK_ENROLL_NUM_STATES,
|
FP_RTK_ENROLL_CANCEL_CAPTURE,
|
||||||
"Enroll");
|
"Enroll");
|
||||||
|
|
||||||
fpi_ssm_start (self->task_ssm, fp_enroll_ssm_done);
|
fpi_ssm_start (self->task_ssm, fp_enroll_ssm_done);
|
||||||
@@ -1167,7 +1333,7 @@ clear_storage (FpDevice *device)
|
|||||||
G_DEBUG_HERE ();
|
G_DEBUG_HERE ();
|
||||||
co_delete_record.param[0] = 0xff;
|
co_delete_record.param[0] = 0xff;
|
||||||
cmd_buf = (guint8 *) &co_delete_record;
|
cmd_buf = (guint8 *) &co_delete_record;
|
||||||
realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT, 0, fp_clear_storage_cb);
|
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_DEFAULT, 0, fp_clear_storage_cb);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -1179,11 +1345,11 @@ list_print (FpDevice *device)
|
|||||||
G_DEBUG_HERE ();
|
G_DEBUG_HERE ();
|
||||||
g_assert (self->template_num > 0);
|
g_assert (self->template_num > 0);
|
||||||
|
|
||||||
co_get_template.data_len[0] = GET_LEN_L (TEMPLATE_LEN * self->template_num);
|
co_get_template.data_len[0] = GET_LEN_L (self->template_len * self->template_num);
|
||||||
co_get_template.data_len[1] = GET_LEN_H (TEMPLATE_LEN * self->template_num);
|
co_get_template.data_len[1] = GET_LEN_H (self->template_len * self->template_num);
|
||||||
|
|
||||||
cmd_buf = (guint8 *) &co_get_template;
|
cmd_buf = (guint8 *) &co_get_template;
|
||||||
realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT, 1, fp_list_cb);
|
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_DEFAULT, 1, fp_list_cb);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|||||||
@@ -30,16 +30,17 @@
|
|||||||
|
|
||||||
#define EP_IN_MAX_BUF_SIZE 2048
|
#define EP_IN_MAX_BUF_SIZE 2048
|
||||||
|
|
||||||
#define FP_RTK_CMD_TOTAL_LEN 12
|
#define FP_RTK_CMD_BULK_TOTAL_LEN 12
|
||||||
#define FP_RTK_CMD_LEN 2
|
#define FP_RTK_CMD_BULK_LEN 2
|
||||||
#define FP_RTK_CMD_PARAM_LEN 4
|
#define FP_RTK_CMD_BULK_PARAM_LEN 4
|
||||||
#define FP_RTK_CMD_ADDR_LEN 4
|
#define FP_RTK_CMD_BULK_ADDR_LEN 4
|
||||||
#define FP_RTK_CMD_DATA_LEN 2
|
#define FP_RTK_CMD_BULK_DATA_LEN 2
|
||||||
|
|
||||||
|
#define TEMPLATE_LEN_COMMON 35
|
||||||
|
|
||||||
#define TEMPLATE_LEN 35
|
|
||||||
#define SUBFACTOR_OFFSET 2
|
#define SUBFACTOR_OFFSET 2
|
||||||
#define UID_OFFSET 3
|
#define UID_OFFSET 3
|
||||||
#define UID_PAYLOAD_LEN 32
|
#define UID_PAYLOAD_LEN_DEFAULT 32
|
||||||
|
|
||||||
/* Command transfer timeout :ms*/
|
/* Command transfer timeout :ms*/
|
||||||
#define CMD_TIMEOUT 1000
|
#define CMD_TIMEOUT 1000
|
||||||
@@ -50,7 +51,7 @@
|
|||||||
#define DEFAULT_UID_LEN 28
|
#define DEFAULT_UID_LEN 28
|
||||||
#define SUB_FINGER_01 0xFF
|
#define SUB_FINGER_01 0xFF
|
||||||
|
|
||||||
#define GET_CMD_TYPE(val) ((val & 0xC0) >> 6)
|
#define GET_BULK_CMD_TYPE(val) ((val & 0xC0) >> 6)
|
||||||
#define GET_TRANS_DATA_LEN(len_h, len_l) ((len_h << 8) | len_l)
|
#define GET_TRANS_DATA_LEN(len_h, len_l) ((len_h << 8) | len_l)
|
||||||
#define GET_LEN_L(total_data_len) ((total_data_len) & 0xff)
|
#define GET_LEN_L(total_data_len) ((total_data_len) & 0xff)
|
||||||
#define GET_LEN_H(total_data_len) ((total_data_len) >> 8)
|
#define GET_LEN_H(total_data_len) ((total_data_len) >> 8)
|
||||||
@@ -67,19 +68,19 @@ typedef struct
|
|||||||
} CommandData;
|
} CommandData;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
FP_RTK_CMD_ONLY = 0,
|
FP_RTK_CMD_BULK_ONLY = 0,
|
||||||
FP_RTK_CMD_READ,
|
FP_RTK_CMD_BULK_READ,
|
||||||
FP_RTK_CMD_WRITE,
|
FP_RTK_CMD_BULK_WRITE,
|
||||||
} FpRtkCmdType;
|
} FpRtkCmdType;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
FP_RTK_MSG_PLAINTEXT = 0,
|
FP_RTK_MSG_DEFAULT = 0,
|
||||||
FP_RTK_MSG_PLAINTEXT_NO_STATUS,
|
FP_RTK_MSG_NO_STATUS,
|
||||||
} FpRtkMsgType;
|
} FpRtkMsgType;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
FP_RTK_PURPOSE_IDENTIFY = 0x01, /* identify before enroll */
|
FP_RTK_PURPOSE_VERIFY = 0x01,
|
||||||
FP_RTK_PURPOSE_VERIFY = 0x02,
|
FP_RTK_PURPOSE_IDENTIFY = 0x02,
|
||||||
FP_RTK_PURPOSE_ENROLL = 0x04,
|
FP_RTK_PURPOSE_ENROLL = 0x04,
|
||||||
} FpRtkPurpose;
|
} FpRtkPurpose;
|
||||||
|
|
||||||
@@ -107,15 +108,18 @@ typedef enum {
|
|||||||
FP_RTK_ENROLL_ACCEPT_SAMPLE,
|
FP_RTK_ENROLL_ACCEPT_SAMPLE,
|
||||||
FP_RTK_ENROLL_CHECK_DUPLICATE,
|
FP_RTK_ENROLL_CHECK_DUPLICATE,
|
||||||
FP_RTK_ENROLL_COMMIT,
|
FP_RTK_ENROLL_COMMIT,
|
||||||
|
FP_RTK_ENROLL_CANCEL_CAPTURE,
|
||||||
FP_RTK_ENROLL_NUM_STATES,
|
FP_RTK_ENROLL_NUM_STATES,
|
||||||
} FpRtkEnrollState;
|
} FpRtkEnrollState;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
FP_RTK_VERIFY_CAPTURE = 0,
|
FP_RTK_VERIFY_GET_TEMPLATE = 0,
|
||||||
|
FP_RTK_VERIFY_CAPTURE,
|
||||||
FP_RTK_VERIFY_FINISH_CAPTURE,
|
FP_RTK_VERIFY_FINISH_CAPTURE,
|
||||||
FP_RTK_VERIFY_ACCEPT_SAMPLE,
|
FP_RTK_VERIFY_ACCEPT_SAMPLE,
|
||||||
FP_RTK_VERIFY_INDENTIFY_FEATURE,
|
FP_RTK_VERIFY_INDENTIFY_FEATURE,
|
||||||
FP_RTK_VERIFY_UPDATE_TEMPLATE,
|
FP_RTK_VERIFY_UPDATE_TEMPLATE,
|
||||||
|
FP_RTK_VERIFY_CANCEL_CAPTURE,
|
||||||
FP_RTK_VERIFY_NUM_STATES,
|
FP_RTK_VERIFY_NUM_STATES,
|
||||||
} FpRtkVerifyState;
|
} FpRtkVerifyState;
|
||||||
|
|
||||||
@@ -126,7 +130,8 @@ typedef enum {
|
|||||||
} FpRtkDeleteState;
|
} FpRtkDeleteState;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
FP_RTK_INIT_SELECT_OS = 0,
|
FP_RTK_INIT_GET_DEVICE_INFO = 0,
|
||||||
|
FP_RTK_INIT_SELECT_OS,
|
||||||
FP_RTK_INIT_GET_ENROLL_NUM,
|
FP_RTK_INIT_GET_ENROLL_NUM,
|
||||||
FP_RTK_INIT_NUM_STATES,
|
FP_RTK_INIT_NUM_STATES,
|
||||||
} FpRtkInitState;
|
} FpRtkInitState;
|
||||||
@@ -155,66 +160,87 @@ struct _FpiDeviceRealtek
|
|||||||
FpRtkPurpose fp_purpose;
|
FpRtkPurpose fp_purpose;
|
||||||
gint pos_index;
|
gint pos_index;
|
||||||
gint template_num;
|
gint template_num;
|
||||||
|
gint template_len;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct realtek_fp_cmd
|
struct rtk_cmd_bulk
|
||||||
{
|
{
|
||||||
uint8_t cmd[FP_RTK_CMD_LEN];
|
uint8_t cmd[FP_RTK_CMD_BULK_LEN];
|
||||||
uint8_t param[FP_RTK_CMD_PARAM_LEN];
|
uint8_t param[FP_RTK_CMD_BULK_PARAM_LEN];
|
||||||
uint8_t addr[FP_RTK_CMD_ADDR_LEN];
|
uint8_t addr[FP_RTK_CMD_BULK_ADDR_LEN];
|
||||||
uint8_t data_len[FP_RTK_CMD_DATA_LEN];
|
uint8_t data_len[FP_RTK_CMD_BULK_DATA_LEN];
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct realtek_fp_cmd co_start_capture = {
|
struct rtk_cmd_ctrl
|
||||||
|
{
|
||||||
|
int direction;
|
||||||
|
uint8_t request;
|
||||||
|
uint16_t value;
|
||||||
|
uint16_t index;
|
||||||
|
uint16_t len;
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct rtk_cmd_ctrl get_device_info = {
|
||||||
|
.direction = G_USB_DEVICE_DIRECTION_DEVICE_TO_HOST,
|
||||||
|
.request = 0x07,
|
||||||
|
.value = 0x000D,
|
||||||
|
.index = 0x0000,
|
||||||
|
.len = 0x0008,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct rtk_cmd_bulk co_start_capture = {
|
||||||
.cmd = {0x05, 0x05},
|
.cmd = {0x05, 0x05},
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct realtek_fp_cmd co_finish_capture = {
|
static struct rtk_cmd_bulk co_finish_capture = {
|
||||||
.cmd = {0x45, 0x06},
|
.cmd = {0x45, 0x06},
|
||||||
.data_len = {0x05},
|
.data_len = {0x05},
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct realtek_fp_cmd co_accept_sample = {
|
static struct rtk_cmd_bulk co_accept_sample = {
|
||||||
.cmd = {0x45, 0x08},
|
.cmd = {0x45, 0x08},
|
||||||
.data_len = {0x09},
|
.data_len = {0x09},
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct realtek_fp_cmd tls_identify_feature = {
|
static struct rtk_cmd_bulk nor_identify_feature = {
|
||||||
.cmd = {0x45, 0x22},
|
.cmd = {0x45, 0x22},
|
||||||
.data_len = {0x2A},
|
.data_len = {0x2A},
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct realtek_fp_cmd co_get_enroll_num = {
|
static struct rtk_cmd_bulk co_get_enroll_num = {
|
||||||
.cmd = {0x45, 0x0d},
|
.cmd = {0x45, 0x0d},
|
||||||
.data_len = {0x02},
|
.data_len = {0x02},
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct realtek_fp_cmd co_get_template = {
|
static struct rtk_cmd_bulk co_get_template = {
|
||||||
.cmd = {0x45, 0x0E},
|
.cmd = {0x45, 0x0E},
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct realtek_fp_cmd tls_enroll_begin = {
|
static struct rtk_cmd_bulk nor_enroll_begin = {
|
||||||
.cmd = {0x05, 0x20},
|
.cmd = {0x05, 0x20},
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct realtek_fp_cmd co_check_duplicate = {
|
static struct rtk_cmd_bulk co_check_duplicate = {
|
||||||
.cmd = {0x45, 0x10},
|
.cmd = {0x45, 0x10},
|
||||||
.data_len = {0x22},
|
.data_len = {0x22},
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct realtek_fp_cmd tls_enroll_commit = {
|
static struct rtk_cmd_bulk nor_enroll_commit = {
|
||||||
.cmd = {0x85, 0x21},
|
.cmd = {0x85, 0x21},
|
||||||
.data_len = {0x20},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct realtek_fp_cmd co_update_template = {
|
static struct rtk_cmd_bulk co_update_template = {
|
||||||
.cmd = {0x05, 0x11},
|
.cmd = {0x05, 0x11},
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct realtek_fp_cmd co_delete_record = {
|
static struct rtk_cmd_bulk co_delete_record = {
|
||||||
.cmd = {0x05, 0x0F},
|
.cmd = {0x05, 0x0F},
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct realtek_fp_cmd co_select_system = {
|
static struct rtk_cmd_bulk co_select_system = {
|
||||||
.cmd = {0x05, 0x13},
|
.cmd = {0x05, 0x13},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct rtk_cmd_bulk co_cancel_capture = {
|
||||||
|
.cmd = {0x05, 0x07},
|
||||||
};
|
};
|
||||||
@@ -36,6 +36,7 @@ static const FpIdEntry id_table[] = {
|
|||||||
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x00F9, },
|
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x00F9, },
|
||||||
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x00FC, },
|
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x00FC, },
|
||||||
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x00C2, },
|
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x00C2, },
|
||||||
|
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x00C4, },
|
||||||
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0100, },
|
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0100, },
|
||||||
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x00F0, },
|
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x00F0, },
|
||||||
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0103, },
|
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0103, },
|
||||||
@@ -48,6 +49,8 @@ static const FpIdEntry id_table[] = {
|
|||||||
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0104, },
|
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0104, },
|
||||||
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0173, },
|
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0173, },
|
||||||
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0106, },
|
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0106, },
|
||||||
|
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x019D, },
|
||||||
|
{ .vid = SYNAPTICS_VENDOR_ID, .pid = 0x00C6, },
|
||||||
{ .vid = 0, .pid = 0, .driver_data = 0 }, /* terminating entry */
|
{ .vid = 0, .pid = 0, .driver_data = 0 }, /* terminating entry */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -27,10 +27,6 @@
|
|||||||
|
|
||||||
#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
|
||||||
@@ -300,8 +296,6 @@ 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);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -357,7 +351,6 @@ 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;
|
||||||
|
|
||||||
@@ -365,10 +358,6 @@ 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;)
|
||||||
|
|||||||
@@ -292,14 +292,14 @@ fp_device_get_property (GObject *object,
|
|||||||
|
|
||||||
case PROP_FPI_UDEV_DATA_SPIDEV:
|
case PROP_FPI_UDEV_DATA_SPIDEV:
|
||||||
if (cls->type == FP_DEVICE_TYPE_UDEV)
|
if (cls->type == FP_DEVICE_TYPE_UDEV)
|
||||||
g_value_set_string (value, g_strdup (priv->udev_data.spidev_path));
|
g_value_set_string (value, priv->udev_data.spidev_path);
|
||||||
else
|
else
|
||||||
g_value_set_string (value, NULL);
|
g_value_set_string (value, NULL);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PROP_FPI_UDEV_DATA_HIDRAW:
|
case PROP_FPI_UDEV_DATA_HIDRAW:
|
||||||
if (cls->type == FP_DEVICE_TYPE_UDEV)
|
if (cls->type == FP_DEVICE_TYPE_UDEV)
|
||||||
g_value_set_string (value, g_strdup (priv->udev_data.hidraw_path));
|
g_value_set_string (value, priv->udev_data.hidraw_path);
|
||||||
else
|
else
|
||||||
g_value_set_string (value, NULL);
|
g_value_set_string (value, NULL);
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -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_USB,
|
|
||||||
FP_DEVICE_TYPE_UDEV,
|
FP_DEVICE_TYPE_UDEV,
|
||||||
|
FP_DEVICE_TYPE_USB,
|
||||||
} FpDeviceType;
|
} FpDeviceType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -20,7 +20,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "fp-image.h"
|
#include "fp-image.h"
|
||||||
#include "tod/tod-macros.h"
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* fpi_frame:
|
* fpi_frame:
|
||||||
@@ -111,9 +110,6 @@ 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,
|
||||||
|
|||||||
@@ -675,4 +675,6 @@ fpi_byte_reader_skip_inline (FpiByteReader * reader, guint nbytes)
|
|||||||
|
|
||||||
#endif /* FPI_BYTE_READER_DISABLE_INLINES */
|
#endif /* FPI_BYTE_READER_DISABLE_INLINES */
|
||||||
|
|
||||||
|
G_DEFINE_AUTOPTR_CLEANUP_FUNC (FpiByteReader, fpi_byte_reader_free);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|||||||
@@ -75,7 +75,8 @@ fpi_byte_writer_new_with_size (guint size, gboolean fixed)
|
|||||||
FpiByteWriter *ret = fpi_byte_writer_new ();
|
FpiByteWriter *ret = fpi_byte_writer_new ();
|
||||||
|
|
||||||
ret->alloc_size = size;
|
ret->alloc_size = size;
|
||||||
ret->parent.data = g_malloc (ret->alloc_size);
|
ret->parent.data = g_malloc0 (ret->alloc_size);
|
||||||
|
ret->parent.size = size;
|
||||||
ret->fixed = fixed;
|
ret->fixed = fixed;
|
||||||
ret->owned = TRUE;
|
ret->owned = TRUE;
|
||||||
|
|
||||||
@@ -142,7 +143,8 @@ fpi_byte_writer_init_with_size (FpiByteWriter * writer, guint size,
|
|||||||
|
|
||||||
fpi_byte_writer_init (writer);
|
fpi_byte_writer_init (writer);
|
||||||
|
|
||||||
writer->parent.data = g_malloc (size);
|
writer->parent.data = g_malloc0 (size);
|
||||||
|
writer->parent.size = size;
|
||||||
writer->alloc_size = size;
|
writer->alloc_size = size;
|
||||||
writer->fixed = fixed;
|
writer->fixed = fixed;
|
||||||
writer->owned = TRUE;
|
writer->owned = TRUE;
|
||||||
@@ -209,10 +211,9 @@ fpi_byte_writer_reset_and_get_data (FpiByteWriter * writer)
|
|||||||
|
|
||||||
g_return_val_if_fail (writer != NULL, NULL);
|
g_return_val_if_fail (writer != NULL, NULL);
|
||||||
|
|
||||||
data = (guint8 *) writer->parent.data;
|
data = (guint8 *) g_steal_pointer (&writer->parent.data);
|
||||||
if (!writer->owned)
|
if (!writer->owned)
|
||||||
data = g_memdup2 (data, writer->parent.size);
|
data = g_memdup2 (data, writer->parent.size);
|
||||||
writer->parent.data = NULL;
|
|
||||||
fpi_byte_writer_reset (writer);
|
fpi_byte_writer_reset (writer);
|
||||||
|
|
||||||
return data;
|
return data;
|
||||||
|
|||||||
@@ -111,6 +111,17 @@ fpi_byte_writer_set_pos (FpiByteWriter *writer, guint pos)
|
|||||||
return fpi_byte_reader_set_pos (FPI_BYTE_READER (writer), pos);
|
return fpi_byte_reader_set_pos (FPI_BYTE_READER (writer), pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline gboolean
|
||||||
|
fpi_byte_writer_change_pos (FpiByteWriter *writer, gint pos)
|
||||||
|
{
|
||||||
|
pos = fpi_byte_writer_get_pos (writer) + pos;
|
||||||
|
|
||||||
|
if (pos < 0)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
return fpi_byte_reader_set_pos (FPI_BYTE_READER (writer), pos);
|
||||||
|
}
|
||||||
|
|
||||||
static inline guint
|
static inline guint
|
||||||
fpi_byte_writer_get_size (const FpiByteWriter *writer)
|
fpi_byte_writer_get_size (const FpiByteWriter *writer)
|
||||||
{
|
{
|
||||||
@@ -407,4 +418,7 @@ fpi_byte_writer_fill_inline (FpiByteWriter * writer, guint8 value, guint size)
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
G_DEFINE_AUTOPTR_CLEANUP_FUNC (FpiByteWriter, fpi_byte_writer_free);
|
||||||
|
G_DEFINE_AUTO_CLEANUP_CLEAR_FUNC (FpiByteWriter, fpi_byte_writer_reset);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|||||||
+37
-30
@@ -1042,34 +1042,41 @@ fp_device_task_return_in_idle_cb (gpointer user_data)
|
|||||||
static void
|
static void
|
||||||
fpi_device_task_return_data_free (FpDeviceTaskReturnData *data)
|
fpi_device_task_return_data_free (FpDeviceTaskReturnData *data)
|
||||||
{
|
{
|
||||||
if (data->result)
|
switch (data->type)
|
||||||
{
|
{
|
||||||
switch (data->type)
|
case FP_DEVICE_TASK_RETURN_INT:
|
||||||
{
|
case FP_DEVICE_TASK_RETURN_BOOL:
|
||||||
case FP_DEVICE_TASK_RETURN_INT:
|
break;
|
||||||
case FP_DEVICE_TASK_RETURN_BOOL:
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FP_DEVICE_TASK_RETURN_OBJECT:
|
case FP_DEVICE_TASK_RETURN_OBJECT:
|
||||||
g_clear_object ((GObject **) &data->result);
|
g_clear_object ((GObject **) &data->result);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FP_DEVICE_TASK_RETURN_PTR_ARRAY:
|
case FP_DEVICE_TASK_RETURN_PTR_ARRAY:
|
||||||
g_clear_pointer ((GPtrArray **) &data->result, g_ptr_array_unref);
|
g_clear_pointer ((GPtrArray **) &data->result, g_ptr_array_unref);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FP_DEVICE_TASK_RETURN_ERROR:
|
case FP_DEVICE_TASK_RETURN_ERROR:
|
||||||
g_clear_error ((GError **) &data->result);
|
g_clear_error ((GError **) &data->result);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
g_assert_not_reached ();
|
g_assert_not_reached ();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
g_object_unref (data->device);
|
g_object_unref (data->device);
|
||||||
g_free (data);
|
g_free (data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fpi_device_return_task_in_idle:
|
||||||
|
* @device: The #FpDevice
|
||||||
|
* @return_type: The #FpDeviceTaskReturnType of @return_data
|
||||||
|
* @return_data: (nullable) (transfer full): The data to return.
|
||||||
|
*
|
||||||
|
* Completes a #FpDevice task in an idle source, stealing the ownership of
|
||||||
|
* the passed @returned_data.
|
||||||
|
*/
|
||||||
static void
|
static void
|
||||||
fpi_device_return_task_in_idle (FpDevice *device,
|
fpi_device_return_task_in_idle (FpDevice *device,
|
||||||
FpDeviceTaskReturnType return_type,
|
FpDeviceTaskReturnType return_type,
|
||||||
@@ -1101,7 +1108,7 @@ fpi_device_return_task_in_idle (FpDevice *device,
|
|||||||
* @device: The #FpDevice
|
* @device: The #FpDevice
|
||||||
* @device_id: Unique ID for the device or %NULL
|
* @device_id: Unique ID for the device or %NULL
|
||||||
* @device_name: Human readable name or %NULL for driver name
|
* @device_name: Human readable name or %NULL for driver name
|
||||||
* @error: The #GError or %NULL on success
|
* @error: (nullable) (transfer full): The #GError or %NULL on success
|
||||||
*
|
*
|
||||||
* Finish an ongoing probe operation. If error is %NULL success is assumed.
|
* Finish an ongoing probe operation. If error is %NULL success is assumed.
|
||||||
*/
|
*/
|
||||||
@@ -1147,7 +1154,7 @@ fpi_device_probe_complete (FpDevice *device,
|
|||||||
/**
|
/**
|
||||||
* fpi_device_open_complete:
|
* fpi_device_open_complete:
|
||||||
* @device: The #FpDevice
|
* @device: The #FpDevice
|
||||||
* @error: The #GError or %NULL on success
|
* @error: (nullable) (transfer full): The #GError or %NULL on success
|
||||||
*
|
*
|
||||||
* Finish an ongoing open operation. If error is %NULL success is assumed.
|
* Finish an ongoing open operation. If error is %NULL success is assumed.
|
||||||
*/
|
*/
|
||||||
@@ -1174,7 +1181,7 @@ fpi_device_open_complete (FpDevice *device, GError *error)
|
|||||||
/**
|
/**
|
||||||
* fpi_device_close_complete:
|
* fpi_device_close_complete:
|
||||||
* @device: The #FpDevice
|
* @device: The #FpDevice
|
||||||
* @error: The #GError or %NULL on success
|
* @error: (nullable) (transfer full): The #GError or %NULL on success
|
||||||
*
|
*
|
||||||
* Finish an ongoing close operation. If error is %NULL success is assumed.
|
* Finish an ongoing close operation. If error is %NULL success is assumed.
|
||||||
*/
|
*/
|
||||||
@@ -1226,7 +1233,7 @@ fpi_device_close_complete (FpDevice *device, GError *error)
|
|||||||
* fpi_device_enroll_complete:
|
* fpi_device_enroll_complete:
|
||||||
* @device: The #FpDevice
|
* @device: The #FpDevice
|
||||||
* @print: (nullable) (transfer full): The #FpPrint or %NULL on failure
|
* @print: (nullable) (transfer full): The #FpPrint or %NULL on failure
|
||||||
* @error: The #GError or %NULL on success
|
* @error: (nullable) (transfer full): The #GError or %NULL on success
|
||||||
*
|
*
|
||||||
* Finish an ongoing enroll operation. The #FpPrint can be stored by the
|
* Finish an ongoing enroll operation. The #FpPrint can be stored by the
|
||||||
* caller for later verification.
|
* caller for later verification.
|
||||||
@@ -1355,7 +1362,7 @@ fpi_device_verify_complete (FpDevice *device,
|
|||||||
/**
|
/**
|
||||||
* fpi_device_identify_complete:
|
* fpi_device_identify_complete:
|
||||||
* @device: The #FpDevice
|
* @device: The #FpDevice
|
||||||
* @error: The #GError or %NULL on success
|
* @error: (nullable) (transfer full): The #GError or %NULL on success
|
||||||
*
|
*
|
||||||
* Finish an ongoing identify operation.
|
* Finish an ongoing identify operation.
|
||||||
*
|
*
|
||||||
@@ -1421,7 +1428,7 @@ fpi_device_identify_complete (FpDevice *device,
|
|||||||
* fpi_device_capture_complete:
|
* fpi_device_capture_complete:
|
||||||
* @device: The #FpDevice
|
* @device: The #FpDevice
|
||||||
* @image: The #FpImage, or %NULL on error
|
* @image: The #FpImage, or %NULL on error
|
||||||
* @error: The #GError or %NULL on success
|
* @error: (nullable) (transfer full): The #GError or %NULL on success
|
||||||
*
|
*
|
||||||
* Finish an ongoing capture operation.
|
* Finish an ongoing capture operation.
|
||||||
*/
|
*/
|
||||||
@@ -1468,7 +1475,7 @@ fpi_device_capture_complete (FpDevice *device,
|
|||||||
/**
|
/**
|
||||||
* fpi_device_delete_complete:
|
* fpi_device_delete_complete:
|
||||||
* @device: The #FpDevice
|
* @device: The #FpDevice
|
||||||
* @error: The #GError or %NULL on success
|
* @error: (nullable) (transfer full): The #GError or %NULL on success
|
||||||
*
|
*
|
||||||
* Finish an ongoing delete operation.
|
* Finish an ongoing delete operation.
|
||||||
*/
|
*/
|
||||||
@@ -1497,7 +1504,7 @@ fpi_device_delete_complete (FpDevice *device,
|
|||||||
* fpi_device_list_complete:
|
* fpi_device_list_complete:
|
||||||
* @device: The #FpDevice
|
* @device: The #FpDevice
|
||||||
* @prints: (element-type FpPrint) (transfer container): Possibly empty array of prints or %NULL on error
|
* @prints: (element-type FpPrint) (transfer container): Possibly empty array of prints or %NULL on error
|
||||||
* @error: The #GError or %NULL on success
|
* @error: (nullable) (transfer full): The #GError or %NULL on success
|
||||||
*
|
*
|
||||||
* Finish an ongoing list operation.
|
* Finish an ongoing list operation.
|
||||||
*
|
*
|
||||||
@@ -1775,7 +1782,7 @@ fpi_device_suspend_completed (FpDevice *device)
|
|||||||
/**
|
/**
|
||||||
* fpi_device_suspend_complete:
|
* fpi_device_suspend_complete:
|
||||||
* @device: The #FpDevice
|
* @device: The #FpDevice
|
||||||
* @error: The #GError or %NULL on success
|
* @error: (nullable) (transfer full): The #GError or %NULL on success
|
||||||
*
|
*
|
||||||
* Finish a suspend request. Only return a %NULL error if suspend has been
|
* Finish a suspend request. Only return a %NULL error if suspend has been
|
||||||
* correctly configured and the current action as returned by
|
* correctly configured and the current action as returned by
|
||||||
@@ -1826,7 +1833,7 @@ fpi_device_suspend_complete (FpDevice *device,
|
|||||||
/**
|
/**
|
||||||
* fpi_device_resume_complete:
|
* fpi_device_resume_complete:
|
||||||
* @device: The #FpDevice
|
* @device: The #FpDevice
|
||||||
* @error: The #GError or %NULL on success
|
* @error: (nullable) (transfer full): The #GError or %NULL on success
|
||||||
*
|
*
|
||||||
* Finish a resume request.
|
* Finish a resume request.
|
||||||
*/
|
*/
|
||||||
@@ -1854,7 +1861,7 @@ fpi_device_resume_complete (FpDevice *device,
|
|||||||
/**
|
/**
|
||||||
* fpi_device_clear_storage_complete:
|
* fpi_device_clear_storage_complete:
|
||||||
* @device: The #FpDevice
|
* @device: The #FpDevice
|
||||||
* @error: The #GError or %NULL on success
|
* @error: (nullable) (transfer full): The #GError or %NULL on success
|
||||||
*
|
*
|
||||||
* Finish an ongoing clear_storage operation.
|
* Finish an ongoing clear_storage operation.
|
||||||
*/
|
*/
|
||||||
@@ -1885,7 +1892,7 @@ fpi_device_clear_storage_complete (FpDevice *device,
|
|||||||
* @device: The #FpDevice
|
* @device: The #FpDevice
|
||||||
* @completed_stages: The number of stages that are completed at this point
|
* @completed_stages: The number of stages that are completed at this point
|
||||||
* @print: (transfer floating): The #FpPrint for the newly completed stage or %NULL on failure
|
* @print: (transfer floating): The #FpPrint for the newly completed stage or %NULL on failure
|
||||||
* @error: (transfer full): The #GError or %NULL on success
|
* @error: (nullable) (transfer full): The #GError or %NULL on success
|
||||||
*
|
*
|
||||||
* Notify about the progress of the enroll operation. This is important for UI interaction.
|
* Notify about the progress of the enroll operation. This is important for UI interaction.
|
||||||
* The passed error may be used if a scan needs to be retried, use fpi_device_retry_new().
|
* The passed error may be used if a scan needs to be retried, use fpi_device_retry_new().
|
||||||
|
|||||||
+9
-32
@@ -23,7 +23,6 @@
|
|||||||
#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:
|
||||||
@@ -56,12 +55,6 @@ 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;
|
||||||
@@ -73,13 +66,7 @@ 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));
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -160,11 +147,16 @@ 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);
|
||||||
@@ -176,26 +168,11 @@ 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);
|
||||||
/* Class elements added after tod-v1 */
|
void (*resume) (FpDevice *device);
|
||||||
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);
|
||||||
|
|||||||
@@ -565,7 +565,7 @@ fpi_image_device_retry_scan (FpImageDevice *self, FpDeviceRetry retry)
|
|||||||
/**
|
/**
|
||||||
* fpi_image_device_session_error:
|
* fpi_image_device_session_error:
|
||||||
* @self: a #FpImageDevice imaging fingerprint device
|
* @self: a #FpImageDevice imaging fingerprint device
|
||||||
* @error: The #GError to report
|
* @error: (nullable) (transfer full): The #GError to report.
|
||||||
*
|
*
|
||||||
* Report an error while interacting with the device. This effectively
|
* Report an error while interacting with the device. This effectively
|
||||||
* aborts the current ongoing action. Note that doing so will result in
|
* aborts the current ongoing action. Note that doing so will result in
|
||||||
@@ -624,7 +624,7 @@ fpi_image_device_session_error (FpImageDevice *self, GError *error)
|
|||||||
/**
|
/**
|
||||||
* fpi_image_device_activate_complete:
|
* fpi_image_device_activate_complete:
|
||||||
* @self: a #FpImageDevice imaging fingerprint device
|
* @self: a #FpImageDevice imaging fingerprint device
|
||||||
* @error: A #GError or %NULL on success
|
* @error: (nullable) (transfer full): The #GError or %NULL on success
|
||||||
*
|
*
|
||||||
* Reports completion of device activation.
|
* Reports completion of device activation.
|
||||||
*/
|
*/
|
||||||
@@ -663,7 +663,7 @@ fpi_image_device_activate_complete (FpImageDevice *self, GError *error)
|
|||||||
/**
|
/**
|
||||||
* fpi_image_device_deactivate_complete:
|
* fpi_image_device_deactivate_complete:
|
||||||
* @self: a #FpImageDevice imaging fingerprint device
|
* @self: a #FpImageDevice imaging fingerprint device
|
||||||
* @error: A #GError or %NULL on success
|
* @error: (nullable) (transfer full): The #GError or %NULL on success
|
||||||
*
|
*
|
||||||
* Reports completion of device deactivation.
|
* Reports completion of device deactivation.
|
||||||
*/
|
*/
|
||||||
@@ -690,7 +690,7 @@ fpi_image_device_deactivate_complete (FpImageDevice *self, GError *error)
|
|||||||
/**
|
/**
|
||||||
* fpi_image_device_open_complete:
|
* fpi_image_device_open_complete:
|
||||||
* @self: a #FpImageDevice imaging fingerprint device
|
* @self: a #FpImageDevice imaging fingerprint device
|
||||||
* @error: A #GError or %NULL on success
|
* @error: (nullable) (transfer full): The #GError or %NULL on success
|
||||||
*
|
*
|
||||||
* Reports completion of open operation.
|
* Reports completion of open operation.
|
||||||
*/
|
*/
|
||||||
@@ -718,7 +718,7 @@ fpi_image_device_open_complete (FpImageDevice *self, GError *error)
|
|||||||
/**
|
/**
|
||||||
* fpi_image_device_close_complete:
|
* fpi_image_device_close_complete:
|
||||||
* @self: a #FpImageDevice imaging fingerprint device
|
* @self: a #FpImageDevice imaging fingerprint device
|
||||||
* @error: A #GError or %NULL on success
|
* @error: (nullable) (transfer full): The #GError or %NULL on success
|
||||||
*
|
*
|
||||||
* Reports completion of close operation.
|
* Reports completion of close operation.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -62,12 +62,12 @@
|
|||||||
*/
|
*/
|
||||||
typedef enum {
|
typedef enum {
|
||||||
FPI_IMAGE_DEVICE_STATE_INACTIVE,
|
FPI_IMAGE_DEVICE_STATE_INACTIVE,
|
||||||
FPI_IMAGE_DEVICE_STATE_AWAIT_FINGER_ON,
|
|
||||||
FPI_IMAGE_DEVICE_STATE_CAPTURE,
|
|
||||||
FPI_IMAGE_DEVICE_STATE_AWAIT_FINGER_OFF,
|
|
||||||
FPI_IMAGE_DEVICE_STATE_ACTIVATING,
|
FPI_IMAGE_DEVICE_STATE_ACTIVATING,
|
||||||
FPI_IMAGE_DEVICE_STATE_DEACTIVATING,
|
FPI_IMAGE_DEVICE_STATE_DEACTIVATING,
|
||||||
FPI_IMAGE_DEVICE_STATE_IDLE,
|
FPI_IMAGE_DEVICE_STATE_IDLE,
|
||||||
|
FPI_IMAGE_DEVICE_STATE_AWAIT_FINGER_ON,
|
||||||
|
FPI_IMAGE_DEVICE_STATE_CAPTURE,
|
||||||
|
FPI_IMAGE_DEVICE_STATE_AWAIT_FINGER_OFF,
|
||||||
} FpiImageDeviceState;
|
} FpiImageDeviceState;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -114,10 +114,6 @@ 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,11 +21,9 @@
|
|||||||
#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
|
||||||
@@ -70,12 +68,8 @@ 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,9 +73,6 @@ 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,7 +765,3 @@ 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,9 +102,6 @@ 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;
|
||||||
|
|||||||
@@ -57,7 +57,6 @@ static const FpIdEntry allowlist_id_table[] = {
|
|||||||
{ .vid = 0x06cb, .pid = 0x00b7 },
|
{ .vid = 0x06cb, .pid = 0x00b7 },
|
||||||
{ .vid = 0x06cb, .pid = 0x00bb },
|
{ .vid = 0x06cb, .pid = 0x00bb },
|
||||||
{ .vid = 0x06cb, .pid = 0x00be },
|
{ .vid = 0x06cb, .pid = 0x00be },
|
||||||
{ .vid = 0x06cb, .pid = 0x00c4 },
|
|
||||||
{ .vid = 0x06cb, .pid = 0x00cb },
|
{ .vid = 0x06cb, .pid = 0x00cb },
|
||||||
{ .vid = 0x06cb, .pid = 0x00c9 },
|
{ .vid = 0x06cb, .pid = 0x00c9 },
|
||||||
{ .vid = 0x06cb, .pid = 0x00d8 },
|
{ .vid = 0x06cb, .pid = 0x00d8 },
|
||||||
@@ -76,6 +75,12 @@ static const FpIdEntry allowlist_id_table[] = {
|
|||||||
{ .vid = 0x0a5c, .pid = 0x5843 },
|
{ .vid = 0x0a5c, .pid = 0x5843 },
|
||||||
{ .vid = 0x0a5c, .pid = 0x5844 },
|
{ .vid = 0x0a5c, .pid = 0x5844 },
|
||||||
{ .vid = 0x0a5c, .pid = 0x5845 },
|
{ .vid = 0x0a5c, .pid = 0x5845 },
|
||||||
|
{ .vid = 0x0a5c, .pid = 0x5860 },
|
||||||
|
{ .vid = 0x0a5c, .pid = 0x5863 },
|
||||||
|
{ .vid = 0x0a5c, .pid = 0x5864 },
|
||||||
|
{ .vid = 0x0a5c, .pid = 0x5865 },
|
||||||
|
{ .vid = 0x0a5c, .pid = 0x5866 },
|
||||||
|
{ .vid = 0x0a5c, .pid = 0x5867 },
|
||||||
{ .vid = 0x0bda, .pid = 0x5812 },
|
{ .vid = 0x0bda, .pid = 0x5812 },
|
||||||
{ .vid = 0x10a5, .pid = 0x0007 },
|
{ .vid = 0x10a5, .pid = 0x0007 },
|
||||||
{ .vid = 0x10a5, .pid = 0x9200 },
|
{ .vid = 0x10a5, .pid = 0x9200 },
|
||||||
|
|||||||
+10
-6
@@ -1,3 +1,11 @@
|
|||||||
|
spi_sources = []
|
||||||
|
spi_headers = []
|
||||||
|
|
||||||
|
if enabled_spi_drivers.length() > 0
|
||||||
|
spi_headers = ['fpi-spi-transfer.h']
|
||||||
|
spi_sources = ['fpi-spi-transfer.c']
|
||||||
|
endif
|
||||||
|
|
||||||
libfprint_sources = [
|
libfprint_sources = [
|
||||||
'fp-context.c',
|
'fp-context.c',
|
||||||
'fp-device.c',
|
'fp-device.c',
|
||||||
@@ -16,7 +24,7 @@ libfprint_private_sources = [
|
|||||||
'fpi-print.c',
|
'fpi-print.c',
|
||||||
'fpi-ssm.c',
|
'fpi-ssm.c',
|
||||||
'fpi-usb-transfer.c',
|
'fpi-usb-transfer.c',
|
||||||
'fpi-spi-transfer.c',
|
spi_sources,
|
||||||
]
|
]
|
||||||
|
|
||||||
libfprint_public_headers = [
|
libfprint_public_headers = [
|
||||||
@@ -41,7 +49,7 @@ libfprint_private_headers = [
|
|||||||
'fpi-minutiae.h',
|
'fpi-minutiae.h',
|
||||||
'fpi-print.h',
|
'fpi-print.h',
|
||||||
'fpi-usb-transfer.h',
|
'fpi-usb-transfer.h',
|
||||||
'fpi-spi-transfer.h',
|
spi_headers,
|
||||||
'fpi-ssm.h',
|
'fpi-ssm.h',
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -261,10 +269,6 @@ 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,
|
||||||
|
|||||||
@@ -1,251 +0,0 @@
|
|||||||
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;
|
|
||||||
@@ -1,111 +0,0 @@
|
|||||||
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
|
|
||||||
@@ -1,65 +0,0 @@
|
|||||||
#!/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
|
|
||||||
@@ -1,67 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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);
|
|
||||||
}
|
|
||||||
@@ -1,56 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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;
|
|
||||||
}
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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);
|
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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))
|
|
||||||
@@ -1,161 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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);
|
|
||||||
}
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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);
|
|
||||||
@@ -1,56 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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)
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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);
|
|
||||||
}
|
|
||||||
@@ -1,39 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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);
|
|
||||||
+23
-5
@@ -1,5 +1,5 @@
|
|||||||
project('libfprint', [ 'c', 'cpp' ],
|
project('libfprint', [ 'c', 'cpp' ],
|
||||||
version: '1.94.7+tod1',
|
version: '1.94.8',
|
||||||
license: 'LGPLv2.1+',
|
license: 'LGPLv2.1+',
|
||||||
default_options: [
|
default_options: [
|
||||||
'buildtype=debugoptimized',
|
'buildtype=debugoptimized',
|
||||||
@@ -97,6 +97,9 @@ cairo_dep = dependency('cairo', required: false)
|
|||||||
# introspection scanning and Gio-2.0.gir
|
# introspection scanning and Gio-2.0.gir
|
||||||
gobject_introspection = dependency('gobject-introspection-1.0', required: get_option('introspection'))
|
gobject_introspection = dependency('gobject-introspection-1.0', required: get_option('introspection'))
|
||||||
|
|
||||||
|
# SPI
|
||||||
|
have_spi = host_machine.system() == 'linux'
|
||||||
|
|
||||||
# Drivers
|
# Drivers
|
||||||
drivers = get_option('drivers').split(',')
|
drivers = get_option('drivers').split(',')
|
||||||
virtual_drivers = [
|
virtual_drivers = [
|
||||||
@@ -135,11 +138,16 @@ default_drivers = [
|
|||||||
'fpcmoc',
|
'fpcmoc',
|
||||||
'realtek',
|
'realtek',
|
||||||
'focaltech_moc',
|
'focaltech_moc',
|
||||||
|
|
||||||
# SPI
|
|
||||||
'elanspi',
|
|
||||||
]
|
]
|
||||||
|
|
||||||
|
spi_drivers = [
|
||||||
|
'elanspi'
|
||||||
|
]
|
||||||
|
|
||||||
|
if have_spi
|
||||||
|
default_drivers += spi_drivers
|
||||||
|
endif
|
||||||
|
|
||||||
# FIXME: All the drivers should be fixed by adjusting the byte order.
|
# FIXME: All the drivers should be fixed by adjusting the byte order.
|
||||||
# See https://gitlab.freedesktop.org/libfprint/libfprint/-/issues/236
|
# See https://gitlab.freedesktop.org/libfprint/libfprint/-/issues/236
|
||||||
endian_independent_drivers = virtual_drivers + [
|
endian_independent_drivers = virtual_drivers + [
|
||||||
@@ -176,6 +184,17 @@ if drivers == [ 'default' ]
|
|||||||
drivers = default_drivers
|
drivers = default_drivers
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
enabled_spi_drivers = []
|
||||||
|
foreach driver : spi_drivers
|
||||||
|
if driver in drivers
|
||||||
|
enabled_spi_drivers += driver
|
||||||
|
endif
|
||||||
|
endforeach
|
||||||
|
|
||||||
|
if enabled_spi_drivers.length() > 0 and not have_spi
|
||||||
|
error('SPI drivers @0@ are not supported'.format(enabled_spi_drivers))
|
||||||
|
endif
|
||||||
|
|
||||||
driver_helper_mapping = {
|
driver_helper_mapping = {
|
||||||
'aes1610' : [ 'aeslib' ],
|
'aes1610' : [ 'aeslib' ],
|
||||||
'aes1660' : [ 'aeslib', 'aesx660' ],
|
'aes1660' : [ 'aeslib', 'aesx660' ],
|
||||||
@@ -323,7 +342,6 @@ 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,13 +30,7 @@ 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)
|
|
||||||
|
|||||||
Binary file not shown.
Executable
+156
@@ -0,0 +1,156 @@
|
|||||||
|
#!/usr/bin/python3
|
||||||
|
|
||||||
|
import traceback
|
||||||
|
import sys
|
||||||
|
import time
|
||||||
|
import gi
|
||||||
|
|
||||||
|
gi.require_version('FPrint', '2.0')
|
||||||
|
from gi.repository import FPrint, GLib
|
||||||
|
|
||||||
|
# Exit with error on any exception, included those happening in async callbacks
|
||||||
|
sys.excepthook = lambda *args: (traceback.print_exception(*args), sys.exit(1))
|
||||||
|
|
||||||
|
ctx = GLib.main_context_default()
|
||||||
|
|
||||||
|
c = FPrint.Context()
|
||||||
|
c.enumerate()
|
||||||
|
devices = c.get_devices()
|
||||||
|
|
||||||
|
d = devices[0]
|
||||||
|
del devices
|
||||||
|
|
||||||
|
d.open_sync()
|
||||||
|
|
||||||
|
assert d.get_driver() == "egismoc"
|
||||||
|
assert not d.has_feature(FPrint.DeviceFeature.CAPTURE)
|
||||||
|
assert d.has_feature(FPrint.DeviceFeature.IDENTIFY)
|
||||||
|
assert d.has_feature(FPrint.DeviceFeature.VERIFY)
|
||||||
|
assert d.has_feature(FPrint.DeviceFeature.DUPLICATES_CHECK)
|
||||||
|
assert d.has_feature(FPrint.DeviceFeature.STORAGE)
|
||||||
|
assert d.has_feature(FPrint.DeviceFeature.STORAGE_LIST)
|
||||||
|
assert d.has_feature(FPrint.DeviceFeature.STORAGE_DELETE)
|
||||||
|
assert d.has_feature(FPrint.DeviceFeature.STORAGE_CLEAR)
|
||||||
|
|
||||||
|
def enroll_progress(*args):
|
||||||
|
print("finger status: ", d.get_finger_status())
|
||||||
|
print('enroll progress: ' + str(args))
|
||||||
|
|
||||||
|
def identify_done(dev, res):
|
||||||
|
global identified
|
||||||
|
identified = True
|
||||||
|
identify_match, identify_print = dev.identify_finish(res)
|
||||||
|
print('indentification_done: ', identify_match, identify_print)
|
||||||
|
assert identify_match.equal(identify_print)
|
||||||
|
|
||||||
|
# Beginning with list and clear assumes you begin with >0 prints enrolled before capturing
|
||||||
|
|
||||||
|
print("listing - device should have prints")
|
||||||
|
stored = d.list_prints_sync()
|
||||||
|
assert len(stored) > 0
|
||||||
|
del stored
|
||||||
|
|
||||||
|
print("clear device storage")
|
||||||
|
d.clear_storage_sync()
|
||||||
|
print("clear done")
|
||||||
|
|
||||||
|
print("listing - device should be empty")
|
||||||
|
stored = d.list_prints_sync()
|
||||||
|
assert len(stored) == 0
|
||||||
|
del stored
|
||||||
|
|
||||||
|
print("enrolling")
|
||||||
|
template = FPrint.Print.new(d)
|
||||||
|
template.set_finger(FPrint.Finger.LEFT_INDEX)
|
||||||
|
assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
|
||||||
|
p1 = d.enroll_sync(template, None, enroll_progress, None)
|
||||||
|
assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
|
||||||
|
print("enroll done")
|
||||||
|
del template
|
||||||
|
|
||||||
|
print("listing - device should have 1 print")
|
||||||
|
stored = d.list_prints_sync()
|
||||||
|
assert len(stored) == 1
|
||||||
|
assert stored[0].equal(p1)
|
||||||
|
|
||||||
|
print("verifying")
|
||||||
|
assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
|
||||||
|
verify_res, verify_print = d.verify_sync(p1)
|
||||||
|
assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
|
||||||
|
print("verify done")
|
||||||
|
assert verify_res == True
|
||||||
|
|
||||||
|
identified = False
|
||||||
|
deserialized_prints = []
|
||||||
|
for p in stored:
|
||||||
|
deserialized_prints.append(FPrint.Print.deserialize(p.serialize()))
|
||||||
|
assert deserialized_prints[-1].equal(p)
|
||||||
|
del stored
|
||||||
|
|
||||||
|
print('async identifying')
|
||||||
|
d.identify(deserialized_prints, callback=identify_done)
|
||||||
|
del deserialized_prints
|
||||||
|
|
||||||
|
while not identified:
|
||||||
|
ctx.iteration(True)
|
||||||
|
|
||||||
|
print("try to enroll duplicate")
|
||||||
|
template = FPrint.Print.new(d)
|
||||||
|
template.set_finger(FPrint.Finger.RIGHT_INDEX)
|
||||||
|
assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
|
||||||
|
try:
|
||||||
|
d.enroll_sync(template, None, enroll_progress, None)
|
||||||
|
except GLib.Error as error:
|
||||||
|
assert error.matches(FPrint.DeviceError.quark(),
|
||||||
|
FPrint.DeviceError.DATA_DUPLICATE)
|
||||||
|
except Exception as exc:
|
||||||
|
raise
|
||||||
|
assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
|
||||||
|
print("duplicate enroll attempt done")
|
||||||
|
|
||||||
|
print("listing - device should still only have 1 print")
|
||||||
|
stored = d.list_prints_sync()
|
||||||
|
assert len(stored) == 1
|
||||||
|
assert stored[0].equal(p1)
|
||||||
|
del stored
|
||||||
|
|
||||||
|
print("enroll new finger")
|
||||||
|
template = FPrint.Print.new(d)
|
||||||
|
template.set_finger(FPrint.Finger.RIGHT_INDEX)
|
||||||
|
assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
|
||||||
|
p2 = d.enroll_sync(template, None, enroll_progress, None)
|
||||||
|
assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
|
||||||
|
print("enroll new finger done")
|
||||||
|
del template
|
||||||
|
|
||||||
|
print("listing - device should have 2 prints")
|
||||||
|
stored = d.list_prints_sync()
|
||||||
|
assert len(stored) == 2
|
||||||
|
assert (stored[0].equal(p1) and stored[1].equal(p2)) or (stored[0].equal(p2) and stored[1].equal(p1))
|
||||||
|
del stored
|
||||||
|
|
||||||
|
print("deleting first print")
|
||||||
|
d.delete_print_sync(p1)
|
||||||
|
print("delete done")
|
||||||
|
del p1
|
||||||
|
|
||||||
|
print("listing - device should only have second print")
|
||||||
|
stored = d.list_prints_sync()
|
||||||
|
assert len(stored) == 1
|
||||||
|
assert stored[0].equal(p2)
|
||||||
|
del stored
|
||||||
|
del p2
|
||||||
|
|
||||||
|
print("clear device storage")
|
||||||
|
d.clear_storage_sync()
|
||||||
|
print("clear done")
|
||||||
|
|
||||||
|
print("listing - device should be empty")
|
||||||
|
stored = d.list_prints_sync()
|
||||||
|
assert len(stored) == 0
|
||||||
|
del stored
|
||||||
|
|
||||||
|
d.close_sync()
|
||||||
|
|
||||||
|
del d
|
||||||
|
del c
|
||||||
@@ -0,0 +1,255 @@
|
|||||||
|
P: /devices/pci0000:00/0000:00:14.0/usb1/1-7
|
||||||
|
N: bus/usb/001/021=12010002FF0000407A1C860556620102030109022700010100A0320904000003FF000000070581020002000705020200020007058303400005
|
||||||
|
E: BUSNUM=001
|
||||||
|
E: DEVNAME=/dev/bus/usb/001/021
|
||||||
|
E: DEVNUM=021
|
||||||
|
E: DEVTYPE=usb_device
|
||||||
|
E: DRIVER=usb
|
||||||
|
E: ID_AUTOSUSPEND=1
|
||||||
|
E: ID_BUS=usb
|
||||||
|
E: ID_MODEL=ETU905A88-E
|
||||||
|
E: ID_MODEL_ENC=ETU905A88-E
|
||||||
|
E: ID_MODEL_ID=0586
|
||||||
|
E: ID_PATH=pci-0000:00:14.0-usb-0:7
|
||||||
|
E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_7
|
||||||
|
E: ID_PATH_WITH_USB_REVISION=pci-0000:00:14.0-usbv2-0:7
|
||||||
|
E: ID_PERSIST=0
|
||||||
|
E: ID_REVISION=6256
|
||||||
|
E: ID_SERIAL=EGIS_ETU905A88-E_0A5743PCU834
|
||||||
|
E: ID_SERIAL_SHORT=0A5743PCU834
|
||||||
|
E: ID_USB_INTERFACES=:ff0000:
|
||||||
|
E: ID_USB_MODEL=ETU905A88-E
|
||||||
|
E: ID_USB_MODEL_ENC=ETU905A88-E
|
||||||
|
E: ID_USB_MODEL_ID=0586
|
||||||
|
E: ID_USB_REVISION=6256
|
||||||
|
E: ID_USB_SERIAL=EGIS_ETU905A88-E_0A5743PCU834
|
||||||
|
E: ID_USB_SERIAL_SHORT=0A5743PCU834
|
||||||
|
E: ID_USB_VENDOR=EGIS
|
||||||
|
E: ID_USB_VENDOR_ENC=EGIS
|
||||||
|
E: ID_USB_VENDOR_ID=1c7a
|
||||||
|
E: ID_VENDOR=EGIS
|
||||||
|
E: ID_VENDOR_ENC=EGIS
|
||||||
|
E: ID_VENDOR_FROM_DATABASE=LighTuning Technology Inc.
|
||||||
|
E: ID_VENDOR_ID=1c7a
|
||||||
|
E: MAJOR=189
|
||||||
|
E: MINOR=20
|
||||||
|
E: PRODUCT=1c7a/586/6256
|
||||||
|
E: SUBSYSTEM=usb
|
||||||
|
E: TYPE=255/0/0
|
||||||
|
A: authorized=1\n
|
||||||
|
A: avoid_reset_quirk=0\n
|
||||||
|
A: bConfigurationValue=1\n
|
||||||
|
A: bDeviceClass=ff\n
|
||||||
|
A: bDeviceProtocol=00\n
|
||||||
|
A: bDeviceSubClass=00\n
|
||||||
|
A: bMaxPacketSize0=64\n
|
||||||
|
A: bMaxPower=100mA\n
|
||||||
|
A: bNumConfigurations=1\n
|
||||||
|
A: bNumInterfaces= 1\n
|
||||||
|
A: bcdDevice=6256\n
|
||||||
|
A: bmAttributes=a0\n
|
||||||
|
A: busnum=1\n
|
||||||
|
A: configuration=
|
||||||
|
H: descriptors=12010002FF0000407A1C860556620102030109022700010100A0320904000003FF000000070581020002000705020200020007058303400005
|
||||||
|
A: dev=189:20\n
|
||||||
|
A: devnum=21\n
|
||||||
|
A: devpath=7\n
|
||||||
|
L: driver=../../../../../bus/usb/drivers/usb
|
||||||
|
L: firmware_node=../../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:4e/device:4f/device:56
|
||||||
|
A: idProduct=0586\n
|
||||||
|
A: idVendor=1c7a\n
|
||||||
|
A: ltm_capable=no\n
|
||||||
|
A: manufacturer=EGIS\n
|
||||||
|
A: maxchild=0\n
|
||||||
|
A: physical_location/dock=no\n
|
||||||
|
A: physical_location/horizontal_position=center\n
|
||||||
|
A: physical_location/lid=no\n
|
||||||
|
A: physical_location/panel=front\n
|
||||||
|
A: physical_location/vertical_position=center\n
|
||||||
|
L: port=../1-0:1.0/usb1-port7
|
||||||
|
A: power/active_duration=12644\n
|
||||||
|
A: power/autosuspend=2\n
|
||||||
|
A: power/autosuspend_delay_ms=2000\n
|
||||||
|
A: power/connected_duration=230907\n
|
||||||
|
A: power/control=auto\n
|
||||||
|
A: power/level=auto\n
|
||||||
|
A: power/persist=0\n
|
||||||
|
A: power/runtime_active_time=12929\n
|
||||||
|
A: power/runtime_status=active\n
|
||||||
|
A: power/runtime_suspended_time=217715\n
|
||||||
|
A: power/wakeup=disabled\n
|
||||||
|
A: power/wakeup_abort_count=\n
|
||||||
|
A: power/wakeup_active=\n
|
||||||
|
A: power/wakeup_active_count=\n
|
||||||
|
A: power/wakeup_count=\n
|
||||||
|
A: power/wakeup_expire_count=\n
|
||||||
|
A: power/wakeup_last_time_ms=\n
|
||||||
|
A: power/wakeup_max_time_ms=\n
|
||||||
|
A: power/wakeup_total_time_ms=\n
|
||||||
|
A: product=ETU905A88-E\n
|
||||||
|
A: quirks=0x0\n
|
||||||
|
A: removable=fixed\n
|
||||||
|
A: rx_lanes=1\n
|
||||||
|
A: serial=0A5743PCU834\n
|
||||||
|
A: speed=480\n
|
||||||
|
A: tx_lanes=1\n
|
||||||
|
A: urbnum=18\n
|
||||||
|
A: version= 2.00\n
|
||||||
|
|
||||||
|
P: /devices/pci0000:00/0000:00:14.0/usb1
|
||||||
|
N: bus/usb/001/001=12010002090001406B1D020008060302010109021900010100E0000904000001090000000705810304000C
|
||||||
|
E: BUSNUM=001
|
||||||
|
E: CURRENT_TAGS=:seat:
|
||||||
|
E: DEVNAME=/dev/bus/usb/001/001
|
||||||
|
E: DEVNUM=001
|
||||||
|
E: DEVTYPE=usb_device
|
||||||
|
E: DRIVER=usb
|
||||||
|
E: ID_AUTOSUSPEND=1
|
||||||
|
E: ID_BUS=usb
|
||||||
|
E: ID_FOR_SEAT=usb-pci-0000_00_14_0
|
||||||
|
E: ID_MODEL=xHCI_Host_Controller
|
||||||
|
E: ID_MODEL_ENC=xHCI\x20Host\x20Controller
|
||||||
|
E: ID_MODEL_FROM_DATABASE=2.0 root hub
|
||||||
|
E: ID_MODEL_ID=0002
|
||||||
|
E: ID_PATH=pci-0000:00:14.0
|
||||||
|
E: ID_PATH_TAG=pci-0000_00_14_0
|
||||||
|
E: ID_REVISION=0608
|
||||||
|
E: ID_SERIAL=Linux_6.8.5-arch1-1_xhci-hcd_xHCI_Host_Controller_0000:00:14.0
|
||||||
|
E: ID_SERIAL_SHORT=0000:00:14.0
|
||||||
|
E: ID_USB_INTERFACES=:090000:
|
||||||
|
E: ID_USB_MODEL=xHCI_Host_Controller
|
||||||
|
E: ID_USB_MODEL_ENC=xHCI\x20Host\x20Controller
|
||||||
|
E: ID_USB_MODEL_ID=0002
|
||||||
|
E: ID_USB_REVISION=0608
|
||||||
|
E: ID_USB_SERIAL=Linux_6.8.5-arch1-1_xhci-hcd_xHCI_Host_Controller_0000:00:14.0
|
||||||
|
E: ID_USB_SERIAL_SHORT=0000:00:14.0
|
||||||
|
E: ID_USB_VENDOR=Linux_6.8.5-arch1-1_xhci-hcd
|
||||||
|
E: ID_USB_VENDOR_ENC=Linux\x206.8.5-arch1-1\x20xhci-hcd
|
||||||
|
E: ID_USB_VENDOR_ID=1d6b
|
||||||
|
E: ID_VENDOR=Linux_6.8.5-arch1-1_xhci-hcd
|
||||||
|
E: ID_VENDOR_ENC=Linux\x206.8.5-arch1-1\x20xhci-hcd
|
||||||
|
E: ID_VENDOR_FROM_DATABASE=Linux Foundation
|
||||||
|
E: ID_VENDOR_ID=1d6b
|
||||||
|
E: MAJOR=189
|
||||||
|
E: MINOR=0
|
||||||
|
E: PRODUCT=1d6b/2/608
|
||||||
|
E: SUBSYSTEM=usb
|
||||||
|
E: TAGS=:seat:
|
||||||
|
E: TYPE=9/0/1
|
||||||
|
A: authorized=1\n
|
||||||
|
A: authorized_default=1\n
|
||||||
|
A: avoid_reset_quirk=0\n
|
||||||
|
A: bConfigurationValue=1\n
|
||||||
|
A: bDeviceClass=09\n
|
||||||
|
A: bDeviceProtocol=01\n
|
||||||
|
A: bDeviceSubClass=00\n
|
||||||
|
A: bMaxPacketSize0=64\n
|
||||||
|
A: bMaxPower=0mA\n
|
||||||
|
A: bNumConfigurations=1\n
|
||||||
|
A: bNumInterfaces= 1\n
|
||||||
|
A: bcdDevice=0608\n
|
||||||
|
A: bmAttributes=e0\n
|
||||||
|
A: busnum=1\n
|
||||||
|
A: configuration=
|
||||||
|
H: descriptors=12010002090001406B1D020008060302010109021900010100E0000904000001090000000705810304000C
|
||||||
|
A: dev=189:0\n
|
||||||
|
A: devnum=1\n
|
||||||
|
A: devpath=0\n
|
||||||
|
L: driver=../../../../bus/usb/drivers/usb
|
||||||
|
L: firmware_node=../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:4e/device:4f
|
||||||
|
A: idProduct=0002\n
|
||||||
|
A: idVendor=1d6b\n
|
||||||
|
A: interface_authorized_default=1\n
|
||||||
|
A: ltm_capable=no\n
|
||||||
|
A: manufacturer=Linux 6.8.5-arch1-1 xhci-hcd\n
|
||||||
|
A: maxchild=12\n
|
||||||
|
A: power/active_duration=73066477\n
|
||||||
|
A: power/autosuspend=0\n
|
||||||
|
A: power/autosuspend_delay_ms=0\n
|
||||||
|
A: power/connected_duration=73071614\n
|
||||||
|
A: power/control=auto\n
|
||||||
|
A: power/level=auto\n
|
||||||
|
A: power/runtime_active_time=73070027\n
|
||||||
|
A: power/runtime_status=active\n
|
||||||
|
A: power/runtime_suspended_time=0\n
|
||||||
|
A: power/wakeup=disabled\n
|
||||||
|
A: power/wakeup_abort_count=\n
|
||||||
|
A: power/wakeup_active=\n
|
||||||
|
A: power/wakeup_active_count=\n
|
||||||
|
A: power/wakeup_count=\n
|
||||||
|
A: power/wakeup_expire_count=\n
|
||||||
|
A: power/wakeup_last_time_ms=\n
|
||||||
|
A: power/wakeup_max_time_ms=\n
|
||||||
|
A: power/wakeup_total_time_ms=\n
|
||||||
|
A: product=xHCI Host Controller\n
|
||||||
|
A: quirks=0x0\n
|
||||||
|
A: removable=unknown\n
|
||||||
|
A: rx_lanes=1\n
|
||||||
|
A: serial=0000:00:14.0\n
|
||||||
|
A: speed=480\n
|
||||||
|
A: tx_lanes=1\n
|
||||||
|
A: urbnum=1111\n
|
||||||
|
A: version= 2.00\n
|
||||||
|
|
||||||
|
P: /devices/pci0000:00/0000:00:14.0
|
||||||
|
E: DRIVER=xhci_hcd
|
||||||
|
E: ID_AUTOSUSPEND=1
|
||||||
|
E: ID_MODEL_FROM_DATABASE=Alder Lake PCH USB 3.2 xHCI Host Controller
|
||||||
|
E: ID_PATH=pci-0000:00:14.0
|
||||||
|
E: ID_PATH_TAG=pci-0000_00_14_0
|
||||||
|
E: ID_PCI_CLASS_FROM_DATABASE=Serial bus controller
|
||||||
|
E: ID_PCI_INTERFACE_FROM_DATABASE=XHCI
|
||||||
|
E: ID_PCI_SUBCLASS_FROM_DATABASE=USB controller
|
||||||
|
E: ID_VENDOR_FROM_DATABASE=Intel Corporation
|
||||||
|
E: MODALIAS=pci:v00008086d000051EDsv00001043sd0000201Fbc0Csc03i30
|
||||||
|
E: PCI_CLASS=C0330
|
||||||
|
E: PCI_ID=8086:51ED
|
||||||
|
E: PCI_SLOT_NAME=0000:00:14.0
|
||||||
|
E: PCI_SUBSYS_ID=1043:201F
|
||||||
|
E: SUBSYSTEM=pci
|
||||||
|
A: ari_enabled=0\n
|
||||||
|
A: broken_parity_status=0\n
|
||||||
|
A: class=0x0c0330\n
|
||||||
|
H: config=8680ED51060490020130030C000080000400220560000000000000000000000000000000000000000000000043101F20000000007000000000000000FF010000FD0134A089C27F8000000000000000003F6DD80F000000000000000000000000316000000000000000000000000000000180C2C10800000000000000000000000590B7001805E0FE000000000000000009B014F01000400100000000C10A080000080E00001800008F50020000010000090000018680C00009001014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B50F110112000000
|
||||||
|
A: consistent_dma_mask_bits=64\n
|
||||||
|
A: d3cold_allowed=1\n
|
||||||
|
A: device=0x51ed\n
|
||||||
|
A: dma_mask_bits=64\n
|
||||||
|
L: driver=../../../bus/pci/drivers/xhci_hcd
|
||||||
|
A: driver_override=(null)\n
|
||||||
|
A: enable=1\n
|
||||||
|
L: firmware_node=../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:4e
|
||||||
|
A: irq=143\n
|
||||||
|
A: local_cpulist=0-15\n
|
||||||
|
A: local_cpus=ffff\n
|
||||||
|
A: modalias=pci:v00008086d000051EDsv00001043sd0000201Fbc0Csc03i30\n
|
||||||
|
A: msi_bus=1\n
|
||||||
|
A: msi_irqs/143=msi\n
|
||||||
|
A: msi_irqs/144=msi\n
|
||||||
|
A: msi_irqs/145=msi\n
|
||||||
|
A: msi_irqs/146=msi\n
|
||||||
|
A: msi_irqs/147=msi\n
|
||||||
|
A: msi_irqs/148=msi\n
|
||||||
|
A: msi_irqs/149=msi\n
|
||||||
|
A: msi_irqs/150=msi\n
|
||||||
|
A: numa_node=-1\n
|
||||||
|
A: pools=poolinfo - 0.1\nbuffer-2048 0 0 2048 0\nbuffer-512 0 0 512 0\nbuffer-128 0 0 128 0\nbuffer-32 0 0 32 0\nxHCI 1KB stream ctx arrays 0 0 1024 0\nxHCI 256 byte stream ctx arrays 0 0 256 0\nxHCI input/output contexts 8 9 2112 9\nxHCI ring segments 43 53 4096 53\nbuffer-2048 0 16 2048 8\nbuffer-512 0 0 512 0\nbuffer-128 0 0 128 0\nbuffer-32 0 128 32 1\n
|
||||||
|
A: power/control=auto\n
|
||||||
|
A: power/runtime_active_time=73070690\n
|
||||||
|
A: power/runtime_status=active\n
|
||||||
|
A: power/runtime_suspended_time=0\n
|
||||||
|
A: power/wakeup=enabled\n
|
||||||
|
A: power/wakeup_abort_count=0\n
|
||||||
|
A: power/wakeup_active=0\n
|
||||||
|
A: power/wakeup_active_count=0\n
|
||||||
|
A: power/wakeup_count=0\n
|
||||||
|
A: power/wakeup_expire_count=0\n
|
||||||
|
A: power/wakeup_last_time_ms=0\n
|
||||||
|
A: power/wakeup_max_time_ms=0\n
|
||||||
|
A: power/wakeup_total_time_ms=0\n
|
||||||
|
A: power_state=D0\n
|
||||||
|
A: resource=0x0000006005220000 0x000000600522ffff 0x0000000000140204\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n
|
||||||
|
A: revision=0x01\n
|
||||||
|
A: subsystem_device=0x201f\n
|
||||||
|
A: subsystem_vendor=0x1043\n
|
||||||
|
A: vendor=0x8086\n
|
||||||
Binary file not shown.
Executable
+156
@@ -0,0 +1,156 @@
|
|||||||
|
#!/usr/bin/python3
|
||||||
|
|
||||||
|
import traceback
|
||||||
|
import sys
|
||||||
|
import time
|
||||||
|
import gi
|
||||||
|
|
||||||
|
gi.require_version('FPrint', '2.0')
|
||||||
|
from gi.repository import FPrint, GLib
|
||||||
|
|
||||||
|
# Exit with error on any exception, included those happening in async callbacks
|
||||||
|
sys.excepthook = lambda *args: (traceback.print_exception(*args), sys.exit(1))
|
||||||
|
|
||||||
|
ctx = GLib.main_context_default()
|
||||||
|
|
||||||
|
c = FPrint.Context()
|
||||||
|
c.enumerate()
|
||||||
|
devices = c.get_devices()
|
||||||
|
|
||||||
|
d = devices[0]
|
||||||
|
del devices
|
||||||
|
|
||||||
|
d.open_sync()
|
||||||
|
|
||||||
|
assert d.get_driver() == "egismoc"
|
||||||
|
assert not d.has_feature(FPrint.DeviceFeature.CAPTURE)
|
||||||
|
assert d.has_feature(FPrint.DeviceFeature.IDENTIFY)
|
||||||
|
assert d.has_feature(FPrint.DeviceFeature.VERIFY)
|
||||||
|
assert d.has_feature(FPrint.DeviceFeature.DUPLICATES_CHECK)
|
||||||
|
assert d.has_feature(FPrint.DeviceFeature.STORAGE)
|
||||||
|
assert d.has_feature(FPrint.DeviceFeature.STORAGE_LIST)
|
||||||
|
assert d.has_feature(FPrint.DeviceFeature.STORAGE_DELETE)
|
||||||
|
assert d.has_feature(FPrint.DeviceFeature.STORAGE_CLEAR)
|
||||||
|
|
||||||
|
def enroll_progress(*args):
|
||||||
|
print("finger status: ", d.get_finger_status())
|
||||||
|
print('enroll progress: ' + str(args))
|
||||||
|
|
||||||
|
def identify_done(dev, res):
|
||||||
|
global identified
|
||||||
|
identified = True
|
||||||
|
identify_match, identify_print = dev.identify_finish(res)
|
||||||
|
print('indentification_done: ', identify_match, identify_print)
|
||||||
|
assert identify_match.equal(identify_print)
|
||||||
|
|
||||||
|
# Beginning with list and clear assumes you begin with >0 prints enrolled before capturing
|
||||||
|
|
||||||
|
print("listing - device should have prints")
|
||||||
|
stored = d.list_prints_sync()
|
||||||
|
assert len(stored) > 0
|
||||||
|
del stored
|
||||||
|
|
||||||
|
print("clear device storage")
|
||||||
|
d.clear_storage_sync()
|
||||||
|
print("clear done")
|
||||||
|
|
||||||
|
print("listing - device should be empty")
|
||||||
|
stored = d.list_prints_sync()
|
||||||
|
assert len(stored) == 0
|
||||||
|
del stored
|
||||||
|
|
||||||
|
print("enrolling")
|
||||||
|
template = FPrint.Print.new(d)
|
||||||
|
template.set_finger(FPrint.Finger.LEFT_INDEX)
|
||||||
|
assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
|
||||||
|
p1 = d.enroll_sync(template, None, enroll_progress, None)
|
||||||
|
assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
|
||||||
|
print("enroll done")
|
||||||
|
del template
|
||||||
|
|
||||||
|
print("listing - device should have 1 print")
|
||||||
|
stored = d.list_prints_sync()
|
||||||
|
assert len(stored) == 1
|
||||||
|
assert stored[0].equal(p1)
|
||||||
|
|
||||||
|
print("verifying")
|
||||||
|
assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
|
||||||
|
verify_res, verify_print = d.verify_sync(p1)
|
||||||
|
assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
|
||||||
|
print("verify done")
|
||||||
|
assert verify_res == True
|
||||||
|
|
||||||
|
identified = False
|
||||||
|
deserialized_prints = []
|
||||||
|
for p in stored:
|
||||||
|
deserialized_prints.append(FPrint.Print.deserialize(p.serialize()))
|
||||||
|
assert deserialized_prints[-1].equal(p)
|
||||||
|
del stored
|
||||||
|
|
||||||
|
print('async identifying')
|
||||||
|
d.identify(deserialized_prints, callback=identify_done)
|
||||||
|
del deserialized_prints
|
||||||
|
|
||||||
|
while not identified:
|
||||||
|
ctx.iteration(True)
|
||||||
|
|
||||||
|
print("try to enroll duplicate")
|
||||||
|
template = FPrint.Print.new(d)
|
||||||
|
template.set_finger(FPrint.Finger.RIGHT_INDEX)
|
||||||
|
assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
|
||||||
|
try:
|
||||||
|
d.enroll_sync(template, None, enroll_progress, None)
|
||||||
|
except GLib.Error as error:
|
||||||
|
assert error.matches(FPrint.DeviceError.quark(),
|
||||||
|
FPrint.DeviceError.DATA_DUPLICATE)
|
||||||
|
except Exception as exc:
|
||||||
|
raise
|
||||||
|
assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
|
||||||
|
print("duplicate enroll attempt done")
|
||||||
|
|
||||||
|
print("listing - device should still only have 1 print")
|
||||||
|
stored = d.list_prints_sync()
|
||||||
|
assert len(stored) == 1
|
||||||
|
assert stored[0].equal(p1)
|
||||||
|
del stored
|
||||||
|
|
||||||
|
print("enroll new finger")
|
||||||
|
template = FPrint.Print.new(d)
|
||||||
|
template.set_finger(FPrint.Finger.RIGHT_INDEX)
|
||||||
|
assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
|
||||||
|
p2 = d.enroll_sync(template, None, enroll_progress, None)
|
||||||
|
assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
|
||||||
|
print("enroll new finger done")
|
||||||
|
del template
|
||||||
|
|
||||||
|
print("listing - device should have 2 prints")
|
||||||
|
stored = d.list_prints_sync()
|
||||||
|
assert len(stored) == 2
|
||||||
|
assert (stored[0].equal(p1) and stored[1].equal(p2)) or (stored[0].equal(p2) and stored[1].equal(p1))
|
||||||
|
del stored
|
||||||
|
|
||||||
|
print("deleting first print")
|
||||||
|
d.delete_print_sync(p1)
|
||||||
|
print("delete done")
|
||||||
|
del p1
|
||||||
|
|
||||||
|
print("listing - device should only have second print")
|
||||||
|
stored = d.list_prints_sync()
|
||||||
|
assert len(stored) == 1
|
||||||
|
assert stored[0].equal(p2)
|
||||||
|
del stored
|
||||||
|
del p2
|
||||||
|
|
||||||
|
print("clear device storage")
|
||||||
|
d.clear_storage_sync()
|
||||||
|
print("clear done")
|
||||||
|
|
||||||
|
print("listing - device should be empty")
|
||||||
|
stored = d.list_prints_sync()
|
||||||
|
assert len(stored) == 0
|
||||||
|
del stored
|
||||||
|
|
||||||
|
d.close_sync()
|
||||||
|
|
||||||
|
del d
|
||||||
|
del c
|
||||||
@@ -0,0 +1,270 @@
|
|||||||
|
P: /devices/pci0000:00/0000:00:14.0/usb3/3-5
|
||||||
|
N: bus/usb/003/009=12010002FF0000407A1C870567640102030109022700010100A0320904000003FF000000070581020002000705020200020007058303400005
|
||||||
|
E: BUSNUM=003
|
||||||
|
E: DEVNAME=/dev/bus/usb/003/009
|
||||||
|
E: DEVNUM=009
|
||||||
|
E: DEVTYPE=usb_device
|
||||||
|
E: DRIVER=usb
|
||||||
|
E: ID_AUTOSUSPEND=1
|
||||||
|
E: ID_BUS=usb
|
||||||
|
E: ID_MODEL=ETU905A88-E
|
||||||
|
E: ID_MODEL_ENC=ETU905A88-E
|
||||||
|
E: ID_MODEL_ID=0587
|
||||||
|
E: ID_PATH=pci-0000:00:14.0-usb-0:5
|
||||||
|
E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_5
|
||||||
|
E: ID_PATH_WITH_USB_REVISION=pci-0000:00:14.0-usbv2-0:5
|
||||||
|
E: ID_PERSIST=0
|
||||||
|
E: ID_REVISION=6467
|
||||||
|
E: ID_SERIAL=EGIS_ETU905A88-E_198427PCU834
|
||||||
|
E: ID_SERIAL_SHORT=198427PCU834
|
||||||
|
E: ID_USB_INTERFACES=:ff0000:
|
||||||
|
E: ID_USB_MODEL=ETU905A88-E
|
||||||
|
E: ID_USB_MODEL_ENC=ETU905A88-E
|
||||||
|
E: ID_USB_MODEL_ID=0587
|
||||||
|
E: ID_USB_REVISION=6467
|
||||||
|
E: ID_USB_SERIAL=EGIS_ETU905A88-E_198427PCU834
|
||||||
|
E: ID_USB_SERIAL_SHORT=198427PCU834
|
||||||
|
E: ID_USB_VENDOR=EGIS
|
||||||
|
E: ID_USB_VENDOR_ENC=EGIS
|
||||||
|
E: ID_USB_VENDOR_ID=1c7a
|
||||||
|
E: ID_VENDOR=EGIS
|
||||||
|
E: ID_VENDOR_ENC=EGIS
|
||||||
|
E: ID_VENDOR_FROM_DATABASE=LighTuning Technology Inc.
|
||||||
|
E: ID_VENDOR_ID=1c7a
|
||||||
|
E: MAJOR=189
|
||||||
|
E: MINOR=264
|
||||||
|
E: PRODUCT=1c7a/587/6467
|
||||||
|
E: SUBSYSTEM=usb
|
||||||
|
E: TYPE=255/0/0
|
||||||
|
A: authorized=1\n
|
||||||
|
A: avoid_reset_quirk=0\n
|
||||||
|
A: bConfigurationValue=1\n
|
||||||
|
A: bDeviceClass=ff\n
|
||||||
|
A: bDeviceProtocol=00\n
|
||||||
|
A: bDeviceSubClass=00\n
|
||||||
|
A: bMaxPacketSize0=64\n
|
||||||
|
A: bMaxPower=100mA\n
|
||||||
|
A: bNumConfigurations=1\n
|
||||||
|
A: bNumInterfaces= 1\n
|
||||||
|
A: bcdDevice=6467\n
|
||||||
|
A: bmAttributes=a0\n
|
||||||
|
A: busnum=3\n
|
||||||
|
A: configuration=
|
||||||
|
H: descriptors=12010002FF0000407A1C870567640102030109022700010100A0320904000003FF000000070581020002000705020200020007058303400005
|
||||||
|
A: dev=189:264\n
|
||||||
|
A: devnum=9\n
|
||||||
|
A: devpath=5\n
|
||||||
|
L: driver=../../../../../bus/usb/drivers/usb
|
||||||
|
L: firmware_node=../../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:4e/device:4f/device:54
|
||||||
|
A: idProduct=0587\n
|
||||||
|
A: idVendor=1c7a\n
|
||||||
|
A: ltm_capable=no\n
|
||||||
|
A: manufacturer=EGIS\n
|
||||||
|
A: maxchild=0\n
|
||||||
|
A: physical_location/dock=no\n
|
||||||
|
A: physical_location/horizontal_position=left\n
|
||||||
|
A: physical_location/lid=no\n
|
||||||
|
A: physical_location/panel=top\n
|
||||||
|
A: physical_location/vertical_position=upper\n
|
||||||
|
L: port=../3-0:1.0/usb3-port5
|
||||||
|
A: power/active_duration=58096\n
|
||||||
|
A: power/async=enabled\n
|
||||||
|
A: power/autosuspend=2\n
|
||||||
|
A: power/autosuspend_delay_ms=2000\n
|
||||||
|
A: power/connected_duration=183928\n
|
||||||
|
A: power/control=auto\n
|
||||||
|
A: power/level=auto\n
|
||||||
|
A: power/persist=0\n
|
||||||
|
A: power/runtime_active_kids=0\n
|
||||||
|
A: power/runtime_active_time=58510\n
|
||||||
|
A: power/runtime_enabled=enabled\n
|
||||||
|
A: power/runtime_status=active\n
|
||||||
|
A: power/runtime_suspended_time=125136\n
|
||||||
|
A: power/runtime_usage=0\n
|
||||||
|
A: power/wakeup=disabled\n
|
||||||
|
A: power/wakeup_abort_count=\n
|
||||||
|
A: power/wakeup_active=\n
|
||||||
|
A: power/wakeup_active_count=\n
|
||||||
|
A: power/wakeup_count=\n
|
||||||
|
A: power/wakeup_expire_count=\n
|
||||||
|
A: power/wakeup_last_time_ms=\n
|
||||||
|
A: power/wakeup_max_time_ms=\n
|
||||||
|
A: power/wakeup_total_time_ms=\n
|
||||||
|
A: product=ETU905A88-E\n
|
||||||
|
A: quirks=0x0\n
|
||||||
|
A: removable=fixed\n
|
||||||
|
A: rx_lanes=1\n
|
||||||
|
A: serial=198427PCU834\n
|
||||||
|
A: speed=480\n
|
||||||
|
A: tx_lanes=1\n
|
||||||
|
A: urbnum=547\n
|
||||||
|
A: version= 2.00\n
|
||||||
|
|
||||||
|
P: /devices/pci0000:00/0000:00:14.0/usb3
|
||||||
|
N: bus/usb/003/001=12010002090001406B1D020006060302010109021900010100E0000904000001090000000705810304000C
|
||||||
|
E: BUSNUM=003
|
||||||
|
E: CURRENT_TAGS=:seat:
|
||||||
|
E: DEVNAME=/dev/bus/usb/003/001
|
||||||
|
E: DEVNUM=001
|
||||||
|
E: DEVTYPE=usb_device
|
||||||
|
E: DRIVER=usb
|
||||||
|
E: ID_AUTOSUSPEND=1
|
||||||
|
E: ID_BUS=usb
|
||||||
|
E: ID_FOR_SEAT=usb-pci-0000_00_14_0
|
||||||
|
E: ID_MODEL=xHCI_Host_Controller
|
||||||
|
E: ID_MODEL_ENC=xHCI\x20Host\x20Controller
|
||||||
|
E: ID_MODEL_FROM_DATABASE=2.0 root hub
|
||||||
|
E: ID_MODEL_ID=0002
|
||||||
|
E: ID_PATH=pci-0000:00:14.0
|
||||||
|
E: ID_PATH_TAG=pci-0000_00_14_0
|
||||||
|
E: ID_REVISION=0606
|
||||||
|
E: ID_SERIAL=Linux_6.6.0-14-generic_xhci-hcd_xHCI_Host_Controller_0000:00:14.0
|
||||||
|
E: ID_SERIAL_SHORT=0000:00:14.0
|
||||||
|
E: ID_USB_INTERFACES=:090000:
|
||||||
|
E: ID_USB_MODEL=xHCI_Host_Controller
|
||||||
|
E: ID_USB_MODEL_ENC=xHCI\x20Host\x20Controller
|
||||||
|
E: ID_USB_MODEL_ID=0002
|
||||||
|
E: ID_USB_REVISION=0606
|
||||||
|
E: ID_USB_SERIAL=Linux_6.6.0-14-generic_xhci-hcd_xHCI_Host_Controller_0000:00:14.0
|
||||||
|
E: ID_USB_SERIAL_SHORT=0000:00:14.0
|
||||||
|
E: ID_USB_VENDOR=Linux_6.6.0-14-generic_xhci-hcd
|
||||||
|
E: ID_USB_VENDOR_ENC=Linux\x206.6.0-14-generic\x20xhci-hcd
|
||||||
|
E: ID_USB_VENDOR_ID=1d6b
|
||||||
|
E: ID_VENDOR=Linux_6.6.0-14-generic_xhci-hcd
|
||||||
|
E: ID_VENDOR_ENC=Linux\x206.6.0-14-generic\x20xhci-hcd
|
||||||
|
E: ID_VENDOR_FROM_DATABASE=Linux Foundation
|
||||||
|
E: ID_VENDOR_ID=1d6b
|
||||||
|
E: MAJOR=189
|
||||||
|
E: MINOR=256
|
||||||
|
E: PRODUCT=1d6b/2/606
|
||||||
|
E: SUBSYSTEM=usb
|
||||||
|
E: TAGS=:seat:
|
||||||
|
E: TYPE=9/0/1
|
||||||
|
A: authorized=1\n
|
||||||
|
A: authorized_default=1\n
|
||||||
|
A: avoid_reset_quirk=0\n
|
||||||
|
A: bConfigurationValue=1\n
|
||||||
|
A: bDeviceClass=09\n
|
||||||
|
A: bDeviceProtocol=01\n
|
||||||
|
A: bDeviceSubClass=00\n
|
||||||
|
A: bMaxPacketSize0=64\n
|
||||||
|
A: bMaxPower=0mA\n
|
||||||
|
A: bNumConfigurations=1\n
|
||||||
|
A: bNumInterfaces= 1\n
|
||||||
|
A: bcdDevice=0606\n
|
||||||
|
A: bmAttributes=e0\n
|
||||||
|
A: busnum=3\n
|
||||||
|
A: configuration=
|
||||||
|
H: descriptors=12010002090001406B1D020006060302010109021900010100E0000904000001090000000705810304000C
|
||||||
|
A: dev=189:256\n
|
||||||
|
A: devnum=1\n
|
||||||
|
A: devpath=0\n
|
||||||
|
L: driver=../../../../bus/usb/drivers/usb
|
||||||
|
L: firmware_node=../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:4e/device:4f
|
||||||
|
A: idProduct=0002\n
|
||||||
|
A: idVendor=1d6b\n
|
||||||
|
A: interface_authorized_default=1\n
|
||||||
|
A: ltm_capable=no\n
|
||||||
|
A: manufacturer=Linux 6.6.0-14-generic xhci-hcd\n
|
||||||
|
A: maxchild=12\n
|
||||||
|
A: power/active_duration=5145268\n
|
||||||
|
A: power/async=enabled\n
|
||||||
|
A: power/autosuspend=0\n
|
||||||
|
A: power/autosuspend_delay_ms=0\n
|
||||||
|
A: power/connected_duration=5191200\n
|
||||||
|
A: power/control=auto\n
|
||||||
|
A: power/level=auto\n
|
||||||
|
A: power/runtime_active_kids=2\n
|
||||||
|
A: power/runtime_active_time=5145262\n
|
||||||
|
A: power/runtime_enabled=enabled\n
|
||||||
|
A: power/runtime_status=active\n
|
||||||
|
A: power/runtime_suspended_time=45937\n
|
||||||
|
A: power/runtime_usage=0\n
|
||||||
|
A: power/wakeup=disabled\n
|
||||||
|
A: power/wakeup_abort_count=\n
|
||||||
|
A: power/wakeup_active=\n
|
||||||
|
A: power/wakeup_active_count=\n
|
||||||
|
A: power/wakeup_count=\n
|
||||||
|
A: power/wakeup_expire_count=\n
|
||||||
|
A: power/wakeup_last_time_ms=\n
|
||||||
|
A: power/wakeup_max_time_ms=\n
|
||||||
|
A: power/wakeup_total_time_ms=\n
|
||||||
|
A: product=xHCI Host Controller\n
|
||||||
|
A: quirks=0x0\n
|
||||||
|
A: removable=unknown\n
|
||||||
|
A: rx_lanes=1\n
|
||||||
|
A: serial=0000:00:14.0\n
|
||||||
|
A: speed=480\n
|
||||||
|
A: tx_lanes=1\n
|
||||||
|
A: urbnum=637\n
|
||||||
|
A: version= 2.00\n
|
||||||
|
|
||||||
|
P: /devices/pci0000:00/0000:00:14.0
|
||||||
|
E: DRIVER=xhci_hcd
|
||||||
|
E: ID_AUTOSUSPEND=1
|
||||||
|
E: ID_MODEL_FROM_DATABASE=Alder Lake PCH USB 3.2 xHCI Host Controller
|
||||||
|
E: ID_PATH=pci-0000:00:14.0
|
||||||
|
E: ID_PATH_TAG=pci-0000_00_14_0
|
||||||
|
E: ID_PCI_CLASS_FROM_DATABASE=Serial bus controller
|
||||||
|
E: ID_PCI_INTERFACE_FROM_DATABASE=XHCI
|
||||||
|
E: ID_PCI_SUBCLASS_FROM_DATABASE=USB controller
|
||||||
|
E: ID_VENDOR_FROM_DATABASE=Intel Corporation
|
||||||
|
E: MODALIAS=pci:v00008086d000051EDsv00001043sd0000201Fbc0Csc03i30
|
||||||
|
E: PCI_CLASS=C0330
|
||||||
|
E: PCI_ID=8086:51ED
|
||||||
|
E: PCI_SLOT_NAME=0000:00:14.0
|
||||||
|
E: PCI_SUBSYS_ID=1043:201F
|
||||||
|
E: SUBSYSTEM=pci
|
||||||
|
A: ari_enabled=0\n
|
||||||
|
A: broken_parity_status=0\n
|
||||||
|
A: class=0x0c0330\n
|
||||||
|
H: config=8680ED51060490020130030C000080000400262F62000000000000000000000000000000000000000000000043101F20000000007000000000000000FF010000FD0134A089C27F8000000000000000003F6DD80F000000000000000000000000316000000000000000000000000000000180C2C1080000000000000000000000059087001805E0FE000000000000000009B014F01000400100000000C10A080000080E00001800008F50020000010000090000018680C00009001014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B50F110112000000
|
||||||
|
A: consistent_dma_mask_bits=64\n
|
||||||
|
A: d3cold_allowed=1\n
|
||||||
|
A: dbc=disabled\n
|
||||||
|
A: dbc_bInterfaceProtocol=01\n
|
||||||
|
A: dbc_bcdDevice=0010\n
|
||||||
|
A: dbc_idProduct=0010\n
|
||||||
|
A: dbc_idVendor=1d6b\n
|
||||||
|
A: device=0x51ed\n
|
||||||
|
A: dma_mask_bits=64\n
|
||||||
|
L: driver=../../../bus/pci/drivers/xhci_hcd
|
||||||
|
A: driver_override=(null)\n
|
||||||
|
A: enable=1\n
|
||||||
|
L: firmware_node=../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:4e
|
||||||
|
A: index=10\n
|
||||||
|
L: iommu=../../virtual/iommu/dmar1
|
||||||
|
L: iommu_group=../../../kernel/iommu_groups/11
|
||||||
|
A: irq=145\n
|
||||||
|
A: label=Onboard - Other\n
|
||||||
|
A: local_cpulist=0-19\n
|
||||||
|
A: local_cpus=fffff\n
|
||||||
|
A: modalias=pci:v00008086d000051EDsv00001043sd0000201Fbc0Csc03i30\n
|
||||||
|
A: msi_bus=1\n
|
||||||
|
A: msi_irqs/145=msi\n
|
||||||
|
A: numa_node=-1\n
|
||||||
|
A: pools=poolinfo - 0.1\nbuffer-2048 0 0 2048 0\nbuffer-512 0 0 512 0\nbuffer-128 1 32 128 1\nbuffer-32 0 0 32 0\nxHCI 1KB stream ctx arrays 0 0 1024 0\nxHCI 256 byte stream ctx arrays 0 0 256 0\nxHCI input/output contexts 10 11 2112 11\nxHCI ring segments 38 38 4096 38\nbuffer-2048 0 0 2048 0\nbuffer-512 0 0 512 0\nbuffer-128 6 32 128 1\nbuffer-32 0 0 32 0\n
|
||||||
|
A: power/async=enabled\n
|
||||||
|
A: power/control=auto\n
|
||||||
|
A: power/runtime_active_kids=2\n
|
||||||
|
A: power/runtime_active_time=5192072\n
|
||||||
|
A: power/runtime_enabled=enabled\n
|
||||||
|
A: power/runtime_status=active\n
|
||||||
|
A: power/runtime_suspended_time=0\n
|
||||||
|
A: power/runtime_usage=0\n
|
||||||
|
A: power/wakeup=enabled\n
|
||||||
|
A: power/wakeup_abort_count=0\n
|
||||||
|
A: power/wakeup_active=0\n
|
||||||
|
A: power/wakeup_active_count=0\n
|
||||||
|
A: power/wakeup_count=0\n
|
||||||
|
A: power/wakeup_expire_count=0\n
|
||||||
|
A: power/wakeup_last_time_ms=0\n
|
||||||
|
A: power/wakeup_max_time_ms=0\n
|
||||||
|
A: power/wakeup_total_time_ms=0\n
|
||||||
|
A: power_state=D0\n
|
||||||
|
A: resource=0x000000622f260000 0x000000622f26ffff 0x0000000000140204\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n
|
||||||
|
A: revision=0x01\n
|
||||||
|
A: subsystem_device=0x201f\n
|
||||||
|
A: subsystem_vendor=0x1043\n
|
||||||
|
A: vendor=0x8086\n
|
||||||
|
|
||||||
@@ -24,12 +24,3 @@
|
|||||||
...
|
...
|
||||||
fun:g_thread_new
|
fun:g_thread_new
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
|
||||||
<ignore-bash-leaks>
|
|
||||||
Memcheck:Leak
|
|
||||||
match-leak-kinds: definite
|
|
||||||
fun:malloc
|
|
||||||
...
|
|
||||||
obj:/usr/bin/bash
|
|
||||||
}
|
|
||||||
|
|||||||
+4
-195
@@ -53,8 +53,11 @@ drivers_tests = [
|
|||||||
'egis0570',
|
'egis0570',
|
||||||
'egismoc',
|
'egismoc',
|
||||||
'egismoc-05a1',
|
'egismoc-05a1',
|
||||||
|
'egismoc-0586',
|
||||||
|
'egismoc-0587',
|
||||||
'fpcmoc',
|
'fpcmoc',
|
||||||
'realtek',
|
'realtek',
|
||||||
|
'realtek-5816',
|
||||||
'focaltech_moc',
|
'focaltech_moc',
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -375,197 +378,3 @@ 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
|
|
||||||
|
|||||||
Binary file not shown.
Executable
+110
@@ -0,0 +1,110 @@
|
|||||||
|
#!/usr/bin/python3
|
||||||
|
|
||||||
|
import traceback
|
||||||
|
import sys
|
||||||
|
import gi
|
||||||
|
|
||||||
|
gi.require_version('FPrint', '2.0')
|
||||||
|
from gi.repository import FPrint, GLib
|
||||||
|
|
||||||
|
# Exit with error on any exception, included those happening in async callbacks
|
||||||
|
sys.excepthook = lambda *args: (traceback.print_exception(*args), sys.exit(1))
|
||||||
|
|
||||||
|
ctx = GLib.main_context_default()
|
||||||
|
|
||||||
|
c = FPrint.Context()
|
||||||
|
c.enumerate()
|
||||||
|
devices = c.get_devices()
|
||||||
|
|
||||||
|
d = devices[0]
|
||||||
|
del devices
|
||||||
|
|
||||||
|
assert d.get_driver() == "realtek"
|
||||||
|
assert not d.has_feature(FPrint.DeviceFeature.CAPTURE)
|
||||||
|
assert d.has_feature(FPrint.DeviceFeature.IDENTIFY)
|
||||||
|
assert d.has_feature(FPrint.DeviceFeature.VERIFY)
|
||||||
|
assert not d.has_feature(FPrint.DeviceFeature.DUPLICATES_CHECK)
|
||||||
|
assert d.has_feature(FPrint.DeviceFeature.STORAGE)
|
||||||
|
assert d.has_feature(FPrint.DeviceFeature.STORAGE_LIST)
|
||||||
|
assert d.has_feature(FPrint.DeviceFeature.STORAGE_DELETE)
|
||||||
|
assert d.has_feature(FPrint.DeviceFeature.STORAGE_CLEAR)
|
||||||
|
|
||||||
|
d.open_sync()
|
||||||
|
|
||||||
|
# 1. verify clear storage command, 2. make sure later asserts are good
|
||||||
|
d.clear_storage_sync()
|
||||||
|
|
||||||
|
template = FPrint.Print.new(d)
|
||||||
|
|
||||||
|
def enroll_progress(*args):
|
||||||
|
# assert d.get_finger_status() & FPrint.FingerStatusFlags.NEEDED
|
||||||
|
print('enroll progress: ' + str(args))
|
||||||
|
|
||||||
|
def identify_done(dev, res):
|
||||||
|
global identified
|
||||||
|
identified = True
|
||||||
|
try:
|
||||||
|
identify_match, identify_print = dev.identify_finish(res)
|
||||||
|
except gi.repository.GLib.GError as e:
|
||||||
|
print("Please try again")
|
||||||
|
else:
|
||||||
|
print('indentification_done: ', identify_match, identify_print)
|
||||||
|
assert identify_match.equal(identify_print)
|
||||||
|
|
||||||
|
def start_identify_async(prints):
|
||||||
|
global identified
|
||||||
|
print('async identifying')
|
||||||
|
d.identify(prints, callback=identify_done)
|
||||||
|
del prints
|
||||||
|
|
||||||
|
while not identified:
|
||||||
|
ctx.iteration(True)
|
||||||
|
|
||||||
|
identified = False
|
||||||
|
|
||||||
|
# List, enroll, list, verify, identify, delete
|
||||||
|
print("enrolling")
|
||||||
|
assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
|
||||||
|
p = d.enroll_sync(template, None, enroll_progress, None)
|
||||||
|
assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
|
||||||
|
print("enroll done")
|
||||||
|
|
||||||
|
print("listing")
|
||||||
|
stored = d.list_prints_sync()
|
||||||
|
print("listing done")
|
||||||
|
assert len(stored) == 1
|
||||||
|
assert stored[0].equal(p)
|
||||||
|
print("verifying")
|
||||||
|
try:
|
||||||
|
assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
|
||||||
|
verify_res, verify_print = d.verify_sync(p)
|
||||||
|
assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
|
||||||
|
except gi.repository.GLib.GError as e:
|
||||||
|
print("Please try again")
|
||||||
|
else:
|
||||||
|
print("verify done")
|
||||||
|
del p
|
||||||
|
assert verify_res == True
|
||||||
|
|
||||||
|
identified = False
|
||||||
|
deserialized_prints = []
|
||||||
|
for p in stored:
|
||||||
|
deserialized_prints.append(FPrint.Print.deserialize(p.serialize()))
|
||||||
|
assert deserialized_prints[-1].equal(p)
|
||||||
|
del stored
|
||||||
|
|
||||||
|
print('async identifying')
|
||||||
|
d.identify(deserialized_prints, callback=identify_done)
|
||||||
|
del deserialized_prints
|
||||||
|
|
||||||
|
while not identified:
|
||||||
|
ctx.iteration(True)
|
||||||
|
|
||||||
|
print("deleting")
|
||||||
|
d.delete_print_sync(p)
|
||||||
|
print("delete done")
|
||||||
|
|
||||||
|
d.close_sync()
|
||||||
|
|
||||||
|
del d
|
||||||
|
del c
|
||||||
@@ -0,0 +1,250 @@
|
|||||||
|
P: /devices/pci0000:00/0000:00:14.0/usb1/1-6
|
||||||
|
N: bus/usb/001/006=12010102EF020140DA0B165800000301020109022E00010104A0FA0904000004FF02000507050102000200070583034000080705840340000807058202000200
|
||||||
|
E: DEVNAME=/dev/bus/usb/001/006
|
||||||
|
E: DEVTYPE=usb_device
|
||||||
|
E: DRIVER=usb
|
||||||
|
E: PRODUCT=bda/5816/0
|
||||||
|
E: TYPE=239/2/1
|
||||||
|
E: BUSNUM=001
|
||||||
|
E: DEVNUM=006
|
||||||
|
E: MAJOR=189
|
||||||
|
E: MINOR=5
|
||||||
|
E: SUBSYSTEM=usb
|
||||||
|
E: ID_VENDOR=Generic
|
||||||
|
E: ID_VENDOR_ENC=Generic
|
||||||
|
E: ID_VENDOR_ID=0bda
|
||||||
|
E: ID_MODEL=Realtek_USB2.0_Finger_Print_Bridge
|
||||||
|
E: ID_MODEL_ENC=Realtek\x20USB2.0\x20Finger\x20Print\x20Bridge
|
||||||
|
E: ID_MODEL_ID=5816
|
||||||
|
E: ID_REVISION=0000
|
||||||
|
E: ID_SERIAL=Generic_Realtek_USB2.0_Finger_Print_Bridge_201801010001
|
||||||
|
E: ID_SERIAL_SHORT=201801010001
|
||||||
|
E: ID_BUS=usb
|
||||||
|
E: ID_USB_INTERFACES=:ff0200:
|
||||||
|
E: ID_VENDOR_FROM_DATABASE=Realtek Semiconductor Corp.
|
||||||
|
E: ID_PATH=pci-0000:00:14.0-usb-0:6
|
||||||
|
E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_6
|
||||||
|
A: authorized=1\n
|
||||||
|
A: avoid_reset_quirk=0\n
|
||||||
|
A: bConfigurationValue=1\n
|
||||||
|
A: bDeviceClass=ef\n
|
||||||
|
A: bDeviceProtocol=01\n
|
||||||
|
A: bDeviceSubClass=02\n
|
||||||
|
A: bMaxPacketSize0=64\n
|
||||||
|
A: bMaxPower=500mA\n
|
||||||
|
A: bNumConfigurations=1\n
|
||||||
|
A: bNumInterfaces= 1\n
|
||||||
|
A: bcdDevice=0000\n
|
||||||
|
A: bmAttributes=a0\n
|
||||||
|
A: busnum=1\n
|
||||||
|
A: configuration=Realtek USB2.0 Finger Print Bridge\n
|
||||||
|
H: descriptors=12010102EF020140DA0B165800000301020109022E00010104A0FA0904000004FF02000507050102000200070583034000080705840340000807058202000200
|
||||||
|
A: dev=189:5\n
|
||||||
|
A: devnum=6\n
|
||||||
|
A: devpath=6\n
|
||||||
|
L: driver=../../../../../bus/usb/drivers/usb
|
||||||
|
L: firmware_node=../../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:4b/device:4c/device:52
|
||||||
|
A: idProduct=5816\n
|
||||||
|
A: idVendor=0bda\n
|
||||||
|
A: ltm_capable=no\n
|
||||||
|
A: manufacturer=Generic\n
|
||||||
|
A: maxchild=0\n
|
||||||
|
A: physical_location/dock=no\n
|
||||||
|
A: physical_location/horizontal_position=left\n
|
||||||
|
A: physical_location/lid=no\n
|
||||||
|
A: physical_location/panel=top\n
|
||||||
|
A: physical_location/vertical_position=upper\n
|
||||||
|
L: port=../1-0:1.0/usb1-port6
|
||||||
|
A: power/active_duration=37699\n
|
||||||
|
A: power/async=enabled\n
|
||||||
|
A: power/autosuspend=2\n
|
||||||
|
A: power/autosuspend_delay_ms=2000\n
|
||||||
|
A: power/connected_duration=37699\n
|
||||||
|
A: power/control=on\n
|
||||||
|
A: power/level=on\n
|
||||||
|
A: power/persist=1\n
|
||||||
|
A: power/runtime_active_kids=0\n
|
||||||
|
A: power/runtime_active_time=37457\n
|
||||||
|
A: power/runtime_enabled=forbidden\n
|
||||||
|
A: power/runtime_status=active\n
|
||||||
|
A: power/runtime_suspended_time=0\n
|
||||||
|
A: power/runtime_usage=1\n
|
||||||
|
A: power/wakeup=disabled\n
|
||||||
|
A: power/wakeup_abort_count=\n
|
||||||
|
A: power/wakeup_active=\n
|
||||||
|
A: power/wakeup_active_count=\n
|
||||||
|
A: power/wakeup_count=\n
|
||||||
|
A: power/wakeup_expire_count=\n
|
||||||
|
A: power/wakeup_last_time_ms=\n
|
||||||
|
A: power/wakeup_max_time_ms=\n
|
||||||
|
A: power/wakeup_total_time_ms=\n
|
||||||
|
A: product=Realtek USB2.0 Finger Print Bridge\n
|
||||||
|
A: quirks=0x0\n
|
||||||
|
A: removable=removable\n
|
||||||
|
A: rx_lanes=1\n
|
||||||
|
A: serial=201801010001\n
|
||||||
|
A: speed=480\n
|
||||||
|
A: tx_lanes=1\n
|
||||||
|
A: urbnum=22\n
|
||||||
|
A: version= 2.01\n
|
||||||
|
|
||||||
|
P: /devices/pci0000:00/0000:00:14.0/usb1
|
||||||
|
N: bus/usb/001/001=12010002090001406B1D020008060302010109021900010100E0000904000001090000000705810304000C
|
||||||
|
E: DEVNAME=/dev/bus/usb/001/001
|
||||||
|
E: DEVTYPE=usb_device
|
||||||
|
E: DRIVER=usb
|
||||||
|
E: PRODUCT=1d6b/2/608
|
||||||
|
E: TYPE=9/0/1
|
||||||
|
E: BUSNUM=001
|
||||||
|
E: DEVNUM=001
|
||||||
|
E: MAJOR=189
|
||||||
|
E: MINOR=0
|
||||||
|
E: SUBSYSTEM=usb
|
||||||
|
E: ID_VENDOR=Linux_6.8.0-40-generic_xhci-hcd
|
||||||
|
E: ID_VENDOR_ENC=Linux\x206.8.0-40-generic\x20xhci-hcd
|
||||||
|
E: ID_VENDOR_ID=1d6b
|
||||||
|
E: ID_MODEL=xHCI_Host_Controller
|
||||||
|
E: ID_MODEL_ENC=xHCI\x20Host\x20Controller
|
||||||
|
E: ID_MODEL_ID=0002
|
||||||
|
E: ID_REVISION=0608
|
||||||
|
E: ID_SERIAL=Linux_6.8.0-40-generic_xhci-hcd_xHCI_Host_Controller_0000:00:14.0
|
||||||
|
E: ID_SERIAL_SHORT=0000:00:14.0
|
||||||
|
E: ID_BUS=usb
|
||||||
|
E: ID_USB_INTERFACES=:090000:
|
||||||
|
E: ID_VENDOR_FROM_DATABASE=Linux Foundation
|
||||||
|
E: ID_AUTOSUSPEND=1
|
||||||
|
E: ID_MODEL_FROM_DATABASE=2.0 root hub
|
||||||
|
E: ID_PATH=pci-0000:00:14.0
|
||||||
|
E: ID_PATH_TAG=pci-0000_00_14_0
|
||||||
|
E: ID_FOR_SEAT=usb-pci-0000_00_14_0
|
||||||
|
E: TAGS=:seat:
|
||||||
|
E: CURRENT_TAGS=:seat:
|
||||||
|
A: authorized=1\n
|
||||||
|
A: authorized_default=1\n
|
||||||
|
A: avoid_reset_quirk=0\n
|
||||||
|
A: bConfigurationValue=1\n
|
||||||
|
A: bDeviceClass=09\n
|
||||||
|
A: bDeviceProtocol=01\n
|
||||||
|
A: bDeviceSubClass=00\n
|
||||||
|
A: bMaxPacketSize0=64\n
|
||||||
|
A: bMaxPower=0mA\n
|
||||||
|
A: bNumConfigurations=1\n
|
||||||
|
A: bNumInterfaces= 1\n
|
||||||
|
A: bcdDevice=0608\n
|
||||||
|
A: bmAttributes=e0\n
|
||||||
|
A: busnum=1\n
|
||||||
|
A: configuration=
|
||||||
|
H: descriptors=12010002090001406B1D020008060302010109021900010100E0000904000001090000000705810304000C
|
||||||
|
A: dev=189:0\n
|
||||||
|
A: devnum=1\n
|
||||||
|
A: devpath=0\n
|
||||||
|
L: driver=../../../../bus/usb/drivers/usb
|
||||||
|
L: firmware_node=../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:4b/device:4c
|
||||||
|
A: idProduct=0002\n
|
||||||
|
A: idVendor=1d6b\n
|
||||||
|
A: interface_authorized_default=1\n
|
||||||
|
A: ltm_capable=no\n
|
||||||
|
A: manufacturer=Linux 6.8.0-40-generic xhci-hcd\n
|
||||||
|
A: maxchild=16\n
|
||||||
|
A: power/active_duration=1096259\n
|
||||||
|
A: power/async=enabled\n
|
||||||
|
A: power/autosuspend=0\n
|
||||||
|
A: power/autosuspend_delay_ms=0\n
|
||||||
|
A: power/connected_duration=1096259\n
|
||||||
|
A: power/control=auto\n
|
||||||
|
A: power/level=auto\n
|
||||||
|
A: power/runtime_active_kids=3\n
|
||||||
|
A: power/runtime_active_time=1096256\n
|
||||||
|
A: power/runtime_enabled=enabled\n
|
||||||
|
A: power/runtime_status=active\n
|
||||||
|
A: power/runtime_suspended_time=0\n
|
||||||
|
A: power/runtime_usage=0\n
|
||||||
|
A: power/wakeup=disabled\n
|
||||||
|
A: power/wakeup_abort_count=\n
|
||||||
|
A: power/wakeup_active=\n
|
||||||
|
A: power/wakeup_active_count=\n
|
||||||
|
A: power/wakeup_count=\n
|
||||||
|
A: power/wakeup_expire_count=\n
|
||||||
|
A: power/wakeup_last_time_ms=\n
|
||||||
|
A: power/wakeup_max_time_ms=\n
|
||||||
|
A: power/wakeup_total_time_ms=\n
|
||||||
|
A: product=xHCI Host Controller\n
|
||||||
|
A: quirks=0x0\n
|
||||||
|
A: removable=unknown\n
|
||||||
|
A: rx_lanes=1\n
|
||||||
|
A: serial=0000:00:14.0\n
|
||||||
|
A: speed=480\n
|
||||||
|
A: tx_lanes=1\n
|
||||||
|
A: urbnum=229\n
|
||||||
|
A: version= 2.00\n
|
||||||
|
|
||||||
|
P: /devices/pci0000:00/0000:00:14.0
|
||||||
|
E: DRIVER=xhci_hcd
|
||||||
|
E: PCI_CLASS=C0330
|
||||||
|
E: PCI_ID=8086:A36D
|
||||||
|
E: PCI_SUBSYS_ID=1028:085C
|
||||||
|
E: PCI_SLOT_NAME=0000:00:14.0
|
||||||
|
E: MODALIAS=pci:v00008086d0000A36Dsv00001028sd0000085Cbc0Csc03i30
|
||||||
|
E: SUBSYSTEM=pci
|
||||||
|
E: ID_PCI_CLASS_FROM_DATABASE=Serial bus controller
|
||||||
|
E: ID_PCI_SUBCLASS_FROM_DATABASE=USB controller
|
||||||
|
E: ID_PCI_INTERFACE_FROM_DATABASE=XHCI
|
||||||
|
E: ID_VENDOR_FROM_DATABASE=Intel Corporation
|
||||||
|
E: ID_MODEL_FROM_DATABASE=Cannon Lake PCH USB 3.1 xHCI Host Controller
|
||||||
|
A: ari_enabled=0\n
|
||||||
|
A: broken_parity_status=0\n
|
||||||
|
A: class=0x0c0330\n
|
||||||
|
H: config=86806DA3060590021030030C00008000040030D200000000000000000000000000000000000000000000000028105C08000000007000000000000000FF010000FD0134808FC6FF8300000000000000007F6DDC0F000000005B17C10300000000316000000000000000000000000000000180C2C10800000000000000000000000590B7001803E0FE0000000000000000090014F01000400100000000C10A080000080E00001800008F40020000010000030000000C00000000000000C000000000000000000100003000000000000000030000000C0000000000000000000000000000000000000000000000000000000000000000000000B50F120112000000
|
||||||
|
A: consistent_dma_mask_bits=64\n
|
||||||
|
A: d3cold_allowed=1\n
|
||||||
|
A: dbc=disabled\n
|
||||||
|
A: dbc_bInterfaceProtocol=01\n
|
||||||
|
A: dbc_bcdDevice=0010\n
|
||||||
|
A: dbc_idProduct=0010\n
|
||||||
|
A: dbc_idVendor=1d6b\n
|
||||||
|
A: device=0xa36d\n
|
||||||
|
A: dma_mask_bits=64\n
|
||||||
|
L: driver=../../../bus/pci/drivers/xhci_hcd
|
||||||
|
A: driver_override=(null)\n
|
||||||
|
A: enable=1\n
|
||||||
|
L: firmware_node=../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:4b
|
||||||
|
A: index=4\n
|
||||||
|
L: iommu=../../virtual/iommu/dmar1
|
||||||
|
L: iommu_group=../../../kernel/iommu_groups/4
|
||||||
|
A: irq=125\n
|
||||||
|
A: label=Onboard - Other\n
|
||||||
|
A: local_cpulist=0-3\n
|
||||||
|
A: local_cpus=f\n
|
||||||
|
A: modalias=pci:v00008086d0000A36Dsv00001028sd0000085Cbc0Csc03i30\n
|
||||||
|
A: msi_bus=1\n
|
||||||
|
A: msi_irqs/125=msi\n
|
||||||
|
A: msi_irqs/126=msi\n
|
||||||
|
A: msi_irqs/127=msi\n
|
||||||
|
A: msi_irqs/128=msi\n
|
||||||
|
A: msi_irqs/129=msi\n
|
||||||
|
A: numa_node=-1\n
|
||||||
|
A: pools=poolinfo - 0.1\nbuffer-2048 0 0 2048 0\nbuffer-512 0 0 512 0\nbuffer-128 0 0 128 0\nbuffer-32 0 0 32 0\nxHCI 1KB stream ctx arrays 0 0 1024 0\nxHCI 256 byte stream ctx arrays 0 0 256 0\nxHCI input/output contexts 6 7 2112 7\nxHCI ring segments 25 25 4096 25\nbuffer-2048 0 0 2048 0\nbuffer-512 0 0 512 0\nbuffer-128 12 32 128 1\nbuffer-32 0 0 32 0\n
|
||||||
|
A: power/async=enabled\n
|
||||||
|
A: power/control=on\n
|
||||||
|
A: power/runtime_active_kids=1\n
|
||||||
|
A: power/runtime_active_time=1096935\n
|
||||||
|
A: power/runtime_enabled=forbidden\n
|
||||||
|
A: power/runtime_status=active\n
|
||||||
|
A: power/runtime_suspended_time=0\n
|
||||||
|
A: power/runtime_usage=1\n
|
||||||
|
A: power/wakeup=enabled\n
|
||||||
|
A: power/wakeup_abort_count=0\n
|
||||||
|
A: power/wakeup_active=0\n
|
||||||
|
A: power/wakeup_active_count=0\n
|
||||||
|
A: power/wakeup_count=0\n
|
||||||
|
A: power/wakeup_expire_count=0\n
|
||||||
|
A: power/wakeup_last_time_ms=0\n
|
||||||
|
A: power/wakeup_max_time_ms=0\n
|
||||||
|
A: power/wakeup_total_time_ms=0\n
|
||||||
|
A: power_state=D0\n
|
||||||
|
A: resource=0x00000000d2300000 0x00000000d230ffff 0x0000000000140204\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n
|
||||||
|
A: revision=0x10\n
|
||||||
|
A: subsystem_device=0x085c\n
|
||||||
|
A: subsystem_vendor=0x1028\n
|
||||||
|
A: vendor=0x8086\n
|
||||||
|
|
||||||
Binary file not shown.
+38
-34
@@ -1,14 +1,14 @@
|
|||||||
P: /devices/pci0000:00/0000:00:14.0/usb1/1-4
|
P: /devices/pci0000:00/0000:00:14.0/usb1/1-8
|
||||||
N: bus/usb/001/005=12010102EF020140DA0B135801210301020109022E00010104A0FA0904000004FF02000507050102000200070583031000080705840310000807058202000200
|
N: bus/usb/001/025=12010102EF020140DA0B135801210301020109022E00010104A0FA0904000004FF02000507050102000200070583031000080705840310000807058202000200
|
||||||
E: DEVNAME=/dev/bus/usb/001/005
|
E: DEVNAME=/dev/bus/usb/001/025
|
||||||
E: DEVTYPE=usb_device
|
E: DEVTYPE=usb_device
|
||||||
E: DRIVER=usb
|
E: DRIVER=usb
|
||||||
E: PRODUCT=bda/5813/2101
|
E: PRODUCT=bda/5813/2101
|
||||||
E: TYPE=239/2/1
|
E: TYPE=239/2/1
|
||||||
E: BUSNUM=001
|
E: BUSNUM=001
|
||||||
E: DEVNUM=005
|
E: DEVNUM=025
|
||||||
E: MAJOR=189
|
E: MAJOR=189
|
||||||
E: MINOR=4
|
E: MINOR=24
|
||||||
E: SUBSYSTEM=usb
|
E: SUBSYSTEM=usb
|
||||||
E: ID_VENDOR=Generic
|
E: ID_VENDOR=Generic
|
||||||
E: ID_VENDOR_ENC=Generic
|
E: ID_VENDOR_ENC=Generic
|
||||||
@@ -22,8 +22,8 @@ E: ID_SERIAL_SHORT=201801010001
|
|||||||
E: ID_BUS=usb
|
E: ID_BUS=usb
|
||||||
E: ID_USB_INTERFACES=:ff0200:
|
E: ID_USB_INTERFACES=:ff0200:
|
||||||
E: ID_VENDOR_FROM_DATABASE=Realtek Semiconductor Corp.
|
E: ID_VENDOR_FROM_DATABASE=Realtek Semiconductor Corp.
|
||||||
E: ID_PATH=pci-0000:00:14.0-usb-0:4
|
E: ID_PATH=pci-0000:00:14.0-usb-0:8
|
||||||
E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_4
|
E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_8
|
||||||
A: authorized=1\n
|
A: authorized=1\n
|
||||||
A: avoid_reset_quirk=0\n
|
A: avoid_reset_quirk=0\n
|
||||||
A: bConfigurationValue=1\n
|
A: bConfigurationValue=1\n
|
||||||
@@ -39,11 +39,11 @@ A: bmAttributes=a0\n
|
|||||||
A: busnum=1\n
|
A: busnum=1\n
|
||||||
A: configuration=Realtek USB2.0 Finger Print Bridge\n
|
A: configuration=Realtek USB2.0 Finger Print Bridge\n
|
||||||
H: descriptors=12010102EF020140DA0B135801210301020109022E00010104A0FA0904000004FF02000507050102000200070583031000080705840310000807058202000200
|
H: descriptors=12010102EF020140DA0B135801210301020109022E00010104A0FA0904000004FF02000507050102000200070583031000080705840310000807058202000200
|
||||||
A: dev=189:4\n
|
A: dev=189:24\n
|
||||||
A: devnum=5\n
|
A: devnum=25\n
|
||||||
A: devpath=4\n
|
A: devpath=8\n
|
||||||
L: driver=../../../../../bus/usb/drivers/usb
|
L: driver=../../../../../bus/usb/drivers/usb
|
||||||
L: firmware_node=../../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:4b/device:4c/device:50
|
L: firmware_node=../../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:4b/device:4c/device:54
|
||||||
A: idProduct=5813\n
|
A: idProduct=5813\n
|
||||||
A: idVendor=0bda\n
|
A: idVendor=0bda\n
|
||||||
A: ltm_capable=no\n
|
A: ltm_capable=no\n
|
||||||
@@ -54,21 +54,21 @@ A: physical_location/horizontal_position=left\n
|
|||||||
A: physical_location/lid=no\n
|
A: physical_location/lid=no\n
|
||||||
A: physical_location/panel=top\n
|
A: physical_location/panel=top\n
|
||||||
A: physical_location/vertical_position=upper\n
|
A: physical_location/vertical_position=upper\n
|
||||||
L: port=../1-0:1.0/usb1-port4
|
L: port=../1-0:1.0/usb1-port8
|
||||||
A: power/active_duration=91232868\n
|
A: power/active_duration=271844\n
|
||||||
A: power/async=enabled\n
|
A: power/async=enabled\n
|
||||||
A: power/autosuspend=2\n
|
A: power/autosuspend=2\n
|
||||||
A: power/autosuspend_delay_ms=2000\n
|
A: power/autosuspend_delay_ms=2000\n
|
||||||
A: power/connected_duration=91232868\n
|
A: power/connected_duration=271844\n
|
||||||
A: power/control=on\n
|
A: power/control=on\n
|
||||||
A: power/level=on\n
|
A: power/level=on\n
|
||||||
A: power/persist=1\n
|
A: power/persist=1\n
|
||||||
A: power/runtime_active_kids=0\n
|
A: power/runtime_active_kids=0\n
|
||||||
A: power/runtime_active_time=91232594\n
|
A: power/runtime_active_time=271564\n
|
||||||
A: power/runtime_enabled=forbidden\n
|
A: power/runtime_enabled=forbidden\n
|
||||||
A: power/runtime_status=active\n
|
A: power/runtime_status=active\n
|
||||||
A: power/runtime_suspended_time=0\n
|
A: power/runtime_suspended_time=0\n
|
||||||
A: power/runtime_usage=7\n
|
A: power/runtime_usage=1\n
|
||||||
A: power/wakeup=disabled\n
|
A: power/wakeup=disabled\n
|
||||||
A: power/wakeup_abort_count=\n
|
A: power/wakeup_abort_count=\n
|
||||||
A: power/wakeup_active=\n
|
A: power/wakeup_active=\n
|
||||||
@@ -85,29 +85,29 @@ A: rx_lanes=1\n
|
|||||||
A: serial=201801010001\n
|
A: serial=201801010001\n
|
||||||
A: speed=480\n
|
A: speed=480\n
|
||||||
A: tx_lanes=1\n
|
A: tx_lanes=1\n
|
||||||
A: urbnum=15076313\n
|
A: urbnum=297176\n
|
||||||
A: version= 2.01\n
|
A: version= 2.01\n
|
||||||
|
|
||||||
P: /devices/pci0000:00/0000:00:14.0/usb1
|
P: /devices/pci0000:00/0000:00:14.0/usb1
|
||||||
N: bus/usb/001/001=12010002090001406B1D020002060302010109021900010100E0000904000001090000000705810304000C
|
N: bus/usb/001/001=12010002090001406B1D020005060302010109021900010100E0000904000001090000000705810304000C
|
||||||
E: DEVNAME=/dev/bus/usb/001/001
|
E: DEVNAME=/dev/bus/usb/001/001
|
||||||
E: DEVTYPE=usb_device
|
E: DEVTYPE=usb_device
|
||||||
E: DRIVER=usb
|
E: DRIVER=usb
|
||||||
E: PRODUCT=1d6b/2/602
|
E: PRODUCT=1d6b/2/605
|
||||||
E: TYPE=9/0/1
|
E: TYPE=9/0/1
|
||||||
E: BUSNUM=001
|
E: BUSNUM=001
|
||||||
E: DEVNUM=001
|
E: DEVNUM=001
|
||||||
E: MAJOR=189
|
E: MAJOR=189
|
||||||
E: MINOR=0
|
E: MINOR=0
|
||||||
E: SUBSYSTEM=usb
|
E: SUBSYSTEM=usb
|
||||||
E: ID_VENDOR=Linux_6.2.0-35-generic_xhci-hcd
|
E: ID_VENDOR=Linux_6.5.0-18-generic_xhci-hcd
|
||||||
E: ID_VENDOR_ENC=Linux\x206.2.0-35-generic\x20xhci-hcd
|
E: ID_VENDOR_ENC=Linux\x206.5.0-18-generic\x20xhci-hcd
|
||||||
E: ID_VENDOR_ID=1d6b
|
E: ID_VENDOR_ID=1d6b
|
||||||
E: ID_MODEL=xHCI_Host_Controller
|
E: ID_MODEL=xHCI_Host_Controller
|
||||||
E: ID_MODEL_ENC=xHCI\x20Host\x20Controller
|
E: ID_MODEL_ENC=xHCI\x20Host\x20Controller
|
||||||
E: ID_MODEL_ID=0002
|
E: ID_MODEL_ID=0002
|
||||||
E: ID_REVISION=0602
|
E: ID_REVISION=0605
|
||||||
E: ID_SERIAL=Linux_6.2.0-35-generic_xhci-hcd_xHCI_Host_Controller_0000:00:14.0
|
E: ID_SERIAL=Linux_6.5.0-18-generic_xhci-hcd_xHCI_Host_Controller_0000:00:14.0
|
||||||
E: ID_SERIAL_SHORT=0000:00:14.0
|
E: ID_SERIAL_SHORT=0000:00:14.0
|
||||||
E: ID_BUS=usb
|
E: ID_BUS=usb
|
||||||
E: ID_USB_INTERFACES=:090000:
|
E: ID_USB_INTERFACES=:090000:
|
||||||
@@ -130,11 +130,11 @@ A: bMaxPacketSize0=64\n
|
|||||||
A: bMaxPower=0mA\n
|
A: bMaxPower=0mA\n
|
||||||
A: bNumConfigurations=1\n
|
A: bNumConfigurations=1\n
|
||||||
A: bNumInterfaces= 1\n
|
A: bNumInterfaces= 1\n
|
||||||
A: bcdDevice=0602\n
|
A: bcdDevice=0605\n
|
||||||
A: bmAttributes=e0\n
|
A: bmAttributes=e0\n
|
||||||
A: busnum=1\n
|
A: busnum=1\n
|
||||||
A: configuration=
|
A: configuration=
|
||||||
H: descriptors=12010002090001406B1D020002060302010109021900010100E0000904000001090000000705810304000C
|
H: descriptors=12010002090001406B1D020005060302010109021900010100E0000904000001090000000705810304000C
|
||||||
A: dev=189:0\n
|
A: dev=189:0\n
|
||||||
A: devnum=1\n
|
A: devnum=1\n
|
||||||
A: devpath=0\n
|
A: devpath=0\n
|
||||||
@@ -144,17 +144,17 @@ A: idProduct=0002\n
|
|||||||
A: idVendor=1d6b\n
|
A: idVendor=1d6b\n
|
||||||
A: interface_authorized_default=1\n
|
A: interface_authorized_default=1\n
|
||||||
A: ltm_capable=no\n
|
A: ltm_capable=no\n
|
||||||
A: manufacturer=Linux 6.2.0-35-generic xhci-hcd\n
|
A: manufacturer=Linux 6.5.0-18-generic xhci-hcd\n
|
||||||
A: maxchild=16\n
|
A: maxchild=16\n
|
||||||
A: power/active_duration=264747968\n
|
A: power/active_duration=351477916\n
|
||||||
A: power/async=enabled\n
|
A: power/async=enabled\n
|
||||||
A: power/autosuspend=0\n
|
A: power/autosuspend=0\n
|
||||||
A: power/autosuspend_delay_ms=0\n
|
A: power/autosuspend_delay_ms=0\n
|
||||||
A: power/connected_duration=264747968\n
|
A: power/connected_duration=351477916\n
|
||||||
A: power/control=auto\n
|
A: power/control=auto\n
|
||||||
A: power/level=auto\n
|
A: power/level=auto\n
|
||||||
A: power/runtime_active_kids=3\n
|
A: power/runtime_active_kids=3\n
|
||||||
A: power/runtime_active_time=264747968\n
|
A: power/runtime_active_time=351477912\n
|
||||||
A: power/runtime_enabled=enabled\n
|
A: power/runtime_enabled=enabled\n
|
||||||
A: power/runtime_status=active\n
|
A: power/runtime_status=active\n
|
||||||
A: power/runtime_suspended_time=0\n
|
A: power/runtime_suspended_time=0\n
|
||||||
@@ -175,7 +175,7 @@ A: rx_lanes=1\n
|
|||||||
A: serial=0000:00:14.0\n
|
A: serial=0000:00:14.0\n
|
||||||
A: speed=480\n
|
A: speed=480\n
|
||||||
A: tx_lanes=1\n
|
A: tx_lanes=1\n
|
||||||
A: urbnum=3177\n
|
A: urbnum=2135\n
|
||||||
A: version= 2.00\n
|
A: version= 2.00\n
|
||||||
|
|
||||||
P: /devices/pci0000:00/0000:00:14.0
|
P: /devices/pci0000:00/0000:00:14.0
|
||||||
@@ -194,10 +194,14 @@ E: ID_MODEL_FROM_DATABASE=Cannon Lake PCH USB 3.1 xHCI Host Controller
|
|||||||
A: ari_enabled=0\n
|
A: ari_enabled=0\n
|
||||||
A: broken_parity_status=0\n
|
A: broken_parity_status=0\n
|
||||||
A: class=0x0c0330\n
|
A: class=0x0c0330\n
|
||||||
H: config=86806DA3060590021030030C00008000040030D200000000000000000000000000000000000000000000000028105C08000000007000000000000000FF010000FD0134808FC6FF8300000000000000007F6DDC0F000000005919041B00000000316000000000000000000000000000000180C2C108000000000000000000000005908700D802E0FE0000000000000000090014F01000400100000000C10A080000080E00001800008F40020000010000030000000C00000000000000C000000000000000000100003000000000000000030000000C0000000000000000000000000000000000000000000000000000000000000000000000B50F120112000000
|
H: config=86806DA3060590021030030C00008000040030D200000000000000000000000000000000000000000000000028105C08000000007000000000000000FF010000FD0134808FC6FF8300000000000000007F6DDC0F000000004505531F00000000316000000000000000000000000000000180C2C108000000000000000000000005908700D802E0FE0000000000000000090014F01000400100000000C10A080000080E00001800008F40020000010000030000000C00000000000000C000000000000000000100003000000000000000030000000C0000000000000000000000000000000000000000000000000000000000000000000000B50F120112000000
|
||||||
A: consistent_dma_mask_bits=64\n
|
A: consistent_dma_mask_bits=64\n
|
||||||
A: d3cold_allowed=1\n
|
A: d3cold_allowed=1\n
|
||||||
A: dbc=disabled\n
|
A: dbc=disabled\n
|
||||||
|
A: dbc_bInterfaceProtocol=01\n
|
||||||
|
A: dbc_bcdDevice=0010\n
|
||||||
|
A: dbc_idProduct=0010\n
|
||||||
|
A: dbc_idVendor=1d6b\n
|
||||||
A: device=0xa36d\n
|
A: device=0xa36d\n
|
||||||
A: dma_mask_bits=64\n
|
A: dma_mask_bits=64\n
|
||||||
L: driver=../../../bus/pci/drivers/xhci_hcd
|
L: driver=../../../bus/pci/drivers/xhci_hcd
|
||||||
@@ -205,19 +209,19 @@ A: driver_override=(null)\n
|
|||||||
A: enable=1\n
|
A: enable=1\n
|
||||||
L: firmware_node=../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:4b
|
L: firmware_node=../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:4b
|
||||||
A: index=4\n
|
A: index=4\n
|
||||||
A: irq=125\n
|
A: irq=126\n
|
||||||
A: label=Onboard - Other\n
|
A: label=Onboard - Other\n
|
||||||
A: local_cpulist=0-3\n
|
A: local_cpulist=0-3\n
|
||||||
A: local_cpus=f\n
|
A: local_cpus=f\n
|
||||||
A: modalias=pci:v00008086d0000A36Dsv00001028sd0000085Cbc0Csc03i30\n
|
A: modalias=pci:v00008086d0000A36Dsv00001028sd0000085Cbc0Csc03i30\n
|
||||||
A: msi_bus=1\n
|
A: msi_bus=1\n
|
||||||
A: msi_irqs/125=msi\n
|
A: msi_irqs/126=msi\n
|
||||||
A: numa_node=-1\n
|
A: numa_node=-1\n
|
||||||
A: pools=poolinfo - 0.1\nbuffer-2048 0 0 2048 0\nbuffer-512 0 0 512 0\nbuffer-128 0 0 128 0\nbuffer-32 0 0 32 0\nxHCI 1KB stream ctx arrays 0 0 1024 0\nxHCI 256 byte stream ctx arrays 0 0 256 0\nxHCI input/output contexts 6 7 2112 7\nxHCI ring segments 24 24 4096 24\nbuffer-2048 0 0 2048 0\nbuffer-512 0 0 512 0\nbuffer-128 12 32 128 1\nbuffer-32 0 0 32 0\n
|
A: pools=poolinfo - 0.1\nbuffer-2048 0 0 2048 0\nbuffer-512 0 0 512 0\nbuffer-128 0 0 128 0\nbuffer-32 0 0 32 0\nxHCI 1KB stream ctx arrays 0 0 1024 0\nxHCI 256 byte stream ctx arrays 0 0 256 0\nxHCI input/output contexts 6 7 2112 7\nxHCI ring segments 24 24 4096 24\nbuffer-2048 0 0 2048 0\nbuffer-512 0 0 512 0\nbuffer-128 12 32 128 1\nbuffer-32 0 0 32 0\n
|
||||||
A: power/async=enabled\n
|
A: power/async=enabled\n
|
||||||
A: power/control=on\n
|
A: power/control=on\n
|
||||||
A: power/runtime_active_kids=1\n
|
A: power/runtime_active_kids=1\n
|
||||||
A: power/runtime_active_time=264748677\n
|
A: power/runtime_active_time=351478612\n
|
||||||
A: power/runtime_enabled=forbidden\n
|
A: power/runtime_enabled=forbidden\n
|
||||||
A: power/runtime_status=active\n
|
A: power/runtime_status=active\n
|
||||||
A: power/runtime_suspended_time=0\n
|
A: power/runtime_suspended_time=0\n
|
||||||
|
|||||||
@@ -1,28 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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 ();
|
|
||||||
}
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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,11 +18,7 @@
|
|||||||
* 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"
|
||||||
|
|||||||
@@ -1,124 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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 ();
|
|
||||||
}
|
|
||||||
@@ -1,249 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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 ();
|
|
||||||
}
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user