diff --git a/dbus_service/dbus-service b/dbus_service/dbus-service index db01002..c19a6f7 100755 --- a/dbus_service/dbus-service +++ b/dbus_service/dbus-service @@ -29,6 +29,7 @@ from validitysensor.usb import usb from validitysensor.sid import sid_from_string from validitysensor.db import subtype_to_string, db, SidIdentity, User from validitysensor.sensor import sensor, RebootException +from validitysensor.winbio_constants import finger_ids GLib.threads_init() @@ -141,7 +142,14 @@ class Device(dbus.service.Object): def EnrollStart(self, user, finger_name): logging.debug('In EnrollStart %s for %s' % (finger_name, user)) + # left-ring-finger => LH + hand = 'LH' if finger_name[0] == 'l' else 'RH' + # left-ring-finger => RING_FINGER + generic_finger = '_'.join(finger_name.split('-')[1:]).upper() + winbio_name = 'WINBIO_ANSI_381_POS_' + hand + '_' + generic_finger + usr = self.user2identity(user) + index = finger_ids.get(winbio_name, None) def update_cb(rsp, e): if e is not None: @@ -151,7 +159,7 @@ class Device(dbus.service.Object): def run(): try: - sensor.enroll(usr, 0xf5, update_cb) # TODO parse the finger name + sensor.enroll(usr, index, update_cb) self.EnrollStatus('enroll-completed', True) except usb_core.USBError as e: logging.exception(e) @@ -161,9 +169,16 @@ class Device(dbus.service.Object): logging.exception(e) self.EnrollStatus('enroll-failed', True) - thread = Thread(target=run) - thread.daemon = True - thread.start() + if index == None: + logging.exception( + 'Unknown finger name passed to enroll? ' + + finger_name + ' (' + winbio_name + ')' + ) + self.EnrollStatus('enroll-failed', True) + else: + thread = Thread(target=run) + thread.daemon = True + thread.start() @dbus.service.signal(dbus_interface=INTERFACE_NAME, signature='sb') def VerifyStatus(self, result, done): diff --git a/validitysensor/db.py b/validitysensor/db.py index 6920be4..fa8c4f3 100644 --- a/validitysensor/db.py +++ b/validitysensor/db.py @@ -6,6 +6,7 @@ from binascii import hexlify from .blobs import db_write_enable from .flash import call_cleanups from .sid import * +from .winbio_constants import finger_names class UserStorage(): def __init__(self, dbid, name): @@ -26,10 +27,8 @@ class User(): return '' % (self.dbid, repr(self.identity), repr(self.fingers)) def subtype_to_string(s: int): - if s < 0xf5 or s > 0xfe: - return 'Unknown' - - return 'WINBIO_FINGER_UNSPECIFIED_POS_%02d' % (s - 0xf5 + 1) + finger_name = finger_names.get(s, None) + return finger_name or 'Unknown' def parse_user_storage(rsp): rc, = unpack('