84 lines
2.2 KiB
Python
84 lines
2.2 KiB
Python
|
#!/usr/bin/python3
|
||
|
|
||
|
import gi
|
||
|
gi.require_version('FPrint', '2.0')
|
||
|
from gi.repository import FPrint, GLib
|
||
|
|
||
|
ctx = GLib.main_context_default()
|
||
|
|
||
|
c = FPrint.Context()
|
||
|
c.enumerate()
|
||
|
devices = c.get_devices()
|
||
|
|
||
|
d = devices[0]
|
||
|
del devices
|
||
|
|
||
|
assert d.get_driver() == "elanmoc"
|
||
|
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 not d.has_feature(FPrint.DeviceFeature.STORAGE_CLEAR)
|
||
|
|
||
|
d.open_sync()
|
||
|
|
||
|
template = FPrint.Print.new(d)
|
||
|
|
||
|
def enroll_progress(*args):
|
||
|
#assert d.get_finger_status() == FPrint.FingerStatusFlags.NEEDED
|
||
|
print("finger status: ", d.get_finger_status())
|
||
|
print('enroll progress: ' + str(args))
|
||
|
|
||
|
def identify_done(dev, res):
|
||
|
global identified
|
||
|
identified = True
|
||
|
identify_match, identify_print = dev.identify_finish(res)
|
||
|
print('indentification_done: ', identify_match, identify_print)
|
||
|
assert identify_match.equal(identify_print)
|
||
|
|
||
|
# 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
|