ef805f2341
It can be convenient for device users to check what it supports, without having multiple functions to check each single feature. So expose this and add tests.
82 lines
2.2 KiB
Python
Executable file
82 lines
2.2 KiB
Python
Executable file
#!/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() == "goodixmoc"
|
|
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.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('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
|