mirror of
https://gitlab.freedesktop.org/libfprint/libfprint.git
synced 2026-06-11 10:34:18 +00:00
Merge tag 'v1.90.5' into tod
Tag 1.90.5 Git-EVTag-v0-SHA512: 05650e2a6cf2290542936271b140e79015f56e35fbffc4677e37bf30963b2a38b49eb699db80cee6677ff348ea9e8548514a9f1e06a767269e44d7fac3334c45
This commit is contained in:
@@ -1,53 +0,0 @@
|
||||
To create a new umockdev test, you should:
|
||||
|
||||
1. Decide on what to test, the easiest case is just using the existing
|
||||
capture test case.
|
||||
2. Find the USB device you are testing with lsusb, e.g.:
|
||||
Bus 001 Device 005: ID 138a:0090 Validity Sensors, Inc. VFS7500 Touch Fingerprint Sensor
|
||||
This means we need to record USB device /dev/bus/usb/001/005
|
||||
3. Run "umockdev-record /dev/bus/usb/001/005 >device"
|
||||
This records the information about device, it should be placed into test/DRIVER/device
|
||||
4. Run the test, for a capture test this would be:
|
||||
umockdev-record -i /dev/bus/usb/001/005=capture.ioctl -- ./capture.py capture.png
|
||||
This will create a capture.ioctl and capture.png file.
|
||||
Please set the FP_DEVICE_EMULATION=1 environment variable. You may need
|
||||
to adjust the driver to adapt to the emulated environment (mainly if it
|
||||
uses random numbers, see synaptics.c for an example).
|
||||
5. Place all files into the driver subdirectory test/DRIVER,
|
||||
i.e. device, capture.ioctl, capture.png
|
||||
6. Add glue to meson.build
|
||||
7. Test whether everything works as expected
|
||||
|
||||
Please note, there is no need to use a real finger print in this case. If
|
||||
you would like to avoid submitting your own fingerprint then please just
|
||||
use e.g. the side of your finger, arm, or anything else that will produce
|
||||
an image with the device.
|
||||
|
||||
|
||||
Note that umockdev-record groups URBs aggressively. In most cases, manual
|
||||
intervention is unfortunately required. In most cases, drivers do a chain
|
||||
of commands like e.g. A then B each with a different reply. Umockdev will
|
||||
create a file like:
|
||||
|
||||
A
|
||||
reply 1
|
||||
reply 2
|
||||
B
|
||||
reply 1
|
||||
reply 2
|
||||
|
||||
which then needs to be re-ordered to be:
|
||||
|
||||
A
|
||||
reply 1
|
||||
B
|
||||
reply 1
|
||||
A
|
||||
reply 2
|
||||
B
|
||||
reply 2
|
||||
|
||||
Other changes may be needed to get everything working. For example the elan
|
||||
driver relies on a timeout that is not reported correctly. In this case the
|
||||
driver works around it by interpreting the protocol error differently in
|
||||
the virtual environment.
|
||||
File diff suppressed because one or more lines are too long
Binary file not shown.
|
After Width: | Height: | Size: 66 KiB |
@@ -0,0 +1,561 @@
|
||||
P: /devices/pci0000:00/0000:00:1c.0/0000:01:00.0/0000:02:02.0/0000:39:00.0/usb3/3-1/3-1.1/3-1.1.3
|
||||
N: bus/usb/003/004=12011001FFFFFF08FF0831570000000100010902200001010080320904000002FFFFFF000705810240000007050202080000
|
||||
E: BUSNUM=003
|
||||
E: DEVNAME=/dev/bus/usb/003/004
|
||||
E: DEVNUM=004
|
||||
E: DEVTYPE=usb_device
|
||||
E: DRIVER=usb
|
||||
E: ID_BUS=usb
|
||||
E: ID_MODEL=Fingerprint_Sensor
|
||||
E: ID_MODEL_ENC=Fingerprint\x20Sensor
|
||||
E: ID_MODEL_FROM_DATABASE=AES3500 TruePrint Sensor
|
||||
E: ID_MODEL_ID=5731
|
||||
E: ID_REVISION=0000
|
||||
E: ID_SERIAL=08ff_Fingerprint_Sensor
|
||||
E: ID_USB_INTERFACES=:ffffff:
|
||||
E: ID_VENDOR=08ff
|
||||
E: ID_VENDOR_ENC=08ff
|
||||
E: ID_VENDOR_FROM_DATABASE=AuthenTec, Inc.
|
||||
E: ID_VENDOR_ID=08ff
|
||||
E: LIBFPRINT_DRIVER=AuthenTec AES3500
|
||||
E: MAJOR=189
|
||||
E: MINOR=259
|
||||
E: PRODUCT=8ff/5731/0
|
||||
E: SUBSYSTEM=usb
|
||||
E: TYPE=255/255/255
|
||||
A: authorized=1
|
||||
A: avoid_reset_quirk=0
|
||||
A: bConfigurationValue=1
|
||||
A: bDeviceClass=ff
|
||||
A: bDeviceProtocol=ff
|
||||
A: bDeviceSubClass=ff
|
||||
A: bMaxPacketSize0=8
|
||||
A: bMaxPower=100mA
|
||||
A: bNumConfigurations=1
|
||||
A: bNumInterfaces= 1
|
||||
A: bcdDevice=0000
|
||||
A: bmAttributes=80
|
||||
A: busnum=3
|
||||
A: configuration=
|
||||
H: descriptors=12011001FFFFFF08FF0831570000000100010902200001010080320904000002FFFFFF000705810240000007050202080000
|
||||
A: dev=189:259
|
||||
A: devnum=4
|
||||
A: devpath=1.1.3
|
||||
L: driver=../../../../../../../../../../bus/usb/drivers/usb
|
||||
A: idProduct=5731
|
||||
A: idVendor=08ff
|
||||
A: ltm_capable=no
|
||||
A: maxchild=0
|
||||
L: port=../3-1.1:1.0/3-1.1-port3
|
||||
A: power/active_duration=3601332
|
||||
A: power/async=enabled
|
||||
A: power/autosuspend=2
|
||||
A: power/autosuspend_delay_ms=2000
|
||||
A: power/connected_duration=3601332
|
||||
A: power/control=auto
|
||||
A: power/level=auto
|
||||
A: power/persist=1
|
||||
A: power/runtime_active_kids=0
|
||||
A: power/runtime_active_time=3601128
|
||||
A: power/runtime_enabled=enabled
|
||||
A: power/runtime_status=active
|
||||
A: power/runtime_suspended_time=0
|
||||
A: power/runtime_usage=0
|
||||
A: product=Fingerprint Sensor
|
||||
A: quirks=0x0
|
||||
A: removable=removable
|
||||
A: speed=12
|
||||
A: urbnum=82
|
||||
A: version= 1.10
|
||||
|
||||
P: /devices/pci0000:00/0000:00:1c.0/0000:01:00.0/0000:02:02.0/0000:39:00.0/usb3/3-1/3-1.1
|
||||
N: bus/usb/003/003=12011002090001403022060000910102000109021900010100E0000904000001090000000705810301000C
|
||||
E: BUSNUM=003
|
||||
E: DEVNAME=/dev/bus/usb/003/003
|
||||
E: DEVNUM=003
|
||||
E: DEVTYPE=usb_device
|
||||
E: DRIVER=usb
|
||||
E: ID_BUS=usb
|
||||
E: ID_FOR_SEAT=usb-pci-0000_39_00_0-usb-0_1_1
|
||||
E: ID_MODEL=USB2.0_Hub
|
||||
E: ID_MODEL_ENC=USB2.0\x20Hub\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
|
||||
E: ID_MODEL_ID=0006
|
||||
E: ID_PATH=pci-0000:39:00.0-usb-0:1.1
|
||||
E: ID_PATH_TAG=pci-0000_39_00_0-usb-0_1_1
|
||||
E: ID_REVISION=9100
|
||||
E: ID_SERIAL=VIA_Labs__Inc._USB2.0_Hub
|
||||
E: ID_USB_INTERFACES=:090000:
|
||||
E: ID_VENDOR=VIA_Labs__Inc.
|
||||
E: ID_VENDOR_ENC=VIA\x20Labs\x2c\x20Inc.\x20\x20\x20\x20\x20\x20\x20\x20\x20
|
||||
E: ID_VENDOR_ID=2230
|
||||
E: MAJOR=189
|
||||
E: MINOR=258
|
||||
E: PRODUCT=2230/6/9100
|
||||
E: SUBSYSTEM=usb
|
||||
E: TAGS=:seat:
|
||||
E: TYPE=9/0/1
|
||||
A: authorized=1
|
||||
A: avoid_reset_quirk=0
|
||||
A: bConfigurationValue=1
|
||||
A: bDeviceClass=09
|
||||
A: bDeviceProtocol=01
|
||||
A: bDeviceSubClass=00
|
||||
A: bMaxPacketSize0=64
|
||||
A: bMaxPower=0mA
|
||||
A: bNumConfigurations=1
|
||||
A: bNumInterfaces= 1
|
||||
A: bcdDevice=9100
|
||||
A: bmAttributes=e0
|
||||
A: busnum=3
|
||||
A: configuration=
|
||||
H: descriptors=12011002090001403022060000910102000109021900010100E0000904000001090000000705810301000C
|
||||
A: dev=189:258
|
||||
A: devnum=3
|
||||
A: devpath=1.1
|
||||
L: driver=../../../../../../../../../bus/usb/drivers/usb
|
||||
A: idProduct=0006
|
||||
A: idVendor=2230
|
||||
A: ltm_capable=no
|
||||
A: manufacturer=VIA Labs, Inc.
|
||||
A: maxchild=4
|
||||
L: port=../3-1:1.0/3-1-port1
|
||||
A: power/active_duration=3601776
|
||||
A: power/async=enabled
|
||||
A: power/autosuspend=0
|
||||
A: power/autosuspend_delay_ms=0
|
||||
A: power/connected_duration=3601776
|
||||
A: power/control=auto
|
||||
A: power/level=auto
|
||||
A: power/runtime_active_kids=2
|
||||
A: power/runtime_active_time=3601572
|
||||
A: power/runtime_enabled=enabled
|
||||
A: power/runtime_status=active
|
||||
A: power/runtime_suspended_time=0
|
||||
A: power/runtime_usage=0
|
||||
A: power/wakeup=disabled
|
||||
A: power/wakeup_abort_count=
|
||||
A: power/wakeup_active=
|
||||
A: power/wakeup_active_count=
|
||||
A: power/wakeup_count=
|
||||
A: power/wakeup_expire_count=
|
||||
A: power/wakeup_last_time_ms=
|
||||
A: power/wakeup_max_time_ms=
|
||||
A: power/wakeup_total_time_ms=
|
||||
A: product=USB2.0 Hub
|
||||
A: quirks=0x0
|
||||
A: removable=fixed
|
||||
A: speed=480
|
||||
A: urbnum=40
|
||||
A: version= 2.10
|
||||
|
||||
P: /devices/pci0000:00/0000:00:1c.0/0000:01:00.0/0000:02:02.0/0000:39:00.0/usb3/3-1
|
||||
N: bus/usb/003/002=12011002090001403022060000910102000109021900010100E0000904000001090000000705810301000C
|
||||
E: BUSNUM=003
|
||||
E: DEVNAME=/dev/bus/usb/003/002
|
||||
E: DEVNUM=002
|
||||
E: DEVTYPE=usb_device
|
||||
E: DRIVER=usb
|
||||
E: ID_BUS=usb
|
||||
E: ID_FOR_SEAT=usb-pci-0000_39_00_0-usb-0_1
|
||||
E: ID_MODEL=USB2.0_Hub
|
||||
E: ID_MODEL_ENC=USB2.0\x20Hub\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
|
||||
E: ID_MODEL_ID=0006
|
||||
E: ID_PATH=pci-0000:39:00.0-usb-0:1
|
||||
E: ID_PATH_TAG=pci-0000_39_00_0-usb-0_1
|
||||
E: ID_REVISION=9100
|
||||
E: ID_SERIAL=VIA_Labs__Inc._USB2.0_Hub
|
||||
E: ID_USB_INTERFACES=:090000:
|
||||
E: ID_VENDOR=VIA_Labs__Inc.
|
||||
E: ID_VENDOR_ENC=VIA\x20Labs\x2c\x20Inc.\x20\x20\x20\x20\x20\x20\x20\x20\x20
|
||||
E: ID_VENDOR_ID=2230
|
||||
E: MAJOR=189
|
||||
E: MINOR=257
|
||||
E: PRODUCT=2230/6/9100
|
||||
E: SUBSYSTEM=usb
|
||||
E: TAGS=:seat:
|
||||
E: TYPE=9/0/1
|
||||
A: authorized=1
|
||||
A: avoid_reset_quirk=0
|
||||
A: bConfigurationValue=1
|
||||
A: bDeviceClass=09
|
||||
A: bDeviceProtocol=01
|
||||
A: bDeviceSubClass=00
|
||||
A: bMaxPacketSize0=64
|
||||
A: bMaxPower=0mA
|
||||
A: bNumConfigurations=1
|
||||
A: bNumInterfaces= 1
|
||||
A: bcdDevice=9100
|
||||
A: bmAttributes=e0
|
||||
A: busnum=3
|
||||
A: configuration=
|
||||
H: descriptors=12011002090001403022060000910102000109021900010100E0000904000001090000000705810301000C
|
||||
A: dev=189:257
|
||||
A: devnum=2
|
||||
A: devpath=1
|
||||
L: driver=../../../../../../../../bus/usb/drivers/usb
|
||||
A: idProduct=0006
|
||||
A: idVendor=2230
|
||||
A: ltm_capable=no
|
||||
A: manufacturer=VIA Labs, Inc.
|
||||
A: maxchild=4
|
||||
L: port=../3-0:1.0/usb3-port1
|
||||
A: power/active_duration=3602292
|
||||
A: power/async=enabled
|
||||
A: power/autosuspend=0
|
||||
A: power/autosuspend_delay_ms=0
|
||||
A: power/connected_duration=3602292
|
||||
A: power/control=auto
|
||||
A: power/level=auto
|
||||
A: power/runtime_active_kids=1
|
||||
A: power/runtime_active_time=3602016
|
||||
A: power/runtime_enabled=enabled
|
||||
A: power/runtime_status=active
|
||||
A: power/runtime_suspended_time=0
|
||||
A: power/runtime_usage=0
|
||||
A: power/wakeup=disabled
|
||||
A: power/wakeup_abort_count=
|
||||
A: power/wakeup_active=
|
||||
A: power/wakeup_active_count=
|
||||
A: power/wakeup_count=
|
||||
A: power/wakeup_expire_count=
|
||||
A: power/wakeup_last_time_ms=
|
||||
A: power/wakeup_max_time_ms=
|
||||
A: power/wakeup_total_time_ms=
|
||||
A: product=USB2.0 Hub
|
||||
A: quirks=0x0
|
||||
A: removable=removable
|
||||
A: speed=480
|
||||
A: urbnum=31
|
||||
A: version= 2.10
|
||||
|
||||
P: /devices/pci0000:00/0000:00:1c.0/0000:01:00.0/0000:02:02.0/0000:39:00.0/usb3
|
||||
N: bus/usb/003/001=12010002090001406B1D020015040302010109021900010100E0000904000001090000000705810304000C
|
||||
E: BUSNUM=003
|
||||
E: DEVNAME=/dev/bus/usb/003/001
|
||||
E: DEVNUM=001
|
||||
E: DEVTYPE=usb_device
|
||||
E: DRIVER=usb
|
||||
E: ID_BUS=usb
|
||||
E: ID_FOR_SEAT=usb-pci-0000_39_00_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:39:00.0
|
||||
E: ID_PATH_TAG=pci-0000_39_00_0
|
||||
E: ID_REVISION=0415
|
||||
E: ID_SERIAL=Linux_4.15.0-117-generic_xhci-hcd_xHCI_Host_Controller_0000:39:00.0
|
||||
E: ID_SERIAL_SHORT=0000:39:00.0
|
||||
E: ID_USB_INTERFACES=:090000:
|
||||
E: ID_VENDOR=Linux_4.15.0-117-generic_xhci-hcd
|
||||
E: ID_VENDOR_ENC=Linux\x204.15.0-117-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/415
|
||||
E: SUBSYSTEM=usb
|
||||
E: TAGS=:seat:
|
||||
E: TYPE=9/0/1
|
||||
A: authorized=1
|
||||
A: authorized_default=1
|
||||
A: avoid_reset_quirk=0
|
||||
A: bConfigurationValue=1
|
||||
A: bDeviceClass=09
|
||||
A: bDeviceProtocol=01
|
||||
A: bDeviceSubClass=00
|
||||
A: bMaxPacketSize0=64
|
||||
A: bMaxPower=0mA
|
||||
A: bNumConfigurations=1
|
||||
A: bNumInterfaces= 1
|
||||
A: bcdDevice=0415
|
||||
A: bmAttributes=e0
|
||||
A: busnum=3
|
||||
A: configuration=
|
||||
H: descriptors=12010002090001406B1D020015040302010109021900010100E0000904000001090000000705810304000C
|
||||
A: dev=189:256
|
||||
A: devnum=1
|
||||
A: devpath=0
|
||||
L: driver=../../../../../../../bus/usb/drivers/usb
|
||||
A: idProduct=0002
|
||||
A: idVendor=1d6b
|
||||
A: interface_authorized_default=1
|
||||
A: ltm_capable=no
|
||||
A: manufacturer=Linux 4.15.0-117-generic xhci-hcd
|
||||
A: maxchild=2
|
||||
A: power/active_duration=3602700
|
||||
A: power/async=enabled
|
||||
A: power/autosuspend=0
|
||||
A: power/autosuspend_delay_ms=0
|
||||
A: power/connected_duration=3602700
|
||||
A: power/control=auto
|
||||
A: power/level=auto
|
||||
A: power/runtime_active_kids=1
|
||||
A: power/runtime_active_time=3602700
|
||||
A: power/runtime_enabled=enabled
|
||||
A: power/runtime_status=active
|
||||
A: power/runtime_suspended_time=0
|
||||
A: power/runtime_usage=0
|
||||
A: power/wakeup=disabled
|
||||
A: power/wakeup_abort_count=
|
||||
A: power/wakeup_active=
|
||||
A: power/wakeup_active_count=
|
||||
A: power/wakeup_count=
|
||||
A: power/wakeup_expire_count=
|
||||
A: power/wakeup_last_time_ms=
|
||||
A: power/wakeup_max_time_ms=
|
||||
A: power/wakeup_total_time_ms=
|
||||
A: product=xHCI Host Controller
|
||||
A: quirks=0x0
|
||||
A: removable=unknown
|
||||
A: serial=0000:39:00.0
|
||||
A: speed=480
|
||||
A: urbnum=24
|
||||
A: version= 2.00
|
||||
|
||||
P: /devices/pci0000:00/0000:00:1c.0/0000:01:00.0/0000:02:02.0/0000:39:00.0
|
||||
E: DRIVER=xhci_hcd
|
||||
E: ID_MODEL_FROM_DATABASE=DSL6340 USB 3.1 Controller [Alpine Ridge]
|
||||
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:v00008086d000015B5sv00002222sd00001111bc0Csc03i30
|
||||
E: PCI_CLASS=C0330
|
||||
E: PCI_ID=8086:15B5
|
||||
E: PCI_SLOT_NAME=0000:39:00.0
|
||||
E: PCI_SUBSYS_ID=2222:1111
|
||||
E: SUBSYSTEM=pci
|
||||
A: broken_parity_status=0
|
||||
A: class=0x0c0330
|
||||
H: config=8680B515060410000030030C200000000000F0D9000000000000000000000000000000000000000000000000222211110000000080000000000000000B010000
|
||||
A: consistent_dma_mask_bits=64
|
||||
A: current_link_speed=2.5 GT/s
|
||||
A: current_link_width=4
|
||||
A: d3cold_allowed=1
|
||||
A: dbc=disabled
|
||||
A: device=0x15b5
|
||||
A: dma_mask_bits=64
|
||||
L: driver=../../../../../../bus/pci/drivers/xhci_hcd
|
||||
A: driver_override=(null)
|
||||
A: enable=1
|
||||
L: iommu=../../../../../virtual/iommu/dmar1
|
||||
L: iommu_group=../../../../../../kernel/iommu_groups/17
|
||||
A: irq=141
|
||||
A: local_cpulist=0-3
|
||||
A: local_cpus=f
|
||||
A: max_link_speed=2.5 GT/s
|
||||
A: max_link_width=4
|
||||
A: modalias=pci:v00008086d000015B5sv00002222sd00001111bc0Csc03i30
|
||||
A: msi_bus=1
|
||||
A: msi_irqs/141=msi
|
||||
A: numa_node=-1
|
||||
A: pools=poolinfo - 0.1\nbuffer-2048 3 6 2048 3\nbuffer-512 12 16 512 2\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 15 15 2112 15\nxHCI ring segments 44 46 4096 46\nbuffer-2048 0 0 2048 0\nbuffer-512 0 0 512 0\nbuffer-128 3 32 128 1\nbuffer-32 0 0 32 0
|
||||
A: power/async=enabled
|
||||
A: power/control=on
|
||||
A: power/runtime_active_kids=2
|
||||
A: power/runtime_active_time=3602712
|
||||
A: power/runtime_enabled=forbidden
|
||||
A: power/runtime_status=active
|
||||
A: power/runtime_suspended_time=0
|
||||
A: power/runtime_usage=1
|
||||
A: power/wakeup=enabled
|
||||
A: power/wakeup_abort_count=0
|
||||
A: power/wakeup_active=0
|
||||
A: power/wakeup_active_count=0
|
||||
A: power/wakeup_count=0
|
||||
A: power/wakeup_expire_count=0
|
||||
A: power/wakeup_last_time_ms=224549241
|
||||
A: power/wakeup_max_time_ms=0
|
||||
A: power/wakeup_total_time_ms=0
|
||||
A: resource=0x00000000d9f00000 0x00000000d9f0ffff 0x0000000000040200\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
|
||||
A: revision=0x00
|
||||
A: subsystem_device=0x1111
|
||||
A: subsystem_vendor=0x2222
|
||||
A: vendor=0x8086
|
||||
|
||||
P: /devices/pci0000:00/0000:00:1c.0/0000:01:00.0/0000:02:02.0
|
||||
E: DRIVER=pcieport
|
||||
E: ID_MODEL_FROM_DATABASE=DSL6340 Thunderbolt 3 Bridge [Alpine Ridge 2C 2015]
|
||||
E: ID_PCI_CLASS_FROM_DATABASE=Bridge
|
||||
E: ID_PCI_INTERFACE_FROM_DATABASE=Normal decode
|
||||
E: ID_PCI_SUBCLASS_FROM_DATABASE=PCI bridge
|
||||
E: ID_VENDOR_FROM_DATABASE=Intel Corporation
|
||||
E: MODALIAS=pci:v00008086d00001576sv00002222sd00001111bc06sc04i00
|
||||
E: PCI_CLASS=60400
|
||||
E: PCI_ID=8086:1576
|
||||
E: PCI_SLOT_NAME=0000:02:02.0
|
||||
E: PCI_SUBSYS_ID=2222:1111
|
||||
E: SUBSYSTEM=pci
|
||||
A: broken_parity_status=0
|
||||
A: class=0x060400
|
||||
H: config=86807615060410000000040620000100000000000000000002393900F1010000F0D9F0D9F1FF010000000000000000000000000080000000000000000B011000
|
||||
A: consistent_dma_mask_bits=32
|
||||
A: current_link_speed=2.5 GT/s
|
||||
A: current_link_width=4
|
||||
A: d3cold_allowed=1
|
||||
A: device=0x1576
|
||||
A: dma_mask_bits=32
|
||||
L: driver=../../../../../bus/pci/drivers/pcieport
|
||||
A: driver_override=(null)
|
||||
A: enable=1
|
||||
L: iommu=../../../../virtual/iommu/dmar1
|
||||
L: iommu_group=../../../../../kernel/iommu_groups/17
|
||||
A: irq=140
|
||||
A: local_cpulist=0-3
|
||||
A: local_cpus=f
|
||||
A: max_link_speed=2.5 GT/s
|
||||
A: max_link_width=4
|
||||
A: modalias=pci:v00008086d00001576sv00002222sd00001111bc06sc04i00
|
||||
A: msi_bus=1
|
||||
A: msi_irqs/140=msi
|
||||
A: numa_node=-1
|
||||
A: power/async=enabled
|
||||
A: power/clk_ctl=0
|
||||
A: power/control=on
|
||||
A: power/link_state=0
|
||||
A: power/runtime_active_kids=1
|
||||
A: power/runtime_active_time=3602728
|
||||
A: power/runtime_enabled=forbidden
|
||||
A: power/runtime_status=active
|
||||
A: power/runtime_suspended_time=0
|
||||
A: power/runtime_usage=2
|
||||
A: power/wakeup=disabled
|
||||
A: power/wakeup_abort_count=
|
||||
A: power/wakeup_active=
|
||||
A: power/wakeup_active_count=
|
||||
A: power/wakeup_count=
|
||||
A: power/wakeup_expire_count=
|
||||
A: power/wakeup_last_time_ms=
|
||||
A: power/wakeup_max_time_ms=
|
||||
A: power/wakeup_total_time_ms=
|
||||
A: resource=0x0000000000000000 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\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x00000000d9f00000 0x00000000d9ffffff 0x0000000000000200\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000
|
||||
A: revision=0x00
|
||||
A: secondary_bus_number=57
|
||||
A: subordinate_bus_number=57
|
||||
A: subsystem_device=0x1111
|
||||
A: subsystem_vendor=0x2222
|
||||
A: vendor=0x8086
|
||||
|
||||
P: /devices/pci0000:00/0000:00:1c.0/0000:01:00.0
|
||||
E: DRIVER=pcieport
|
||||
E: ID_MODEL_FROM_DATABASE=DSL6340 Thunderbolt 3 Bridge [Alpine Ridge 2C 2015]
|
||||
E: ID_PCI_CLASS_FROM_DATABASE=Bridge
|
||||
E: ID_PCI_INTERFACE_FROM_DATABASE=Normal decode
|
||||
E: ID_PCI_SUBCLASS_FROM_DATABASE=PCI bridge
|
||||
E: ID_VENDOR_FROM_DATABASE=Intel Corporation
|
||||
E: MODALIAS=pci:v00008086d00001576sv00002222sd00001111bc06sc04i00
|
||||
E: PCI_CLASS=60400
|
||||
E: PCI_ID=8086:1576
|
||||
E: PCI_SLOT_NAME=0000:01:00.0
|
||||
E: PCI_SUBSYS_ID=2222:1111
|
||||
E: SUBSYSTEM=pci
|
||||
A: broken_parity_status=0
|
||||
A: class=0x060400
|
||||
H: config=86807615060410000000040620000100000000000000000001023900F101000000C400DA01A0F1C100000000000000000000000080000000000000000B011000
|
||||
A: consistent_dma_mask_bits=32
|
||||
A: current_link_speed=8 GT/s
|
||||
A: current_link_width=2
|
||||
A: d3cold_allowed=1
|
||||
A: device=0x1576
|
||||
A: dma_mask_bits=32
|
||||
L: driver=../../../../bus/pci/drivers/pcieport
|
||||
A: driver_override=(null)
|
||||
A: enable=1
|
||||
L: iommu=../../../virtual/iommu/dmar1
|
||||
L: iommu_group=../../../../kernel/iommu_groups/14
|
||||
A: irq=137
|
||||
A: local_cpulist=0-3
|
||||
A: local_cpus=f
|
||||
A: max_link_speed=8 GT/s
|
||||
A: max_link_width=4
|
||||
A: modalias=pci:v00008086d00001576sv00002222sd00001111bc06sc04i00
|
||||
A: msi_bus=1
|
||||
A: msi_irqs/137=msi
|
||||
A: numa_node=-1
|
||||
A: power/async=enabled
|
||||
A: power/control=on
|
||||
A: power/runtime_active_kids=2
|
||||
A: power/runtime_active_time=3602740
|
||||
A: power/runtime_enabled=forbidden
|
||||
A: power/runtime_status=active
|
||||
A: power/runtime_suspended_time=0
|
||||
A: power/runtime_usage=2
|
||||
A: power/wakeup=enabled
|
||||
A: power/wakeup_abort_count=0
|
||||
A: power/wakeup_active=0
|
||||
A: power/wakeup_active_count=0
|
||||
A: power/wakeup_count=0
|
||||
A: power/wakeup_expire_count=0
|
||||
A: power/wakeup_last_time_ms=224549237
|
||||
A: power/wakeup_max_time_ms=0
|
||||
A: power/wakeup_total_time_ms=0
|
||||
A: resource=0x0000000000000000 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\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x00000000c4000000 0x00000000da0fffff 0x0000000000000200\n0x00000000a0000000 0x00000000c1ffffff 0x0000000000102201\n0x0000000000000000 0x0000000000000000 0x0000000000000000
|
||||
A: revision=0x00
|
||||
A: secondary_bus_number=2
|
||||
A: subordinate_bus_number=57
|
||||
A: subsystem_device=0x1111
|
||||
A: subsystem_vendor=0x2222
|
||||
A: vendor=0x8086
|
||||
|
||||
P: /devices/pci0000:00/0000:00:1c.0
|
||||
E: DRIVER=pcieport
|
||||
E: ID_MODEL_FROM_DATABASE=Sunrise Point-LP PCI Express Root Port
|
||||
E: ID_PCI_CLASS_FROM_DATABASE=Bridge
|
||||
E: ID_PCI_INTERFACE_FROM_DATABASE=Normal decode
|
||||
E: ID_PCI_SUBCLASS_FROM_DATABASE=PCI bridge
|
||||
E: ID_VENDOR_FROM_DATABASE=Intel Corporation
|
||||
E: MODALIAS=pci:v00008086d00009D10sv00001028sd0000075Bbc06sc04i00
|
||||
E: PCI_CLASS=60400
|
||||
E: PCI_ID=8086:9D10
|
||||
E: PCI_SLOT_NAME=0000:00:1c.0
|
||||
E: PCI_SUBSYS_ID=1028:075B
|
||||
E: SUBSYSTEM=pci
|
||||
A: broken_parity_status=0
|
||||
A: class=0x060400
|
||||
H: config=8680109D07041000F1000406000081000000000000000000000139002020002000C400DA01A0F1C100000000000000000000000040000000000000000B011000
|
||||
A: consistent_dma_mask_bits=32
|
||||
A: current_link_speed=8 GT/s
|
||||
A: current_link_width=2
|
||||
A: d3cold_allowed=1
|
||||
A: device=0x9d10
|
||||
A: dma_mask_bits=32
|
||||
L: driver=../../../bus/pci/drivers/pcieport
|
||||
A: driver_override=(null)
|
||||
A: enable=1
|
||||
L: iommu=../../virtual/iommu/dmar1
|
||||
L: iommu_group=../../../kernel/iommu_groups/6
|
||||
A: irq=123
|
||||
A: local_cpulist=0-3
|
||||
A: local_cpus=f
|
||||
A: max_link_speed=8 GT/s
|
||||
A: max_link_width=2
|
||||
A: modalias=pci:v00008086d00009D10sv00001028sd0000075Bbc06sc04i00
|
||||
A: msi_bus=1
|
||||
A: msi_irqs/123=msi
|
||||
A: numa_node=-1
|
||||
A: power/async=enabled
|
||||
A: power/control=on
|
||||
A: power/runtime_active_kids=1
|
||||
A: power/runtime_active_time=228151860
|
||||
A: power/runtime_enabled=forbidden
|
||||
A: power/runtime_status=active
|
||||
A: power/runtime_suspended_time=0
|
||||
A: power/runtime_usage=2
|
||||
A: power/wakeup=disabled
|
||||
A: power/wakeup_abort_count=
|
||||
A: power/wakeup_active=
|
||||
A: power/wakeup_active_count=
|
||||
A: power/wakeup_count=
|
||||
A: power/wakeup_expire_count=
|
||||
A: power/wakeup_last_time_ms=
|
||||
A: power/wakeup_max_time_ms=
|
||||
A: power/wakeup_total_time_ms=
|
||||
A: resource=0x0000000000000000 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\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000002000 0x0000000000002fff 0x0000000000000100\n0x00000000c4000000 0x00000000da0fffff 0x0000000000000200\n0x00000000a0000000 0x00000000c1ffffff 0x0000000000102201\n0x0000000000000000 0x0000000000000000 0x0000000000000000
|
||||
A: revision=0xf1
|
||||
A: secondary_bus_number=1
|
||||
A: subordinate_bus_number=57
|
||||
A: subsystem_device=0x075b
|
||||
A: subsystem_vendor=0x1028
|
||||
A: vendor=0x8086
|
||||
|
||||
@@ -17,9 +17,11 @@ envs.set('FP_DRIVERS_WHITELIST', 'virtual_image')
|
||||
envs.set('NO_AT_BRIDGE', '1')
|
||||
|
||||
drivers_tests = [
|
||||
'aes3500',
|
||||
'elan',
|
||||
'synaptics',
|
||||
'vfs0050',
|
||||
'vfs301',
|
||||
'vfs5011',
|
||||
'goodixmoc',
|
||||
]
|
||||
|
||||
@@ -20,11 +20,14 @@ d.open_sync()
|
||||
template = FPrint.Print.new(d)
|
||||
|
||||
def enroll_progress(*args):
|
||||
assert d.get_finger_status() == FPrint.FingerStatusFlags.NEEDED
|
||||
print('enroll progress: ' + str(args))
|
||||
|
||||
# List, enroll, list, verify, delete, list
|
||||
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")
|
||||
@@ -33,7 +36,9 @@ print("listing done")
|
||||
assert len(stored) == 1
|
||||
assert stored[0].equal(p)
|
||||
print("verifying")
|
||||
assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
|
||||
verify_res, verify_print = d.verify_sync(p)
|
||||
assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
|
||||
print("verify done")
|
||||
assert verify_res == True
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
#include <libfprint/fprint.h>
|
||||
|
||||
#include "test-utils.h"
|
||||
#include "fpi-device.h"
|
||||
|
||||
static void
|
||||
test_context_new (void)
|
||||
@@ -92,6 +93,296 @@ test_context_enumerates_new_devices (void)
|
||||
fpt_teardown_virtual_device_environment ();
|
||||
}
|
||||
|
||||
#define DEV_REMOVED_CB 1
|
||||
#define CTX_DEVICE_REMOVED_CB 2
|
||||
|
||||
static void
|
||||
device_removed_cb (FpDevice *device, FptContext *tctx)
|
||||
{
|
||||
g_assert_nonnull (device);
|
||||
g_assert_true (device == tctx->device);
|
||||
|
||||
g_assert_null (tctx->user_data);
|
||||
tctx->user_data = GINT_TO_POINTER (DEV_REMOVED_CB);
|
||||
}
|
||||
|
||||
static void
|
||||
context_device_removed_cb (FpContext *ctx, FpDevice *device, FptContext *tctx)
|
||||
{
|
||||
g_assert_nonnull (device);
|
||||
g_assert_true (device == tctx->device);
|
||||
|
||||
/* "device-removed" on context is always after "removed" on device */
|
||||
g_assert_cmpint (GPOINTER_TO_INT (tctx->user_data), ==, DEV_REMOVED_CB);
|
||||
tctx->user_data = GINT_TO_POINTER (CTX_DEVICE_REMOVED_CB);
|
||||
}
|
||||
|
||||
static void
|
||||
test_context_remove_device_closed (void)
|
||||
{
|
||||
g_autoptr(FptContext) tctx = fpt_context_new_with_virtual_imgdev ();
|
||||
gboolean removed;
|
||||
|
||||
tctx->user_data = NULL;
|
||||
g_signal_connect (tctx->device, "removed", (GCallback) device_removed_cb, tctx);
|
||||
g_signal_connect (tctx->fp_context, "device-removed", (GCallback) context_device_removed_cb, tctx);
|
||||
|
||||
/* Triggering remove on closed device. */
|
||||
fpi_device_remove (tctx->device);
|
||||
|
||||
g_assert_nonnull (tctx->device);
|
||||
g_object_get (tctx->device, "removed", &removed, NULL);
|
||||
g_assert_true (removed);
|
||||
g_assert_cmpint (GPOINTER_TO_INT (tctx->user_data), ==, DEV_REMOVED_CB);
|
||||
|
||||
/* device-removed is dispatched from idle. */
|
||||
while (g_main_context_iteration (NULL, FALSE))
|
||||
{
|
||||
}
|
||||
|
||||
/* The device is now destroyed and device-removed was called. */
|
||||
g_assert_null (tctx->device);
|
||||
g_assert_cmpint (GPOINTER_TO_INT (tctx->user_data), ==, CTX_DEVICE_REMOVED_CB);
|
||||
|
||||
fpt_teardown_virtual_device_environment ();
|
||||
}
|
||||
|
||||
static void
|
||||
close_done_cb (GObject *device, GAsyncResult *res, gpointer user_data)
|
||||
{
|
||||
g_autoptr(FpPrint) print = NULL;
|
||||
GError **error = user_data;
|
||||
|
||||
g_assert_nonnull (error);
|
||||
g_assert_false (fp_device_close_finish (FP_DEVICE (device), res, error));
|
||||
g_assert_null (print);
|
||||
g_assert_nonnull (*error);
|
||||
}
|
||||
|
||||
static void
|
||||
test_context_remove_device_closing (void)
|
||||
{
|
||||
g_autoptr(FptContext) tctx = fpt_context_new_with_virtual_imgdev ();
|
||||
g_autoptr(GError) close_error = NULL;
|
||||
g_autoptr(GError) error = NULL;
|
||||
gboolean removed;
|
||||
|
||||
tctx->user_data = NULL;
|
||||
g_signal_connect (tctx->device, "removed", (GCallback) device_removed_cb, tctx);
|
||||
g_signal_connect (tctx->fp_context, "device-removed", (GCallback) context_device_removed_cb, tctx);
|
||||
|
||||
fp_device_open_sync (tctx->device, NULL, &error);
|
||||
g_assert_no_error (error);
|
||||
|
||||
/* Triggering remove on device that is being closed. */
|
||||
fp_device_close (tctx->device, NULL, close_done_cb, &close_error);
|
||||
fpi_device_remove (tctx->device);
|
||||
|
||||
/* Removed but not yet notified*/
|
||||
g_assert_nonnull (tctx->device);
|
||||
g_object_get (tctx->device, "removed", &removed, NULL);
|
||||
g_assert_true (removed);
|
||||
g_assert_null (tctx->user_data);
|
||||
|
||||
/* Running the mainloop now will cause the close to fail eventually. */
|
||||
while (!close_error)
|
||||
g_main_context_iteration (NULL, TRUE);
|
||||
g_assert_error (close_error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_REMOVED);
|
||||
|
||||
/* Now the removed callback has been called already. */
|
||||
g_assert_nonnull (tctx->device);
|
||||
g_assert_cmpint (GPOINTER_TO_INT (tctx->user_data), ==, DEV_REMOVED_CB);
|
||||
|
||||
/* While device-removed needs another idle iteration. */
|
||||
while (g_main_context_iteration (NULL, FALSE))
|
||||
{
|
||||
}
|
||||
|
||||
g_assert_null (tctx->device);
|
||||
g_assert_cmpint (GPOINTER_TO_INT (tctx->user_data), ==, CTX_DEVICE_REMOVED_CB);
|
||||
|
||||
fpt_teardown_virtual_device_environment ();
|
||||
}
|
||||
|
||||
static void
|
||||
test_context_remove_device_open (void)
|
||||
{
|
||||
g_autoptr(FptContext) tctx = fpt_context_new_with_virtual_imgdev ();
|
||||
g_autoptr(GError) error = NULL;
|
||||
gboolean removed = FALSE;
|
||||
|
||||
tctx->user_data = NULL;
|
||||
g_signal_connect (tctx->fp_context, "device-removed", (GCallback) context_device_removed_cb, tctx);
|
||||
g_signal_connect (tctx->device, "removed", (GCallback) device_removed_cb, tctx);
|
||||
|
||||
fp_device_open_sync (tctx->device, NULL, &error);
|
||||
g_assert_no_error (error);
|
||||
|
||||
/* Triggering remove on open device. */
|
||||
fpi_device_remove (tctx->device);
|
||||
|
||||
g_assert_nonnull (tctx->device);
|
||||
g_object_get (tctx->device, "removed", &removed, NULL);
|
||||
g_assert_true (removed);
|
||||
g_assert_cmpint (GPOINTER_TO_INT (tctx->user_data), ==, DEV_REMOVED_CB);
|
||||
|
||||
/* At this point, the "removed" cb on the device should have been called!
|
||||
* Iterating the mainloop will not change anything.
|
||||
*/
|
||||
while (g_main_context_iteration (NULL, FALSE))
|
||||
{
|
||||
}
|
||||
g_assert_cmpint (GPOINTER_TO_INT (tctx->user_data), ==, DEV_REMOVED_CB);
|
||||
|
||||
/* On close, the device will be removed from the context,
|
||||
* but only a main loop iteration later. */
|
||||
fp_device_close_sync (tctx->device, NULL, &error);
|
||||
g_assert_error (error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_REMOVED);
|
||||
g_assert_nonnull (tctx->device);
|
||||
g_assert_cmpint (GPOINTER_TO_INT (tctx->user_data), ==, DEV_REMOVED_CB);
|
||||
|
||||
while (g_main_context_iteration (NULL, FALSE))
|
||||
{
|
||||
}
|
||||
g_assert_null (tctx->device);
|
||||
g_assert_cmpint (GPOINTER_TO_INT (tctx->user_data), ==, CTX_DEVICE_REMOVED_CB);
|
||||
|
||||
fpt_teardown_virtual_device_environment ();
|
||||
}
|
||||
|
||||
static void
|
||||
open_done_cb (GObject *device, GAsyncResult *res, gpointer user_data)
|
||||
{
|
||||
g_autoptr(GError) error = NULL;
|
||||
g_autoptr(FpPrint) print = NULL;
|
||||
gboolean *data = user_data;
|
||||
|
||||
g_assert_true (fp_device_open_finish (FP_DEVICE (device), res, &error));
|
||||
g_assert_null (print);
|
||||
g_assert_null (error);
|
||||
|
||||
*data = TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
test_context_remove_device_opening (void)
|
||||
{
|
||||
g_autoptr(FptContext) tctx = fpt_context_new_with_virtual_imgdev ();
|
||||
g_autoptr(GError) close_error = NULL;
|
||||
gboolean open_done = FALSE;
|
||||
gboolean removed;
|
||||
|
||||
tctx->user_data = NULL;
|
||||
g_signal_connect (tctx->device, "removed", (GCallback) device_removed_cb, tctx);
|
||||
g_signal_connect (tctx->fp_context, "device-removed", (GCallback) context_device_removed_cb, tctx);
|
||||
|
||||
fp_device_open (tctx->device, NULL, open_done_cb, &open_done);
|
||||
g_assert_false (open_done);
|
||||
|
||||
fpi_device_remove (tctx->device);
|
||||
|
||||
/* Removed but not yet notified*/
|
||||
g_assert_nonnull (tctx->device);
|
||||
g_object_get (tctx->device, "removed", &removed, NULL);
|
||||
g_assert_true (removed);
|
||||
g_assert_null (tctx->user_data);
|
||||
|
||||
/* Running the mainloop now will cause the open to *succeed* dispite removal! */
|
||||
while (!open_done)
|
||||
g_main_context_iteration (NULL, TRUE);
|
||||
|
||||
/* Now the removed callback has been called already. */
|
||||
g_assert_nonnull (tctx->device);
|
||||
g_assert_cmpint (GPOINTER_TO_INT (tctx->user_data), ==, DEV_REMOVED_CB);
|
||||
|
||||
fp_device_close_sync (tctx->device, NULL, &close_error);
|
||||
g_assert_error (close_error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_REMOVED);
|
||||
|
||||
g_assert_nonnull (tctx->device);
|
||||
g_assert_cmpint (GPOINTER_TO_INT (tctx->user_data), ==, DEV_REMOVED_CB);
|
||||
|
||||
/* The device-removed signal needs an idle iteration. */
|
||||
while (g_main_context_iteration (NULL, FALSE))
|
||||
{
|
||||
}
|
||||
|
||||
g_assert_null (tctx->device);
|
||||
g_assert_cmpint (GPOINTER_TO_INT (tctx->user_data), ==, CTX_DEVICE_REMOVED_CB);
|
||||
|
||||
fpt_teardown_virtual_device_environment ();
|
||||
}
|
||||
|
||||
static void
|
||||
enroll_done_cb (GObject *device, GAsyncResult *res, gpointer user_data)
|
||||
{
|
||||
g_autoptr(FpPrint) print = NULL;
|
||||
GError **error = user_data;
|
||||
|
||||
g_assert_nonnull (error);
|
||||
print = fp_device_enroll_finish (FP_DEVICE (device), res, error);
|
||||
g_assert_null (print);
|
||||
g_assert_nonnull (*error);
|
||||
}
|
||||
|
||||
static void
|
||||
test_context_remove_device_active (void)
|
||||
{
|
||||
g_autoptr(FptContext) tctx = fpt_context_new_with_virtual_imgdev ();
|
||||
g_autoptr(GError) error = NULL;
|
||||
g_autoptr(GCancellable) cancellable = NULL;
|
||||
g_autoptr(GError) enroll_error = NULL;
|
||||
FpPrint *template;
|
||||
gboolean removed = FALSE;
|
||||
|
||||
tctx->user_data = NULL;
|
||||
g_signal_connect (tctx->fp_context, "device-removed", (GCallback) context_device_removed_cb, tctx);
|
||||
g_signal_connect (tctx->device, "removed", (GCallback) device_removed_cb, tctx);
|
||||
|
||||
fp_device_open_sync (tctx->device, NULL, &error);
|
||||
g_assert_no_error (error);
|
||||
|
||||
/* Start an enroll that we can cancel/fail later.
|
||||
* NOTE: We need to cancel explicitly as remove() does not trigger a failure!
|
||||
*/
|
||||
template = fp_print_new (tctx->device);
|
||||
cancellable = g_cancellable_new ();
|
||||
fp_device_enroll (tctx->device, template, cancellable, NULL, NULL, NULL, enroll_done_cb, &enroll_error);
|
||||
|
||||
/* Triggering remove on active device. */
|
||||
fpi_device_remove (tctx->device);
|
||||
|
||||
/* The removed property has changed, but the cb has *not* been called yet. */
|
||||
g_assert_nonnull (tctx->device);
|
||||
g_object_get (tctx->device, "removed", &removed, NULL);
|
||||
g_assert_true (removed);
|
||||
g_assert_null (tctx->user_data);
|
||||
|
||||
/* Running the mainloop now will cause the operation to fail eventually. */
|
||||
while (!enroll_error)
|
||||
g_main_context_iteration (NULL, TRUE);
|
||||
|
||||
/* The virtual image device throws an PROTO error internally,
|
||||
* but we should still receive a REMOVED error here. */
|
||||
g_assert_error (enroll_error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_REMOVED);
|
||||
g_assert_cmpint (GPOINTER_TO_INT (tctx->user_data), ==, DEV_REMOVED_CB);
|
||||
|
||||
/* Now we close the device, state remains unchanged mostly. */
|
||||
fp_device_close_sync (tctx->device, NULL, &error);
|
||||
g_assert_error (error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_REMOVED);
|
||||
g_assert_nonnull (tctx->device);
|
||||
g_assert_cmpint (GPOINTER_TO_INT (tctx->user_data), ==, DEV_REMOVED_CB);
|
||||
|
||||
/* And "device-removed" is called */
|
||||
while (g_main_context_iteration (NULL, FALSE))
|
||||
{
|
||||
}
|
||||
|
||||
g_assert_null (tctx->device);
|
||||
g_assert_cmpint (GPOINTER_TO_INT (tctx->user_data), ==, CTX_DEVICE_REMOVED_CB);
|
||||
|
||||
fpt_teardown_virtual_device_environment ();
|
||||
}
|
||||
|
||||
int
|
||||
main (int argc, char *argv[])
|
||||
{
|
||||
@@ -101,6 +392,11 @@ main (int argc, char *argv[])
|
||||
g_test_add_func ("/context/no-devices", test_context_has_no_devices);
|
||||
g_test_add_func ("/context/has-virtual-device", test_context_has_virtual_device);
|
||||
g_test_add_func ("/context/enumerates-new-devices", test_context_enumerates_new_devices);
|
||||
g_test_add_func ("/context/remove-device-closed", test_context_remove_device_closed);
|
||||
g_test_add_func ("/context/remove-device-closing", test_context_remove_device_closing);
|
||||
g_test_add_func ("/context/remove-device-open", test_context_remove_device_open);
|
||||
g_test_add_func ("/context/remove-device-opening", test_context_remove_device_opening);
|
||||
g_test_add_func ("/context/remove-device-active", test_context_remove_device_active);
|
||||
|
||||
return g_test_run ();
|
||||
}
|
||||
|
||||
@@ -178,6 +178,15 @@ test_device_get_scan_type (void)
|
||||
g_assert_cmpint (fp_device_get_scan_type (tctx->device), ==, FP_SCAN_TYPE_SWIPE);
|
||||
}
|
||||
|
||||
static void
|
||||
test_device_get_finger_status (void)
|
||||
{
|
||||
g_autoptr(FptContext) tctx = fpt_context_new_with_virtual_imgdev ();
|
||||
|
||||
fp_device_open_sync (tctx->device, NULL, NULL);
|
||||
g_assert_cmpint (fp_device_get_finger_status (tctx->device), ==, FP_FINGER_STATUS_NONE);
|
||||
}
|
||||
|
||||
static void
|
||||
test_device_get_nr_enroll_stages (void)
|
||||
{
|
||||
@@ -229,6 +238,7 @@ main (int argc, char *argv[])
|
||||
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_finger_status", test_device_get_finger_status);
|
||||
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);
|
||||
|
||||
+164
-17
@@ -200,6 +200,147 @@ test_driver_set_scan_type_swipe (void)
|
||||
g_assert_cmpstr (pspec->name, ==, "scan-type");
|
||||
}
|
||||
|
||||
static void
|
||||
test_driver_finger_status_inactive (void)
|
||||
{
|
||||
g_autoptr(FpDevice) device = g_object_new (FPI_TYPE_DEVICE_FAKE, NULL);
|
||||
FpiDeviceFake *fake_dev = FPI_DEVICE_FAKE (device);
|
||||
|
||||
g_signal_connect (device, "notify::finger-status", G_CALLBACK (on_device_notify), NULL);
|
||||
|
||||
g_assert_false (fpi_device_report_finger_status (device, FP_FINGER_STATUS_NONE));
|
||||
g_assert_cmpuint (fp_device_get_finger_status (device), ==, FP_FINGER_STATUS_NONE);
|
||||
g_assert (fake_dev->last_called_function != on_device_notify);
|
||||
g_assert_null (g_steal_pointer (&fake_dev->user_data));
|
||||
}
|
||||
|
||||
static void
|
||||
test_driver_finger_status_needed (void)
|
||||
{
|
||||
g_autoptr(FpDevice) device = g_object_new (FPI_TYPE_DEVICE_FAKE, NULL);
|
||||
g_autoptr(GParamSpec) pspec = NULL;
|
||||
FpiDeviceFake *fake_dev = FPI_DEVICE_FAKE (device);
|
||||
|
||||
g_signal_connect (device, "notify::finger-status", G_CALLBACK (on_device_notify), NULL);
|
||||
|
||||
g_assert_true (fpi_device_report_finger_status (device, FP_FINGER_STATUS_NEEDED));
|
||||
g_assert_cmpuint (fp_device_get_finger_status (device), ==, FP_FINGER_STATUS_NEEDED);
|
||||
|
||||
g_assert (fake_dev->last_called_function == on_device_notify);
|
||||
pspec = g_steal_pointer (&fake_dev->user_data);
|
||||
g_assert_cmpstr (pspec->name, ==, "finger-status");
|
||||
|
||||
fake_dev->last_called_function = NULL;
|
||||
g_assert_false (fpi_device_report_finger_status (device, FP_FINGER_STATUS_NEEDED));
|
||||
g_assert_null (fake_dev->last_called_function);
|
||||
g_assert_null (g_steal_pointer (&fake_dev->user_data));
|
||||
}
|
||||
|
||||
static void
|
||||
test_driver_finger_status_present (void)
|
||||
{
|
||||
g_autoptr(FpDevice) device = g_object_new (FPI_TYPE_DEVICE_FAKE, NULL);
|
||||
g_autoptr(GParamSpec) pspec = NULL;
|
||||
FpiDeviceFake *fake_dev = FPI_DEVICE_FAKE (device);
|
||||
|
||||
g_signal_connect (device, "notify::finger-status", G_CALLBACK (on_device_notify), NULL);
|
||||
|
||||
g_assert_true (fpi_device_report_finger_status (device, FP_FINGER_STATUS_PRESENT));
|
||||
g_assert_cmpuint (fp_device_get_finger_status (device), ==, FP_FINGER_STATUS_PRESENT);
|
||||
|
||||
g_assert (fake_dev->last_called_function == on_device_notify);
|
||||
pspec = g_steal_pointer (&fake_dev->user_data);
|
||||
g_assert_cmpstr (pspec->name, ==, "finger-status");
|
||||
|
||||
fake_dev->last_called_function = NULL;
|
||||
g_assert_false (fpi_device_report_finger_status (device, FP_FINGER_STATUS_PRESENT));
|
||||
g_assert_null (fake_dev->last_called_function);
|
||||
g_assert_null (g_steal_pointer (&fake_dev->user_data));
|
||||
}
|
||||
|
||||
static void
|
||||
driver_finger_status_changes_check (FpDevice *device, gboolean add)
|
||||
{
|
||||
FpiDeviceFake *fake_dev = FPI_DEVICE_FAKE (device);
|
||||
|
||||
g_autoptr(GFlagsClass) status_class = g_type_class_ref (FP_TYPE_FINGER_STATUS_FLAGS);
|
||||
guint expected_status;
|
||||
guint initial_value;
|
||||
guint i;
|
||||
gulong signal_id;
|
||||
|
||||
if (add)
|
||||
initial_value = FP_FINGER_STATUS_NONE;
|
||||
else
|
||||
initial_value = status_class->mask;
|
||||
|
||||
g_assert_cmpuint (fp_device_get_finger_status (device), ==, initial_value);
|
||||
|
||||
signal_id = g_signal_connect (device, "notify::finger-status",
|
||||
G_CALLBACK (on_device_notify), NULL);
|
||||
|
||||
for (i = 0, expected_status = initial_value; i < status_class->n_values; ++i)
|
||||
{
|
||||
g_autoptr(GParamSpec) pspec = NULL;
|
||||
FpFingerStatusFlags finger_status = status_class->values[i].value;
|
||||
FpFingerStatusFlags added_status = add ? finger_status : FP_FINGER_STATUS_NONE;
|
||||
FpFingerStatusFlags removed_status = add ? FP_FINGER_STATUS_NONE : finger_status;
|
||||
gboolean ret;
|
||||
|
||||
fake_dev->last_called_function = NULL;
|
||||
ret = fpi_device_report_finger_status_changes (device,
|
||||
added_status,
|
||||
removed_status);
|
||||
if (finger_status != FP_FINGER_STATUS_NONE)
|
||||
g_assert_true (ret);
|
||||
else
|
||||
g_assert_false (ret);
|
||||
|
||||
expected_status |= added_status;
|
||||
expected_status &= ~removed_status;
|
||||
|
||||
g_assert_cmpuint (fp_device_get_finger_status (device), ==, expected_status);
|
||||
|
||||
if (finger_status != FP_FINGER_STATUS_NONE)
|
||||
{
|
||||
g_assert (fake_dev->last_called_function == on_device_notify);
|
||||
pspec = g_steal_pointer (&fake_dev->user_data);
|
||||
g_assert_cmpstr (pspec->name, ==, "finger-status");
|
||||
}
|
||||
|
||||
fake_dev->last_called_function = NULL;
|
||||
g_assert_false (fpi_device_report_finger_status_changes (device,
|
||||
added_status,
|
||||
removed_status));
|
||||
g_assert_null (fake_dev->last_called_function);
|
||||
g_assert_null (g_steal_pointer (&fake_dev->user_data));
|
||||
}
|
||||
|
||||
if (add)
|
||||
g_assert_cmpuint (fp_device_get_finger_status (device), ==, status_class->mask);
|
||||
else
|
||||
g_assert_cmpuint (fp_device_get_finger_status (device), ==, FP_FINGER_STATUS_NONE);
|
||||
|
||||
fake_dev->last_called_function = NULL;
|
||||
g_assert_false (fpi_device_report_finger_status_changes (device,
|
||||
FP_FINGER_STATUS_NONE,
|
||||
FP_FINGER_STATUS_NONE));
|
||||
|
||||
g_assert_null (fake_dev->last_called_function);
|
||||
g_assert_null (g_steal_pointer (&fake_dev->user_data));
|
||||
|
||||
g_signal_handler_disconnect (device, signal_id);
|
||||
}
|
||||
|
||||
static void
|
||||
test_driver_finger_status_changes (void)
|
||||
{
|
||||
g_autoptr(FpDevice) device = g_object_new (FPI_TYPE_DEVICE_FAKE, NULL);
|
||||
|
||||
driver_finger_status_changes_check (device, TRUE);
|
||||
driver_finger_status_changes_check (device, FALSE);
|
||||
}
|
||||
|
||||
static void
|
||||
test_driver_get_nr_enroll_stages (void)
|
||||
{
|
||||
@@ -447,7 +588,7 @@ test_driver_close_error (void)
|
||||
g_assert (fake_dev->last_called_function == dev_class->close);
|
||||
g_assert_error (error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_GENERAL);
|
||||
g_assert (error == g_steal_pointer (&fake_dev->ret_error));
|
||||
g_assert_true (fp_device_is_open (device));
|
||||
g_assert_false (fp_device_is_open (device));
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -1928,12 +2069,6 @@ test_driver_action_error_all (void)
|
||||
|
||||
fake_dev->return_action_error = TRUE;
|
||||
|
||||
fake_dev->ret_error = fpi_device_error_new (FP_DEVICE_ERROR_DATA_INVALID);
|
||||
g_assert_false (fp_device_close_sync (device, NULL, &error));
|
||||
g_assert_true (fake_dev->last_called_function == dev_class->close);
|
||||
g_assert_error (error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_DATA_INVALID);
|
||||
g_clear_error (&error);
|
||||
|
||||
fake_dev->ret_error = fpi_device_error_new (FP_DEVICE_ERROR_DATA_INVALID);
|
||||
g_assert_null (fp_device_enroll_sync (device, fp_print_new (device), NULL,
|
||||
NULL, NULL, &error));
|
||||
@@ -1972,6 +2107,13 @@ test_driver_action_error_all (void)
|
||||
g_assert_true (fake_dev->last_called_function == dev_class->delete);
|
||||
g_assert_error (error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_DATA_INVALID);
|
||||
g_clear_error (&error);
|
||||
|
||||
/* Test close last, as we can't operate on a closed device. */
|
||||
fake_dev->ret_error = fpi_device_error_new (FP_DEVICE_ERROR_DATA_INVALID);
|
||||
g_assert_false (fp_device_close_sync (device, NULL, &error));
|
||||
g_assert_true (fake_dev->last_called_function == dev_class->close);
|
||||
g_assert_error (error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_DATA_INVALID);
|
||||
g_clear_error (&error);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -2005,16 +2147,6 @@ test_driver_action_error_fallback_all (void)
|
||||
"error function*");
|
||||
|
||||
fake_dev->return_action_error = TRUE;
|
||||
g_assert_false (fp_device_close_sync (device, NULL, &error));
|
||||
g_test_assert_expected_messages ();
|
||||
g_assert_true (fake_dev->last_called_function == dev_class->close);
|
||||
g_assert_error (error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_GENERAL);
|
||||
g_clear_error (&error);
|
||||
|
||||
g_test_expect_message (G_LOG_DOMAIN, G_LOG_LEVEL_WARNING,
|
||||
"*Device failed to pass an error to generic action "
|
||||
"error function*");
|
||||
|
||||
g_assert_null (fp_device_enroll_sync (device, fp_print_new (device), NULL,
|
||||
NULL, NULL, &error));
|
||||
g_test_assert_expected_messages ();
|
||||
@@ -2074,6 +2206,17 @@ test_driver_action_error_fallback_all (void)
|
||||
g_assert_true (fake_dev->last_called_function == dev_class->delete);
|
||||
g_assert_error (error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_GENERAL);
|
||||
g_clear_error (&error);
|
||||
|
||||
/* Test close last, as we can't operate on a closed device. */
|
||||
g_test_expect_message (G_LOG_DOMAIN, G_LOG_LEVEL_WARNING,
|
||||
"*Device failed to pass an error to generic action "
|
||||
"error function*");
|
||||
|
||||
g_assert_false (fp_device_close_sync (device, NULL, &error));
|
||||
g_test_assert_expected_messages ();
|
||||
g_assert_true (fake_dev->last_called_function == dev_class->close);
|
||||
g_assert_error (error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_GENERAL);
|
||||
g_clear_error (&error);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -2207,6 +2350,10 @@ main (int argc, char *argv[])
|
||||
g_test_add_func ("/driver/get_scan_type/swipe", test_driver_get_scan_type_swipe);
|
||||
g_test_add_func ("/driver/set_scan_type/press", test_driver_set_scan_type_press);
|
||||
g_test_add_func ("/driver/set_scan_type/swipe", test_driver_set_scan_type_swipe);
|
||||
g_test_add_func ("/driver/finger_status/inactive", test_driver_finger_status_inactive);
|
||||
g_test_add_func ("/driver/finger_status/waiting", test_driver_finger_status_needed);
|
||||
g_test_add_func ("/driver/finger_status/present", test_driver_finger_status_present);
|
||||
g_test_add_func ("/driver/finger_status/changes", test_driver_finger_status_changes);
|
||||
g_test_add_func ("/driver/get_nr_enroll_stages", test_driver_get_nr_enroll_stages);
|
||||
g_test_add_func ("/driver/set_nr_enroll_stages", test_driver_set_nr_enroll_stages);
|
||||
g_test_add_func ("/driver/supports_identify", test_driver_supports_identify);
|
||||
|
||||
@@ -87,6 +87,11 @@ try:
|
||||
if os.path.exists(os.path.join(ddir, "custom.ioctl")):
|
||||
custom()
|
||||
|
||||
except:
|
||||
# Store created output files for inspection (in the build directory)
|
||||
outdir = os.path.join('errors', os.path.basename(ddir))
|
||||
shutil.copytree(tmpdir, outdir)
|
||||
|
||||
finally:
|
||||
shutil.rmtree(tmpdir)
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.
|
After Width: | Height: | Size: 58 KiB |
@@ -0,0 +1,307 @@
|
||||
P: /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.3
|
||||
N: bus/usb/002/005=12011001FF10FF088A130500900C0000000109022700010100A0320904000003FF000000070501024000000705810240000007058202400000
|
||||
E: DEVNAME=/dev/bus/usb/002/005
|
||||
E: DEVTYPE=usb_device
|
||||
E: DRIVER=usb
|
||||
E: PRODUCT=138a/5/c90
|
||||
E: TYPE=255/16/255
|
||||
E: BUSNUM=002
|
||||
E: DEVNUM=005
|
||||
E: MAJOR=189
|
||||
E: MINOR=132
|
||||
E: SUBSYSTEM=usb
|
||||
E: ID_VENDOR=138a
|
||||
E: ID_VENDOR_ENC=138a
|
||||
E: ID_VENDOR_ID=138a
|
||||
E: ID_MODEL=0005
|
||||
E: ID_MODEL_ENC=0005
|
||||
E: ID_MODEL_ID=0005
|
||||
E: ID_REVISION=0c90
|
||||
E: ID_SERIAL=138a_0005
|
||||
E: ID_BUS=usb
|
||||
E: ID_USB_INTERFACES=:ff0000:
|
||||
E: ID_VENDOR_FROM_DATABASE=Validity Sensors, Inc.
|
||||
E: ID_MODEL_FROM_DATABASE=VFS301 Fingerprint Reader
|
||||
E: ID_PATH=pci-0000:00:1d.0-usb-0:1.3
|
||||
E: ID_PATH_TAG=pci-0000_00_1d_0-usb-0_1_3
|
||||
E: LIBFPRINT_DRIVER=Validity VFS301
|
||||
A: authorized=1
|
||||
A: avoid_reset_quirk=0
|
||||
A: bConfigurationValue=1
|
||||
A: bDeviceClass=ff
|
||||
A: bDeviceProtocol=ff
|
||||
A: bDeviceSubClass=10
|
||||
A: bMaxPacketSize0=8
|
||||
A: bMaxPower=100mA
|
||||
A: bNumConfigurations=1
|
||||
A: bNumInterfaces= 1
|
||||
A: bcdDevice=0c90
|
||||
A: bmAttributes=a0
|
||||
A: busnum=2
|
||||
A: configuration=
|
||||
H: descriptors=12011001FF10FF088A130500900C0000000109022700010100A0320904000003FF000000070501024000000705810240000007058202400000
|
||||
A: dev=189:132
|
||||
A: devnum=5
|
||||
A: devpath=1.3
|
||||
L: driver=../../../../../../bus/usb/drivers/usb
|
||||
A: idProduct=0005
|
||||
A: idVendor=138a
|
||||
A: ltm_capable=no
|
||||
A: maxchild=0
|
||||
L: port=../2-1:1.0/2-1-port3
|
||||
A: power/active_duration=1612976
|
||||
A: power/async=enabled
|
||||
A: power/autosuspend=2
|
||||
A: power/autosuspend_delay_ms=2000
|
||||
A: power/connected_duration=2159928
|
||||
A: power/control=auto
|
||||
A: power/level=auto
|
||||
A: power/persist=1
|
||||
A: power/runtime_active_kids=0
|
||||
A: power/runtime_active_time=1612851
|
||||
A: power/runtime_enabled=enabled
|
||||
A: power/runtime_status=active
|
||||
A: power/runtime_suspended_time=546887
|
||||
A: power/runtime_usage=0
|
||||
A: power/wakeup=disabled
|
||||
A: power/wakeup_abort_count=
|
||||
A: power/wakeup_active=
|
||||
A: power/wakeup_active_count=
|
||||
A: power/wakeup_count=
|
||||
A: power/wakeup_expire_count=
|
||||
A: power/wakeup_last_time_ms=
|
||||
A: power/wakeup_max_time_ms=
|
||||
A: power/wakeup_total_time_ms=
|
||||
A: quirks=0x0
|
||||
A: removable=fixed
|
||||
A: rx_lanes=1
|
||||
A: speed=12
|
||||
A: tx_lanes=1
|
||||
A: urbnum=7
|
||||
A: version= 1.10
|
||||
|
||||
P: /devices/pci0000:00/0000:00:1d.0/usb2/2-1
|
||||
N: bus/usb/002/002=12010002090001408780200000000000000109021900010100E0000904000001090000000705810302000C
|
||||
E: DEVNAME=/dev/bus/usb/002/002
|
||||
E: DEVTYPE=usb_device
|
||||
E: DRIVER=usb
|
||||
E: PRODUCT=8087/20/0
|
||||
E: TYPE=9/0/1
|
||||
E: BUSNUM=002
|
||||
E: DEVNUM=002
|
||||
E: MAJOR=189
|
||||
E: MINOR=129
|
||||
E: SUBSYSTEM=usb
|
||||
E: ID_VENDOR=8087
|
||||
E: ID_VENDOR_ENC=8087
|
||||
E: ID_VENDOR_ID=8087
|
||||
E: ID_MODEL=0020
|
||||
E: ID_MODEL_ENC=0020
|
||||
E: ID_MODEL_ID=0020
|
||||
E: ID_REVISION=0000
|
||||
E: ID_SERIAL=8087_0020
|
||||
E: ID_BUS=usb
|
||||
E: ID_USB_INTERFACES=:090000:
|
||||
E: ID_VENDOR_FROM_DATABASE=Intel Corp.
|
||||
E: ID_MODEL_FROM_DATABASE=Integrated Rate Matching Hub
|
||||
E: ID_PATH=pci-0000:00:1d.0-usb-0:1
|
||||
E: ID_PATH_TAG=pci-0000_00_1d_0-usb-0_1
|
||||
E: ID_FOR_SEAT=usb-pci-0000_00_1d_0-usb-0_1
|
||||
E: TAGS=:seat:
|
||||
A: authorized=1
|
||||
A: avoid_reset_quirk=0
|
||||
A: bConfigurationValue=1
|
||||
A: bDeviceClass=09
|
||||
A: bDeviceProtocol=01
|
||||
A: bDeviceSubClass=00
|
||||
A: bMaxPacketSize0=64
|
||||
A: bMaxPower=0mA
|
||||
A: bNumConfigurations=1
|
||||
A: bNumInterfaces= 1
|
||||
A: bcdDevice=0000
|
||||
A: bmAttributes=e0
|
||||
A: busnum=2
|
||||
A: configuration=
|
||||
H: descriptors=12010002090001408780200000000000000109021900010100E0000904000001090000000705810302000C
|
||||
A: dev=189:129
|
||||
A: devnum=2
|
||||
A: devpath=1
|
||||
L: driver=../../../../../bus/usb/drivers/usb
|
||||
A: idProduct=0020
|
||||
A: idVendor=8087
|
||||
A: ltm_capable=no
|
||||
A: maxchild=8
|
||||
L: port=../2-0:1.0/usb2-port1
|
||||
A: power/active_duration=2160820
|
||||
A: power/async=enabled
|
||||
A: power/autosuspend=0
|
||||
A: power/autosuspend_delay_ms=0
|
||||
A: power/connected_duration=2160824
|
||||
A: power/control=auto
|
||||
A: power/level=auto
|
||||
A: power/runtime_active_kids=3
|
||||
A: power/runtime_active_time=2160531
|
||||
A: power/runtime_enabled=enabled
|
||||
A: power/runtime_status=active
|
||||
A: power/runtime_suspended_time=0
|
||||
A: power/runtime_usage=0
|
||||
A: power/wakeup=disabled
|
||||
A: power/wakeup_abort_count=
|
||||
A: power/wakeup_active=
|
||||
A: power/wakeup_active_count=
|
||||
A: power/wakeup_count=
|
||||
A: power/wakeup_expire_count=
|
||||
A: power/wakeup_last_time_ms=
|
||||
A: power/wakeup_max_time_ms=
|
||||
A: power/wakeup_total_time_ms=
|
||||
A: quirks=0x0
|
||||
A: removable=fixed
|
||||
A: rx_lanes=1
|
||||
A: speed=480
|
||||
A: tx_lanes=1
|
||||
A: urbnum=75
|
||||
A: version= 2.00
|
||||
|
||||
P: /devices/pci0000:00/0000:00:1d.0/usb2
|
||||
N: bus/usb/002/001=12010002090000406B1D020004050302010109021900010100E0000904000001090000000705810304000C
|
||||
E: DEVNAME=/dev/bus/usb/002/001
|
||||
E: DEVTYPE=usb_device
|
||||
E: DRIVER=usb
|
||||
E: PRODUCT=1d6b/2/504
|
||||
E: TYPE=9/0/0
|
||||
E: BUSNUM=002
|
||||
E: DEVNUM=001
|
||||
E: MAJOR=189
|
||||
E: MINOR=128
|
||||
E: SUBSYSTEM=usb
|
||||
E: ID_VENDOR=Linux_5.4.0-48-generic_ehci_hcd
|
||||
E: ID_VENDOR_ENC=Linux\x205.4.0-48-generic\x20ehci_hcd
|
||||
E: ID_VENDOR_ID=1d6b
|
||||
E: ID_MODEL=EHCI_Host_Controller
|
||||
E: ID_MODEL_ENC=EHCI\x20Host\x20Controller
|
||||
E: ID_MODEL_ID=0002
|
||||
E: ID_REVISION=0504
|
||||
E: ID_SERIAL=Linux_5.4.0-48-generic_ehci_hcd_EHCI_Host_Controller_0000:00:1d.0
|
||||
E: ID_SERIAL_SHORT=0000:00:1d.0
|
||||
E: ID_BUS=usb
|
||||
E: ID_USB_INTERFACES=:090000:
|
||||
E: ID_VENDOR_FROM_DATABASE=Linux Foundation
|
||||
E: ID_MODEL_FROM_DATABASE=2.0 root hub
|
||||
E: ID_PATH=pci-0000:00:1d.0
|
||||
E: ID_PATH_TAG=pci-0000_00_1d_0
|
||||
E: ID_FOR_SEAT=usb-pci-0000_00_1d_0
|
||||
E: TAGS=:seat:
|
||||
A: authorized=1
|
||||
A: authorized_default=1
|
||||
A: avoid_reset_quirk=0
|
||||
A: bConfigurationValue=1
|
||||
A: bDeviceClass=09
|
||||
A: bDeviceProtocol=00
|
||||
A: bDeviceSubClass=00
|
||||
A: bMaxPacketSize0=64
|
||||
A: bMaxPower=0mA
|
||||
A: bNumConfigurations=1
|
||||
A: bNumInterfaces= 1
|
||||
A: bcdDevice=0504
|
||||
A: bmAttributes=e0
|
||||
A: busnum=2
|
||||
A: configuration=
|
||||
H: descriptors=12010002090000406B1D020004050302010109021900010100E0000904000001090000000705810304000C
|
||||
A: dev=189:128
|
||||
A: devnum=1
|
||||
A: devpath=0
|
||||
L: driver=../../../../bus/usb/drivers/usb
|
||||
A: idProduct=0002
|
||||
A: idVendor=1d6b
|
||||
A: interface_authorized_default=1
|
||||
A: ltm_capable=no
|
||||
A: manufacturer=Linux 5.4.0-48-generic ehci_hcd
|
||||
A: maxchild=3
|
||||
A: power/active_duration=2161060
|
||||
A: power/async=enabled
|
||||
A: power/autosuspend=0
|
||||
A: power/autosuspend_delay_ms=0
|
||||
A: power/connected_duration=2161060
|
||||
A: power/control=auto
|
||||
A: power/level=auto
|
||||
A: power/runtime_active_kids=1
|
||||
A: power/runtime_active_time=2161035
|
||||
A: power/runtime_enabled=enabled
|
||||
A: power/runtime_status=active
|
||||
A: power/runtime_suspended_time=0
|
||||
A: power/runtime_usage=0
|
||||
A: power/wakeup=disabled
|
||||
A: power/wakeup_abort_count=
|
||||
A: power/wakeup_active=
|
||||
A: power/wakeup_active_count=
|
||||
A: power/wakeup_count=
|
||||
A: power/wakeup_expire_count=
|
||||
A: power/wakeup_last_time_ms=
|
||||
A: power/wakeup_max_time_ms=
|
||||
A: power/wakeup_total_time_ms=
|
||||
A: product=EHCI Host Controller
|
||||
A: quirks=0x0
|
||||
A: removable=unknown
|
||||
A: rx_lanes=1
|
||||
A: serial=0000:00:1d.0
|
||||
A: speed=480
|
||||
A: tx_lanes=1
|
||||
A: urbnum=26
|
||||
A: version= 2.00
|
||||
|
||||
P: /devices/pci0000:00/0000:00:1d.0
|
||||
E: DRIVER=ehci-pci
|
||||
E: PCI_CLASS=C0320
|
||||
E: PCI_ID=8086:3B34
|
||||
E: PCI_SUBSYS_ID=103C:7001
|
||||
E: PCI_SLOT_NAME=0000:00:1d.0
|
||||
E: MODALIAS=pci:v00008086d00003B34sv0000103Csd00007001bc0Csc03i20
|
||||
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=EHCI
|
||||
E: ID_VENDOR_FROM_DATABASE=Intel Corporation
|
||||
E: ID_MODEL_FROM_DATABASE=5 Series/3400 Series Chipset USB2 Enhanced Host Controller
|
||||
A: ari_enabled=0
|
||||
A: broken_parity_status=0
|
||||
A: class=0x0c0320
|
||||
A: companion=
|
||||
H: config=8680343B060090020520030C00000000005810DB0000000000000000000000000000000000000000000000003C1001700000000050000000000000000B010000
|
||||
A: consistent_dma_mask_bits=32
|
||||
A: d3cold_allowed=1
|
||||
A: device=0x3b34
|
||||
A: dma_mask_bits=32
|
||||
L: driver=../../../bus/pci/drivers/ehci-pci
|
||||
A: driver_override=(null)
|
||||
A: enable=1
|
||||
A: irq=21
|
||||
A: local_cpulist=0-7
|
||||
A: local_cpus=ff
|
||||
A: modalias=pci:v00008086d00003B34sv0000103Csd00007001bc0Csc03i20
|
||||
A: msi_bus=1
|
||||
A: numa_node=-1
|
||||
A: pools=poolinfo - 0.1\nehci_sitd 0 0 96 0\nehci_itd 0 0 192 0\nehci_qh 12 42 96 1\nehci_qtd 13 84 96 2\nbuffer-2048 0 0 2048 0\nbuffer-512 0 0 512 0\nbuffer-128 2 32 128 1\nbuffer-32 0 0 32 0
|
||||
A: power/async=enabled
|
||||
A: power/control=on
|
||||
A: power/runtime_active_kids=1
|
||||
A: power/runtime_active_time=2161633
|
||||
A: power/runtime_enabled=forbidden
|
||||
A: power/runtime_status=active
|
||||
A: power/runtime_suspended_time=0
|
||||
A: power/runtime_usage=1
|
||||
A: power/wakeup=enabled
|
||||
A: power/wakeup_abort_count=0
|
||||
A: power/wakeup_active=0
|
||||
A: power/wakeup_active_count=0
|
||||
A: power/wakeup_count=0
|
||||
A: power/wakeup_expire_count=0
|
||||
A: power/wakeup_last_time_ms=0
|
||||
A: power/wakeup_max_time_ms=0
|
||||
A: power/wakeup_total_time_ms=0
|
||||
A: resource=0x00000000db105800 0x00000000db105bff 0x0000000000040200\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
|
||||
A: revision=0x05
|
||||
A: subsystem_device=0x7001
|
||||
A: subsystem_vendor=0x103c
|
||||
A: uframe_periodic_max=100
|
||||
A: vendor=0x8086
|
||||
|
||||
@@ -172,6 +172,7 @@ class VirtualImage(unittest.TestCase):
|
||||
def done_cb(dev, res):
|
||||
print("Enroll done")
|
||||
fp = dev.enroll_finish(res)
|
||||
self.assertEqual(self.dev.get_finger_status(), FPrint.FingerStatusFlags.NONE)
|
||||
self._enrolled = fp
|
||||
|
||||
template = FPrint.Print.new(self.dev)
|
||||
@@ -182,6 +183,7 @@ class VirtualImage(unittest.TestCase):
|
||||
date = GLib.Date()
|
||||
date.set_dmy(*datetime.get_ymd()[::-1])
|
||||
template.props.enroll_date = date
|
||||
self.assertEqual(self.dev.get_finger_status(), FPrint.FingerStatusFlags.NONE)
|
||||
self.dev.enroll(template, None, progress_cb, tuple(), done_cb)
|
||||
|
||||
# Note: Assumes 5 enroll steps for this device!
|
||||
@@ -192,25 +194,36 @@ class VirtualImage(unittest.TestCase):
|
||||
# Test the image-device path where the finger is removed after
|
||||
# the minutiae scan is completed.
|
||||
self.send_finger_automatic(False)
|
||||
self.assertEqual(self.dev.get_finger_status(), FPrint.FingerStatusFlags.NEEDED)
|
||||
self.send_finger_report(True)
|
||||
self.assertEqual(self.dev.get_finger_status(),
|
||||
FPrint.FingerStatusFlags.NEEDED | FPrint.FingerStatusFlags.PRESENT)
|
||||
self.send_image(image)
|
||||
while self._step < 2:
|
||||
ctx.iteration(True)
|
||||
self.send_finger_report(False)
|
||||
|
||||
self.assertEqual(self.dev.get_finger_status(), FPrint.FingerStatusFlags.NEEDED)
|
||||
|
||||
self.send_finger_automatic(True)
|
||||
self.send_image(image)
|
||||
while self._step < 3:
|
||||
ctx.iteration(True)
|
||||
|
||||
self.assertEqual(self.dev.get_finger_status(), FPrint.FingerStatusFlags.NEEDED)
|
||||
|
||||
self.send_image(image)
|
||||
while self._step < 4:
|
||||
ctx.iteration(True)
|
||||
|
||||
self.assertEqual(self.dev.get_finger_status(), FPrint.FingerStatusFlags.NEEDED)
|
||||
|
||||
self.send_image(image)
|
||||
while self._enrolled is None:
|
||||
ctx.iteration(True)
|
||||
|
||||
self.assertEqual(self.dev.get_finger_status(), FPrint.FingerStatusFlags.NONE)
|
||||
|
||||
return self._enrolled
|
||||
|
||||
def test_enroll_verify(self):
|
||||
|
||||
Reference in New Issue
Block a user