From 30b7a596d118fe2bbc94dca46b1bb34fae6fd278 Mon Sep 17 00:00:00 2001 From: Jason Huang Date: Thu, 29 Jan 2026 16:45:07 +0800 Subject: [PATCH] egis_etu905: add test --- meson.build | 1 + tests/egis_etu905/custom.pcapng | Bin 0 -> 33780 bytes tests/egis_etu905/custom.py | 109 ++++++++++ tests/egis_etu905/device | 370 ++++++++++++++++++++++++++++++++ tests/meson.build | 1 + 5 files changed, 481 insertions(+) create mode 100644 tests/egis_etu905/custom.pcapng create mode 100644 tests/egis_etu905/custom.py create mode 100644 tests/egis_etu905/device diff --git a/meson.build b/meson.build index 3cd23aba..c9e27365 100644 --- a/meson.build +++ b/meson.build @@ -166,6 +166,7 @@ endian_independent_drivers = virtual_drivers + [ 'aes4000', 'egis0570', 'egismoc', + 'egis_etu905', 'elanmoc', 'etes603', 'focaltech_moc', diff --git a/tests/egis_etu905/custom.pcapng b/tests/egis_etu905/custom.pcapng new file mode 100644 index 0000000000000000000000000000000000000000..f0dd63dbfe59c6a871752140b836a0726753da84 GIT binary patch literal 33780 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 literal 0 HcmV?d00001 diff --git a/tests/egis_etu905/custom.py b/tests/egis_etu905/custom.py new file mode 100644 index 00000000..a842f26e --- /dev/null +++ b/tests/egis_etu905/custom.py @@ -0,0 +1,109 @@ +#!/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() == "egis_etu905" +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.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() + +def enroll_progress(*args): + assert d.get_finger_status() == FPrint.FingerStatusFlags.PRESENT + print("enroll progress stage: " + str(args[1])) + +def identify_done(dev, res): + global identified + identified = True + identify_match, identify_print = dev.identify_finish(res) + print("MATCH FOUND!" if identify_match else "NO MATCH FOUND") + assert identify_match.equal(identify_print) + +# List +print("--- LISTING ---") +stored = d.list_prints_sync() +prints1 = len(stored) +print(f"--- LIST DONE: Found {prints1} prints before enroll---") + +# Enroll +print("--- ENROLLING ---") +template = FPrint.Print.new(d) + +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 ---") +del template + +# List +print("--- LISTING ---") +stored = d.list_prints_sync() +prints2 = len(stored) +print(f"--- LIST DONE: Found {prints2} prints after enroll---") +assert (prints2 - prints1) == 1 + +# Verify +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(f"--- VERIFY DONE: Result {verify_res} ---") + +# Identify +print("--- ASYNC IDENTIFYING ---") +identified = False +deserialized_prints = [] +for p in stored: + deserialized_prints.append(FPrint.Print.deserialize(p.serialize())) + assert deserialized_prints[-1].equal(p) + +d.identify(deserialized_prints, callback=identify_done) +del deserialized_prints + +while not identified: + ctx.iteration(True) +print("--- IDENTIFY DONE ---") + +# Delete +print("--- DELETING ---") +p_to_delete = next((sp for sp in stored if sp.equal(p)), None) +if p_to_delete: + d.delete_print_sync(p_to_delete) + print("--- DELETE DONE ---") +del p_to_delete +del p + +# List +print("--- LISTING ---") +stored = d.list_prints_sync() +prints3 = len(stored) +print(f"--- LIST DONE: Found {prints3} prints after deleting---") +assert (prints2 - prints3) == 1 +del stored + +d.close_sync() + +del d +del c diff --git a/tests/egis_etu905/device b/tests/egis_etu905/device new file mode 100644 index 00000000..65912657 --- /dev/null +++ b/tests/egis_etu905/device @@ -0,0 +1,370 @@ +P: /devices/pci0000:00/0000:00:14.0/usb3/3-2/3-2.1 +N: bus/usb/003/050=12010002FF0000407A1CAE0527990102030109022700010100A0320904000003FFFFFF00070581024000000705020240000007058303400001 +E: BUSNUM=003 +E: CURRENT_TAGS=:snap_cups_ippeveprinter:snap_cups_cupsd: +E: DEVNAME=/dev/bus/usb/003/050 +E: DEVNUM=050 +E: DEVTYPE=usb_device +E: DRIVER=usb +E: ID_BUS=usb +E: ID_MODEL=ETU905Axx-E +E: ID_MODEL_ENC=ETU905Axx-E +E: ID_MODEL_ID=05ae +E: ID_PATH=pci-0000:00:14.0-usb-0:2.1 +E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_2_1 +E: ID_PATH_WITH_USB_REVISION=pci-0000:00:14.0-usbv2-0:2.1 +E: ID_REVISION=9927 +E: ID_SERIAL=EGIS_ETU905Axx-E_0A2420PNA357 +E: ID_SERIAL_SHORT=0A2420PNA357 +E: ID_USB_INTERFACES=:ffffff: +E: ID_USB_MODEL=ETU905Axx-E +E: ID_USB_MODEL_ENC=ETU905Axx-E +E: ID_USB_MODEL_ID=05ae +E: ID_USB_REVISION=9927 +E: ID_USB_SERIAL=EGIS_ETU905Axx-E_0A2420PNA357 +E: ID_USB_SERIAL_SHORT=0A2420PNA357 +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=305 +E: PRODUCT=1c7a/5ae/9927 +E: SUBSYSTEM=usb +E: TAGS=:snap_cups_ippeveprinter:snap_cups_cupsd: +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=9927\n +A: bmAttributes=a0\n +A: busnum=3\n +A: configuration= +H: descriptors=12010002FF0000407A1CAE0527990102030109022700010100A0320904000003FFFFFF00070581024000000705020240000007058303400001 +A: dev=189:305\n +A: devnum=50\n +A: devpath=2.1\n +L: driver=../../../../../../bus/usb/drivers/usb +A: idProduct=05ae\n +A: idVendor=1c7a\n +A: ltm_capable=no\n +A: manufacturer=EGIS\n +A: maxchild=0\n +L: port=../3-2:1.0/3-2-port1 +A: power/active_duration=9509610\n +A: power/async=enabled\n +A: power/autosuspend=2\n +A: power/autosuspend_delay_ms=2000\n +A: power/connected_duration=9509610\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=9509451\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=ETU905Axx-E\n +A: quirks=0x0\n +A: removable=removable\n +A: rx_lanes=1\n +A: serial=0A2420PNA357\n +A: speed=12\n +A: tx_lanes=1\n +A: urbnum=4090\n +A: version= 2.00\n + +P: /devices/pci0000:00/0000:00:14.0/usb3/3-2 +N: bus/usb/003/042=1201100209000240DA0B115430610102000109022900010100E0000904000001090001000705810301000C0904000101090002000705810301000C +E: BUSNUM=003 +E: CURRENT_TAGS=:seat:snap_cups_ippeveprinter:snap_cups_cupsd: +E: DEVNAME=/dev/bus/usb/003/042 +E: DEVNUM=042 +E: DEVTYPE=usb_device +E: DRIVER=usb +E: ID_BUS=usb +E: ID_FOR_SEAT=usb-pci-0000_00_14_0-usb-0_2 +E: ID_MODEL=4-Port_USB_2.0_Hub +E: ID_MODEL_ENC=4-Port\x20USB\x202.0\x20Hub +E: ID_MODEL_FROM_DATABASE=RTS5411 Hub +E: ID_MODEL_ID=5411 +E: ID_PATH=pci-0000:00:14.0-usb-0:2 +E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_2 +E: ID_PATH_WITH_USB_REVISION=pci-0000:00:14.0-usbv2-0:2 +E: ID_REVISION=6130 +E: ID_SERIAL=Generic_4-Port_USB_2.0_Hub +E: ID_USB_INTERFACES=:090001:090002: +E: ID_USB_MODEL=4-Port_USB_2.0_Hub +E: ID_USB_MODEL_ENC=4-Port\x20USB\x202.0\x20Hub +E: ID_USB_MODEL_ID=5411 +E: ID_USB_REVISION=6130 +E: ID_USB_SERIAL=Generic_4-Port_USB_2.0_Hub +E: ID_USB_VENDOR=Generic +E: ID_USB_VENDOR_ENC=Generic +E: ID_USB_VENDOR_ID=0bda +E: ID_VENDOR=Generic +E: ID_VENDOR_ENC=Generic +E: ID_VENDOR_FROM_DATABASE=Realtek Semiconductor Corp. +E: ID_VENDOR_ID=0bda +E: MAJOR=189 +E: MINOR=297 +E: PRODUCT=bda/5411/6130 +E: SUBSYSTEM=usb +E: TAGS=:snap_cups_ippeveprinter:seat:snap_cups_cupsd: +E: TYPE=9/0/2 +A: authorized=1\n +A: avoid_reset_quirk=0\n +A: bConfigurationValue=1\n +A: bDeviceClass=09\n +A: bDeviceProtocol=02\n +A: bDeviceSubClass=00\n +A: bMaxPacketSize0=64\n +A: bMaxPower=0mA\n +A: bNumConfigurations=1\n +A: bNumInterfaces= 1\n +A: bcdDevice=6130\n +A: bmAttributes=e0\n +H: bos_descriptors=050F2A00030710021EF400000A1003000E00010AFF0314100400F1ADF5EC1150054091EC71CA7101B6A2 +A: busnum=3\n +A: configuration= +H: descriptors=1201100209000240DA0B115430610102000109022900010100E0000904000001090001000705810301000C0904000101090002000705810301000C +A: dev=189:297\n +A: devnum=42\n +A: devpath=2\n +L: driver=../../../../../bus/usb/drivers/usb +L: firmware_node=../../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:11/device:12/device:14 +A: idProduct=5411\n +A: idVendor=0bda\n +A: ltm_capable=no\n +A: manufacturer=Generic\n +A: maxchild=4\n +A: physical_location/dock=no\n +A: physical_location/horizontal_position=left\n +A: physical_location/lid=no\n +A: physical_location/panel=unknown\n +A: physical_location/vertical_position=center\n +L: port=../3-0:1.0/usb3-port2 +A: power/active_duration=19225334\n +A: power/async=enabled\n +A: power/autosuspend=0\n +A: power/autosuspend_delay_ms=0\n +A: power/connected_duration=19337938\n +A: power/control=auto\n +A: power/level=auto\n +A: power/runtime_active_kids=1\n +A: power/runtime_active_time=19232222\n +A: power/runtime_enabled=enabled\n +A: power/runtime_status=active\n +A: power/runtime_suspended_time=105465\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=4-Port USB 2.0 Hub\n +A: quirks=0x0\n +A: removable=removable\n +A: rx_lanes=1\n +A: speed=480\n +A: tx_lanes=1\n +A: urbnum=2268\n +A: version= 2.10\n + +P: /devices/pci0000:00/0000:00:14.0/usb3 +N: bus/usb/003/001=12010002090001406B1D020014060302010109021900010100E0000904000001090000000705810304000C +E: BUSNUM=003 +E: CURRENT_TAGS=:seat:snap_cups_cupsd:snap_cups_ippeveprinter: +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=0614 +E: ID_SERIAL=Linux_6.14.0-37-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=0614 +E: ID_USB_SERIAL=Linux_6.14.0-37-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.14.0-37-generic_xhci-hcd +E: ID_USB_VENDOR_ENC=Linux\x206.14.0-37-generic\x20xhci-hcd +E: ID_USB_VENDOR_ID=1d6b +E: ID_VENDOR=Linux_6.14.0-37-generic_xhci-hcd +E: ID_VENDOR_ENC=Linux\x206.14.0-37-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/614 +E: SUBSYSTEM=usb +E: TAGS=:seat:snap_cups_cupsd:snap_cups_ippeveprinter: +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=0614\n +A: bmAttributes=e0\n +A: busnum=3\n +A: configuration= +H: descriptors=12010002090001406B1D020014060302010109021900010100E0000904000001090000000705810304000C +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:11/device:12 +A: idProduct=0002\n +A: idVendor=1d6b\n +A: interface_authorized_default=1\n +A: ltm_capable=no\n +A: manufacturer=Linux 6.14.0-37-generic xhci-hcd\n +A: maxchild=12\n +A: power/active_duration=1686863185\n +A: power/async=enabled\n +A: power/autosuspend=0\n +A: power/autosuspend_delay_ms=0\n +A: power/connected_duration=1686928088\n +A: power/control=auto\n +A: power/level=auto\n +A: power/runtime_active_kids=5\n +A: power/runtime_active_time=1686894465\n +A: power/runtime_enabled=enabled\n +A: power/runtime_status=active\n +A: power/runtime_suspended_time=3910\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=897487\n +A: version= 2.00\n + +P: /devices/pci0000:00/0000:00:14.0 +E: DRIVER=xhci_hcd +E: ID_MODEL_FROM_DATABASE=Meteor Lake-P USB 3.2 Gen 2x1 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:v00008086d00007E7Dsv00001028sd00000CB2bc0Csc03i30 +E: PCI_CLASS=C0330 +E: PCI_ID=8086:7E7D +E: PCI_SLOT_NAME=0000:00:14.0 +E: PCI_SUBSYS_ID=1028:0CB2 +E: SUBSYSTEM=pci +A: ari_enabled=0\n +A: broken_parity_status=0\n +A: class=0x0c0330\n +H: config=86807D7E060490022030030C1000800004002A195000000000000000000000000000000000000000000000002810B20C000000007000000000000000FF010000FD0134C08FC2FF8300000000000000003F6DDE0F000000000000000000000000326000000000000000000000000000000180C3C10800000000000000000000000590B7001804E0FE000000000000000009B014F01000400100000000C10A080000080E00001800008F50020000030000090000018680C00009001014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F200012000000 +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: dbc_poll_interval_ms=64\n +A: device=0x7e7d\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:11 +L: iommu=../../virtual/iommu/dmar1 +L: iommu_group=../../../kernel/iommu_groups/11 +A: irq=133\n +A: local_cpulist=0-13\n +A: local_cpus=3fff\n +A: modalias=pci:v00008086d00007E7Dsv00001028sd00000CB2bc0Csc03i30\n +A: msi_bus=1\n +A: msi_irqs/133=msi\n +A: msi_irqs/134=msi\n +A: msi_irqs/135=msi\n +A: msi_irqs/136=msi\n +A: msi_irqs/137=msi\n +A: msi_irqs/138=msi\n +A: msi_irqs/139=msi\n +A: msi_irqs/140=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 22 23 2112 23\nxHCI ring segments 75 75 4096 75\nbuffer-2048 0 0 2048 0\nbuffer-512 3 8 512 1\nbuffer-128 18 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=1686895728\n +A: power/runtime_enabled=enabled\n +A: power/runtime_status=active\n +A: power/runtime_suspended_time=2967\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=0x00000050192a0000 0x00000050192affff 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=0x20\n +A: subsystem_device=0x0cb2\n +A: subsystem_vendor=0x1028\n +A: vendor=0x8086\n + diff --git a/tests/meson.build b/tests/meson.build index 07c924be..b6e8bf95 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -52,6 +52,7 @@ drivers_tests = [ 'nb1010', 'egis0570', 'egismoc', + 'egis_etu905', 'egismoc-05a1', 'egismoc-0586', 'egismoc-0587',