mafpmoc: Support Microarray Inc. series fingerprint sensor PID 8012

This commit is contained in:
王毅
2026-06-18 15:47:34 +02:00
committed by Marco Trevisan (Treviño)
parent 4610f2285e
commit 7cf358d42a
9 changed files with 3269 additions and 0 deletions
Binary file not shown.
+90
View File
@@ -0,0 +1,90 @@
#!/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() == "mafpmoc"
assert not d.has_feature(FPrint.DeviceFeature.CAPTURE)
assert d.has_feature(FPrint.DeviceFeature.IDENTIFY)
assert d.has_feature(FPrint.DeviceFeature.VERIFY)
assert not d.has_feature(FPrint.DeviceFeature.DUPLICATES_CHECK)
assert d.has_feature(FPrint.DeviceFeature.STORAGE)
assert d.has_feature(FPrint.DeviceFeature.STORAGE_LIST)
assert d.has_feature(FPrint.DeviceFeature.STORAGE_DELETE)
assert d.has_feature(FPrint.DeviceFeature.STORAGE_CLEAR)
d.open_sync()
d.clear_storage_sync()
template = FPrint.Print.new(d)
def enroll_progress(*args):
assert d.get_finger_status() == FPrint.FingerStatusFlags.NEEDED
print('enroll progress: ' + str(args))
def identify_done(dev, res):
global identified
identified = True
identify_match, identify_print = dev.identify_finish(res)
print('indentification_done: ', identify_match, identify_print)
assert identify_match.equal(identify_print)
# List, enroll, list, verify, identify, delete
print("enrolling")
assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
p = d.enroll_sync(template, None, enroll_progress, None)
assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
print("enroll done")
print("listing")
stored = d.list_prints_sync()
print("listing done")
assert len(stored) == 1
assert stored[0].equal(p)
print("verifying")
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")
del p
assert verify_res == True
identified = False
deserialized_prints = []
for p in stored:
deserialized_prints.append(FPrint.Print.deserialize(p.serialize()))
assert deserialized_prints[-1].equal(p)
del stored
print('async identifying')
d.identify(deserialized_prints, callback=identify_done)
del deserialized_prints
while not identified:
ctx.iteration(True)
print("deleting")
d.delete_print_sync(p)
print("delete done")
d.close_sync()
del d
del c
+375
View File
@@ -0,0 +1,375 @@
P: /devices/pci0000:00/0000:00:11.0/0000:02:00.0/usb1/1-2/1-2.1
N: bus/usb/001/013=12011001000000087432128000010102030109022700010100A0320904000003FF010100070583024000010705030240000107058203100001
E: DEVNAME=/dev/bus/usb/001/013
E: DEVTYPE=usb_device
E: DRIVER=usb
E: PRODUCT=3274/8012/100
E: TYPE=0/0/0
E: BUSNUM=001
E: DEVNUM=013
E: MAJOR=189
E: MINOR=12
E: SUBSYSTEM=usb
E: ID_VENDOR=MicroarrayTechnology
E: ID_VENDOR_ENC=MicroarrayTechnology
E: ID_VENDOR_ID=3274
E: ID_MODEL=MAFP_General_Device
E: ID_MODEL_ENC=MAFP\x20General\x20Device\x20
E: ID_MODEL_ID=8012
E: ID_REVISION=0100
E: ID_SERIAL=MicroarrayTechnology_MAFP_General_Device_1120031604020321
E: ID_SERIAL_SHORT=1120031604020321
E: ID_BUS=usb
E: ID_USB_INTERFACES=:ff0101:
E: ID_PATH=pci-0000:02:00.0-usb-0:2.1
E: ID_PATH_TAG=pci-0000_02_00_0-usb-0_2_1
E: ID_FOR_SEAT=usb-pci-0000_02_00_0-usb-0_2_1
E: TAGS=:seat:
E: CURRENT_TAGS=:seat:
A: authorized=1\n
A: avoid_reset_quirk=0\n
A: bConfigurationValue=1\n
A: bDeviceClass=00\n
A: bDeviceProtocol=00\n
A: bDeviceSubClass=00\n
A: bMaxPacketSize0=8\n
A: bMaxPower=100mA\n
A: bNumConfigurations=1\n
A: bNumInterfaces= 1\n
A: bcdDevice=0100\n
A: bmAttributes=a0\n
A: busnum=1\n
A: configuration=
H: descriptors=12011001000000087432128000010102030109022700010100A0320904000003FF010100070583024000010705030240000107058203100001
A: dev=189:12\n
A: devnum=13\n
A: devpath=2.1\n
L: driver=../../../../../../../bus/usb/drivers/usb
A: idProduct=8012\n
A: idVendor=3274\n
A: ltm_capable=no\n
A: manufacturer=MicroarrayTechnology\n
A: maxchild=0\n
L: port=../1-2:1.0/1-2-port1
A: power/active_duration=28368880\n
A: power/async=enabled\n
A: power/autosuspend=2\n
A: power/autosuspend_delay_ms=2000\n
A: power/connected_duration=28368880\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=28368091\n
A: power/runtime_enabled=forbidden\n
A: power/runtime_status=active\n
A: power/runtime_suspended_time=0\n
A: power/runtime_usage=2\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=MAFP General Device \n
A: quirks=0x0\n
A: removable=unknown\n
A: rx_lanes=1\n
A: serial=1120031604020321\n
A: speed=12\n
A: tx_lanes=1\n
A: urbnum=3289\n
A: version= 1.10\n
P: /devices/pci0000:00/0000:00:11.0/0000:02:00.0/usb1/1-2
N: bus/usb/001/003=12011001090000080F0E020000010102000109021900010101E000090400000109000001070581030100FF
E: DEVNAME=/dev/bus/usb/001/003
E: DEVTYPE=usb_device
E: DRIVER=usb
E: PRODUCT=e0f/2/100
E: TYPE=9/0/0
E: BUSNUM=001
E: DEVNUM=003
E: MAJOR=189
E: MINOR=2
E: SUBSYSTEM=usb
E: ID_VENDOR=VMware__Inc.
E: ID_VENDOR_ENC=VMware\x2c\x20Inc.
E: ID_VENDOR_ID=0e0f
E: ID_MODEL=VMware_Virtual_USB_Hub
E: ID_MODEL_ENC=VMware\x20Virtual\x20USB\x20Hub
E: ID_MODEL_ID=0002
E: ID_REVISION=0100
E: ID_SERIAL=VMware__Inc._VMware_Virtual_USB_Hub
E: ID_BUS=usb
E: ID_USB_INTERFACES=:090000:
E: ID_VENDOR_FROM_DATABASE=VMware, Inc.
E: ID_MODEL_FROM_DATABASE=Virtual USB Hub
E: ID_PATH=pci-0000:02:00.0-usb-0:2
E: ID_PATH_TAG=pci-0000_02_00_0-usb-0_2
E: ID_FOR_SEAT=usb-pci-0000_02_00_0-usb-0_2
E: TAGS=:seat:
E: CURRENT_TAGS=:seat:
A: authorized=1\n
A: avoid_reset_quirk=0\n
A: bConfigurationValue=1\n
A: bDeviceClass=09\n
A: bDeviceProtocol=00\n
A: bDeviceSubClass=00\n
A: bMaxPacketSize0=8\n
A: bMaxPower=0mA\n
A: bNumConfigurations=1\n
A: bNumInterfaces= 1\n
A: bcdDevice=0100\n
A: bmAttributes=e0\n
A: busnum=1\n
A: configuration=VMware, Inc.\n
H: descriptors=12011001090000080F0E020000010102000109021900010101E000090400000109000001070581030100FF
A: dev=189:2\n
A: devnum=3\n
A: devpath=2\n
L: driver=../../../../../../bus/usb/drivers/usb
A: idProduct=0002\n
A: idVendor=0e0f\n
A: ltm_capable=no\n
A: manufacturer=VMware, Inc.\n
A: maxchild=7\n
L: port=../1-0:1.0/usb1-port2
A: power/active_duration=68737416\n
A: power/async=enabled\n
A: power/autosuspend=0\n
A: power/autosuspend_delay_ms=0\n
A: power/connected_duration=352042384\n
A: power/control=auto\n
A: power/level=auto\n
A: power/runtime_active_kids=1\n
A: power/runtime_active_time=68737343\n
A: power/runtime_enabled=enabled\n
A: power/runtime_status=active\n
A: power/runtime_suspended_time=283304757\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=VMware Virtual USB Hub\n
A: quirks=0x0\n
A: removable=unknown\n
A: rx_lanes=1\n
A: speed=12\n
A: tx_lanes=1\n
A: urbnum=2459\n
A: version= 1.10\n
P: /devices/pci0000:00/0000:00:11.0/0000:02:00.0/usb1
N: bus/usb/001/001=12011001090000406B1D010005060302010109021900010100E000090400000109000000070581030200FF
E: DEVNAME=/dev/bus/usb/001/001
E: DEVTYPE=usb_device
E: DRIVER=usb
E: PRODUCT=1d6b/1/605
E: TYPE=9/0/0
E: BUSNUM=001
E: DEVNUM=001
E: MAJOR=189
E: MINOR=0
E: SUBSYSTEM=usb
E: ID_VENDOR=Linux_6.5.0-27-generic_uhci_hcd
E: ID_VENDOR_ENC=Linux\x206.5.0-27-generic\x20uhci_hcd
E: ID_VENDOR_ID=1d6b
E: ID_MODEL=UHCI_Host_Controller
E: ID_MODEL_ENC=UHCI\x20Host\x20Controller
E: ID_MODEL_ID=0001
E: ID_REVISION=0605
E: ID_SERIAL=Linux_6.5.0-27-generic_uhci_hcd_UHCI_Host_Controller_0000:02:00.0
E: ID_SERIAL_SHORT=0000:02:00.0
E: ID_BUS=usb
E: ID_USB_INTERFACES=:090000:
E: ID_VENDOR_FROM_DATABASE=Linux Foundation
E: ID_AUTOSUSPEND=1
E: ID_MODEL_FROM_DATABASE=1.1 root hub
E: ID_PATH=pci-0000:02:00.0
E: ID_PATH_TAG=pci-0000_02_00_0
E: ID_FOR_SEAT=usb-pci-0000_02_00_0
E: TAGS=:seat:
E: CURRENT_TAGS=:seat:
A: authorized=1\n
A: authorized_default=1\n
A: avoid_reset_quirk=0\n
A: bConfigurationValue=1\n
A: bDeviceClass=09\n
A: bDeviceProtocol=00\n
A: bDeviceSubClass=00\n
A: bMaxPacketSize0=64\n
A: bMaxPower=0mA\n
A: bNumConfigurations=1\n
A: bNumInterfaces= 1\n
A: bcdDevice=0605\n
A: bmAttributes=e0\n
A: busnum=1\n
A: configuration=
H: descriptors=12011001090000406B1D010005060302010109021900010100E000090400000109000000070581030200FF
A: dev=189:0\n
A: devnum=1\n
A: devpath=0\n
L: driver=../../../../../bus/usb/drivers/usb
A: idProduct=0001\n
A: idVendor=1d6b\n
A: interface_authorized_default=1\n
A: ltm_capable=no\n
A: manufacturer=Linux 6.5.0-27-generic uhci_hcd\n
A: maxchild=2\n
A: power/active_duration=352042808\n
A: power/async=enabled\n
A: power/autosuspend=0\n
A: power/autosuspend_delay_ms=0\n
A: power/connected_duration=352042820\n
A: power/control=auto\n
A: power/level=auto\n
A: power/runtime_active_kids=2\n
A: power/runtime_active_time=352042818\n
A: power/runtime_enabled=enabled\n
A: power/runtime_status=active\n
A: power/runtime_suspended_time=0\n
A: power/runtime_usage=0\n
A: power/wakeup=disabled\n
A: power/wakeup_abort_count=\n
A: power/wakeup_active=\n
A: power/wakeup_active_count=\n
A: power/wakeup_count=\n
A: power/wakeup_expire_count=\n
A: power/wakeup_last_time_ms=\n
A: power/wakeup_max_time_ms=\n
A: power/wakeup_total_time_ms=\n
A: product=UHCI Host Controller\n
A: quirks=0x0\n
A: removable=unknown\n
A: rx_lanes=1\n
A: serial=0000:02:00.0\n
A: speed=12\n
A: tx_lanes=1\n
A: urbnum=157\n
A: version= 1.10\n
P: /devices/pci0000:00/0000:00:11.0/0000:02:00.0
E: DRIVER=uhci_hcd
E: PCI_CLASS=C0300
E: PCI_ID=15AD:0774
E: PCI_SUBSYS_ID=15AD:1976
E: PCI_SLOT_NAME=0000:02:00.0
E: MODALIAS=pci:v000015ADd00000774sv000015ADsd00001976bc0Csc03i00
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=UHCI
E: ID_VENDOR_FROM_DATABASE=VMware
E: ID_MODEL_FROM_DATABASE=USB1.1 UHCI Controller
A: acpi_index=16777728\n
A: ari_enabled=0\n
A: broken_parity_status=0\n
A: class=0x0c0300\n
H: config=AD157407050090020000030C0040000000000000000000000000000000000000812000000000000000000000AD1576190000000040000000000000000A010000130006030000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
A: consistent_dma_mask_bits=32\n
A: d3cold_allowed=0\n
A: device=0x0774\n
A: dma_mask_bits=32\n
L: driver=../../../../bus/pci/drivers/uhci_hcd
A: driver_override=(null)\n
A: enable=1\n
L: firmware_node=../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:05/device:06
A: irq=18\n
A: label=usb\n
A: local_cpulist=0-1\n
A: local_cpus=00000000,00000000,00000000,00000003\n
A: modalias=pci:v000015ADd00000774sv000015ADsd00001976bc0Csc03i00\n
A: msi_bus=1\n
A: numa_node=-1\n
A: pools=poolinfo - 0.1\nuhci_qh 18 32 128 1\nuhci_td 11 192 64 3\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=on\n
A: power/runtime_active_kids=1\n
A: power/runtime_active_time=352043941\n
A: power/runtime_enabled=forbidden\n
A: power/runtime_status=active\n
A: power/runtime_suspended_time=0\n
A: power/runtime_usage=2\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: reset_method=af_flr bus\n
A: resource=0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000002080 0x000000000000209f 0x0000000000040101\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=0x00\n
A: subsystem_device=0x1976\n
A: subsystem_vendor=0x15ad\n
A: vendor=0x15ad\n
P: /devices/pci0000:00/0000:00:11.0
E: PCI_CLASS=60401
E: PCI_ID=15AD:0790
E: PCI_SUBSYS_ID=15AD:0790
E: PCI_SLOT_NAME=0000:00:11.0
E: MODALIAS=pci:v000015ADd00000790sv000015ADsd00000790bc06sc04i01
E: SUBSYSTEM=pci
E: ID_PCI_CLASS_FROM_DATABASE=Bridge
E: ID_PCI_SUBCLASS_FROM_DATABASE=PCI bridge
E: ID_PCI_INTERFACE_FROM_DATABASE=Subtractive decode
E: ID_VENDOR_FROM_DATABASE=VMware
E: ID_MODEL_FROM_DATABASE=PCI bridge
A: ari_enabled=0\n
A: broken_parity_status=0\n
A: class=0x060401\n
H: config=AD1590070700900202010406084001000000000000000000000202442030800250FDF0FDB1E7F1E70000000000000000000000004000000000000000FF0006000D000000AD15900700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
A: consistent_dma_mask_bits=32\n
A: d3cold_allowed=0\n
A: device=0x0790\n
A: dma_mask_bits=32\n
A: driver_override=(null)\n
A: enable=1\n
L: firmware_node=../../LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:05
A: irq=0\n
A: local_cpulist=0-1\n
A: local_cpus=00000000,00000000,00000000,00000003\n
A: modalias=pci:v000015ADd00000790sv000015ADsd00000790bc06sc04i01\n
A: msi_bus=1\n
A: numa_node=-1\n
A: power/async=enabled\n
A: power/control=on\n
A: power/runtime_active_kids=5\n
A: power/runtime_active_time=352044194\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: power_state=D0\n
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 0x0000000000003fff 0x0000000000000100\n0x00000000fd500000 0x00000000fdffffff 0x0000000000000200\n0x00000000e7b00000 0x00000000e7ffffff 0x0000000000102201\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n
A: revision=0x02\n
A: secondary_bus_number=2\n
A: subordinate_bus_number=2\n
A: subsystem_device=0x0790\n
A: subsystem_vendor=0x15ad\n
A: vendor=0x15ad\n
A: waiting_for_supplier=0\n