From 86566e8d0b7b36ebaa5588af75b46e2c93a12918 Mon Sep 17 00:00:00 2001 From: Enrik Berkhan Date: Thu, 19 Jan 2023 20:28:33 +0100 Subject: [PATCH] goodixmoc: Fix missing "enroll create" state After the driver internal duplicate check had been removed in 46669e9f539ee48d6ef1ac8ab0732d5a0d43eada, all templates were saved with an all-zeroes template ID. By going through FP_ENROLL_CREATE before starting to capture, the template ID returned from the device is taken into account again. Signed-off-by: Enrik Berkhan --- libfprint/drivers/goodixmoc/goodix.c | 2 +- tests/goodixmoc/custom.pcapng | Bin 73120 -> 64852 bytes tests/goodixmoc/device | 149 ++++++++++++++------------- 3 files changed, 81 insertions(+), 70 deletions(-) diff --git a/libfprint/drivers/goodixmoc/goodix.c b/libfprint/drivers/goodixmoc/goodix.c index 48dafe10..d8f11351 100644 --- a/libfprint/drivers/goodixmoc/goodix.c +++ b/libfprint/drivers/goodixmoc/goodix.c @@ -631,7 +631,7 @@ fp_enroll_enum_cb (FpiDeviceGoodixMoc *self, return; } - fpi_ssm_jump_to_state (self->task_ssm, FP_ENROLL_CAPTURE); + fpi_ssm_jump_to_state (self->task_ssm, FP_ENROLL_CREATE); } static void diff --git a/tests/goodixmoc/custom.pcapng b/tests/goodixmoc/custom.pcapng index b5e2d89c75a7253571360a9e064bb31259834e2d..91925244702c6a94ad5524bbb0ae5a3c4e42b1d8 100644 GIT binary patch literal 64852 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

L4zz?BJ>h*kk0r(^u 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 QJ9pd8@{S6L6%17Se}dI!Qvd(} diff --git a/tests/goodixmoc/device b/tests/goodixmoc/device index 1e209a1d..4f96b612 100644 --- a/tests/goodixmoc/device +++ b/tests/goodixmoc/device @@ -1,31 +1,30 @@ -P: /devices/pci0000:00/0000:00:14.0/usb1/1-3 -N: bus/usb/001/023=12010002EF000040C627966400010102030109022000010103A0320904000002FF0000040705830240000007050102400000 -E: DEVNAME=/dev/bus/usb/001/023 +P: /devices/pci0000:00/0000:00:14.0/usb3/3-9 +N: bus/usb/003/004=12010002EF000040C627AC6300010102030109022000010103A0320904000002FF0000040705830240000007050102400000 +E: DEVNAME=/dev/bus/usb/003/004 E: DEVTYPE=usb_device E: DRIVER=usb -E: PRODUCT=27c6/6496/100 +E: PRODUCT=27c6/63ac/100 E: TYPE=239/0/0 -E: BUSNUM=001 -E: DEVNUM=023 +E: BUSNUM=003 +E: DEVNUM=004 E: MAJOR=189 -E: MINOR=22 +E: MINOR=259 E: SUBSYSTEM=usb E: ID_VENDOR=Goodix_Technology_Co.__Ltd. E: ID_VENDOR_ENC=Goodix\x20Technology\x20Co.\x2c\x20Ltd. E: ID_VENDOR_ID=27c6 E: ID_MODEL=Goodix_USB2.0_MISC E: ID_MODEL_ENC=Goodix\x20USB2.0\x20MISC -E: ID_MODEL_ID=6496 +E: ID_MODEL_ID=63ac E: ID_REVISION=0100 -E: ID_SERIAL=Goodix_Technology_Co.__Ltd._Goodix_USB2.0_MISC_XXXX_MOC_B0 -E: ID_SERIAL_SHORT=XXXX_MOC_B0 +E: ID_SERIAL=Goodix_Technology_Co.__Ltd._Goodix_USB2.0_MISC_UID4C77C784_XXXX_MOC_B0 +E: ID_SERIAL_SHORT=UID4C77C784_XXXX_MOC_B0 E: ID_BUS=usb E: ID_USB_INTERFACES=:ff0000: E: ID_VENDOR_FROM_DATABASE=Shenzhen Goodix Technology Co.,Ltd. E: ID_AUTOSUSPEND=1 -E: ID_PERSIST=0 -E: ID_PATH=pci-0000:00:14.0-usb-0:3 -E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_3 +E: ID_PATH=pci-0000:00:14.0-usb-0:9 +E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_9 A: authorized=1\n A: avoid_reset_quirk=0\n A: bConfigurationValue=1\n @@ -38,30 +37,34 @@ A: bNumConfigurations=1\n A: bNumInterfaces= 1\n A: bcdDevice=0100\n A: bmAttributes=a0\n -A: busnum=1\n -A: configuration=XXXX_MOC_B0\n -H: descriptors=12010002EF000040C627966400010102030109022000010103A0320904000002FF0000040705830240000007050102400000 -A: dev=189:22\n -A: devnum=23\n -A: devpath=3\n +A: busnum=3\n +A: configuration=UID4C77C784_XXXX_MOC_B0\n +H: descriptors=12010002EF000040C627AC6300010102030109022000010103A0320904000002FF0000040705830240000007050102400000 +A: dev=189:259\n +A: devnum=4\n +A: devpath=9\n L: driver=../../../../../bus/usb/drivers/usb -L: firmware_node=../../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:1c/device:1d/device:20 -A: idProduct=6496\n +L: firmware_node=../../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:13/device:14/device:1f +A: idProduct=63ac\n A: idVendor=27c6\n A: ltm_capable=no\n A: manufacturer=Goodix Technology Co., Ltd.\n A: maxchild=0\n -L: port=../1-0:1.0/usb1-port3 -A: power/active_duration=22667\n +L: port=../3-0:1.0/usb3-port9 +A: power/active_duration=702588\n +A: power/async=enabled\n A: power/autosuspend=2\n A: power/autosuspend_delay_ms=2000\n -A: power/connected_duration=917616\n +A: power/connected_duration=78973756\n A: power/control=auto\n A: power/level=auto\n A: power/persist=1\n -A: power/runtime_active_time=22809\n +A: power/runtime_active_kids=0\n +A: power/runtime_active_time=707156\n +A: power/runtime_enabled=enabled\n A: power/runtime_status=active\n -A: power/runtime_suspended_time=894564\n +A: power/runtime_suspended_time=78265226\n +A: power/runtime_usage=0\n A: power/wakeup=disabled\n A: power/wakeup_abort_count=\n A: power/wakeup_active=\n @@ -73,34 +76,34 @@ A: power/wakeup_max_time_ms=\n A: power/wakeup_total_time_ms=\n A: product=Goodix USB2.0 MISC\n A: quirks=0x0\n -A: removable=removable\n +A: removable=fixed\n A: rx_lanes=1\n -A: serial=XXXX_MOC_B0\n +A: serial=UID4C77C784_XXXX_MOC_B0\n A: speed=12\n A: tx_lanes=1\n -A: urbnum=298\n +A: urbnum=5759\n A: version= 2.00\n -P: /devices/pci0000:00/0000:00:14.0/usb1 -N: bus/usb/001/001=12010002090001406B1D020017050302010109021900010100E0000904000001090000000705810304000C -E: DEVNAME=/dev/bus/usb/001/001 +P: /devices/pci0000:00/0000:00:14.0/usb3 +N: bus/usb/003/001=12010002090001406B1D020015050302010109021900010100E0000904000001090000000705810304000C +E: DEVNAME=/dev/bus/usb/003/001 E: DEVTYPE=usb_device E: DRIVER=usb -E: PRODUCT=1d6b/2/517 +E: PRODUCT=1d6b/2/515 E: TYPE=9/0/1 -E: BUSNUM=001 +E: BUSNUM=003 E: DEVNUM=001 E: MAJOR=189 -E: MINOR=0 +E: MINOR=256 E: SUBSYSTEM=usb -E: ID_VENDOR=Linux_5.17.12-300.fc36.x86_64_xhci-hcd -E: ID_VENDOR_ENC=Linux\x205.17.12-300.fc36.x86_64\x20xhci-hcd +E: ID_VENDOR=Linux_5.15.0-57-generic_xhci-hcd +E: ID_VENDOR_ENC=Linux\x205.15.0-57-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=0517 -E: ID_SERIAL=Linux_5.17.12-300.fc36.x86_64_xhci-hcd_xHCI_Host_Controller_0000:00:14.0 +E: ID_REVISION=0515 +E: ID_SERIAL=Linux_5.15.0-57-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: @@ -123,31 +126,35 @@ A: bMaxPacketSize0=64\n A: bMaxPower=0mA\n A: bNumConfigurations=1\n A: bNumInterfaces= 1\n -A: bcdDevice=0517\n +A: bcdDevice=0515\n A: bmAttributes=e0\n -A: busnum=1\n -A: configuration=\n -H: descriptors=12010002090001406B1D020017050302010109021900010100E0000904000001090000000705810304000C -A: dev=189:0\n +A: busnum=3\n +A: configuration= +H: descriptors=12010002090001406B1D020015050302010109021900010100E0000904000001090000000705810304000C +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:1c/device:1d +L: firmware_node=../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:13/device:14 A: idProduct=0002\n A: idVendor=1d6b\n A: interface_authorized_default=1\n A: ltm_capable=no\n -A: manufacturer=Linux 5.17.12-300.fc36.x86_64 xhci-hcd\n +A: manufacturer=Linux 5.15.0-57-generic xhci-hcd\n A: maxchild=12\n -A: power/active_duration=164289796\n +A: power/active_duration=78971960\n +A: power/async=enabled\n A: power/autosuspend=0\n A: power/autosuspend_delay_ms=0\n -A: power/connected_duration=164360220\n +A: power/connected_duration=78974992\n A: power/control=auto\n A: power/level=auto\n -A: power/runtime_active_time=164331876\n +A: power/runtime_active_kids=2\n +A: power/runtime_active_time=78973899\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 @@ -164,48 +171,52 @@ A: rx_lanes=1\n A: serial=0000:00:14.0\n A: speed=480\n A: tx_lanes=1\n -A: urbnum=2097\n +A: urbnum=1824\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:9DED -E: PCI_SUBSYS_ID=17AA:2292 +E: PCI_ID=8086:51ED +E: PCI_SUBSYS_ID=1028:0B00 E: PCI_SLOT_NAME=0000:00:14.0 -E: MODALIAS=pci:v00008086d00009DEDsv000017AAsd00002292bc0Csc03i30 +E: MODALIAS=pci:v00008086d000051EDsv00001028sd00000B00bc0Csc03i30 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_AUTOSUSPEND=1 -E: ID_MODEL_FROM_DATABASE=Cannon Point-LP USB 3.1 xHCI Controller A: ari_enabled=0\n A: broken_parity_status=0\n A: class=0x0c0330\n -H: config=8680ED9D060490021130030C00008000040022EA000000000000000000000000000000000000000000000000AA179222000000007000000000000000FF010000FD0134808FC6FF8300000000000000007F6DDC0F00000000F507312600000000316000000000000000000000000000000180C2C1080000000000000000000000059087001803E0FE0000000000000000090014F01000400100000000C10A080000080E00001800008F40020000010000000000000000000008000000040000000000000000000000000000000000000000000000000000000800000004000000000000000000000000000000000000000000000000000000B50F320112000000 +H: config=8680ED51060490020130030C0000800004002A8F6200000000000000000000000000000000000000000000002810000B000000007000000000000000FF010000FD0134A089C27F8000000000000000003F6DD80F000000000000000000000000316000000000000000000000000000000180C2C1080000000000000000000000059087003808E0FE000000000000000009B014F01000400100000000C10A080000080E00001800008F50020000010000090000018680C00009001014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B50F100112000000 A: consistent_dma_mask_bits=64\n A: d3cold_allowed=1\n A: dbc=disabled\n -A: device=0x9ded\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:1c -A: irq=128\n -A: local_cpulist=0-7\n -A: local_cpus=ff\n -A: modalias=pci:v00008086d00009DEDsv000017AAsd00002292bc0Csc03i30\n +L: firmware_node=../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:13 +L: iommu=../../virtual/iommu/dmar1 +L: iommu_group=../../../kernel/iommu_groups/13 +A: irq=167\n +A: local_cpulist=0-19\n +A: local_cpus=fffff\n +A: modalias=pci:v00008086d000051EDsv00001028sd00000B00bc0Csc03i30\n A: msi_bus=1\n -A: msi_irqs/128=msi\n +A: msi_irqs/167=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 11 12 2112 12\nxHCI ring segments 46 50 4096 50\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: pools=poolinfo - 0.1\nxHCI 1KB stream ctx arrays 0 0 1024 0\nxHCI 256 byte stream ctx arrays 0 0 256 0\nxHCI input/output contexts 13 14 2112 14\nxHCI ring segments 38 42 4096 42\nbuffer-2048 0 0 2048 0\nbuffer-512 0 0 512 0\nbuffer-128 0 0 128 0\nbuffer-32 0 0 32 0\nbuffer-2048 0 0 2048 0\nbuffer-512 0 0 512 0\nbuffer-128 3 32 128 1\nbuffer-32 0 0 32 0\n +A: power/async=enabled\n A: power/control=auto\n -A: power/runtime_active_time=164332777\n +A: power/runtime_active_kids=1\n +A: power/runtime_active_time=78974886\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 @@ -216,9 +227,9 @@ 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=0x00000000ea220000 0x00000000ea22ffff 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=0x11\n -A: subsystem_device=0x2292\n -A: subsystem_vendor=0x17aa\n +A: resource=0x000000628f2a0000 0x000000628f2affff 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=0x0b00\n +A: subsystem_vendor=0x1028\n A: vendor=0x8086\n