Tag fingerprint devices in HAL

Tag all the fprint supported devices in HAL. Patch from
myself and Timo Hoenig <thoenig@suse.de>.
This commit is contained in:
Bastien Nocera 2008-10-30 15:02:52 +00:00 committed by Daniel Drake
parent 7672c43cea
commit 7c83b6d825
4 changed files with 116 additions and 0 deletions

View file

@ -1,4 +1,5 @@
lib_LTLIBRARIES = libfprint.la lib_LTLIBRARIES = libfprint.la
noinst_PROGRAMS = fprint-list-hal-info
UPEKTS_SRC = drivers/upekts.c UPEKTS_SRC = drivers/upekts.c
UPEKTC_SRC = drivers/upektc.c UPEKTC_SRC = drivers/upektc.c
@ -54,6 +55,17 @@ libfprint_la_CFLAGS = -fvisibility=hidden -I$(srcdir)/nbis/include $(LIBUSB_CFLA
libfprint_la_LDFLAGS = -version-info @lt_major@:@lt_revision@:@lt_age@ libfprint_la_LDFLAGS = -version-info @lt_major@:@lt_revision@:@lt_age@
libfprint_la_LIBADD = -lm $(LIBUSB_LIBS) $(GLIB_LIBS) $(CRYPTO_LIBS) libfprint_la_LIBADD = -lm $(LIBUSB_LIBS) $(GLIB_LIBS) $(CRYPTO_LIBS)
fprint_list_hal_info_SOURCES = fprint-list-hal-info.c
fprint_list_hal_info_CFLAGS = -fvisibility=hidden -I$(srcdir)/nbis/include $(LIBUSB_CFLAGS) $(GLIB_CFLAGS) $(IMAGEMAGICK_CFLAGS) $(CRYPTO_CFLAGS) $(AM_CFLAGS)
fprint_list_hal_info_LDADD = $(builddir)/libfprint.la
hal_fdi_DATA = 10-fingerprint-reader-fprint.fdi
hal_fdidir = $(datadir)/hal/fdi/information/20thirdparty/
$(hal_fdi_DATA): fprint-list-hal-info
$(builddir)/fprint-list-hal-info > $@
if ENABLE_UPEKTS if ENABLE_UPEKTS
DRIVER_SRC += $(UPEKTS_SRC) DRIVER_SRC += $(UPEKTS_SRC)
endif endif

View file

@ -375,6 +375,24 @@ static void register_drivers(void)
} }
} }
API_EXPORTED struct fp_driver **fprint_get_drivers (void)
{
GPtrArray *array;
unsigned int i;
array = g_ptr_array_new ();
for (i = 0; i < G_N_ELEMENTS(primitive_drivers); i++)
g_ptr_array_add (array, primitive_drivers[i]);
for (i = 0; i < G_N_ELEMENTS(img_drivers); i++)
g_ptr_array_add (array, &(img_drivers[i]->driver));
/* Add a null item terminating the array */
g_ptr_array_add (array, NULL);
return (struct fp_driver **) g_ptr_array_free (array, FALSE);
}
static struct fp_driver *find_supporting_driver(libusb_device *udev, static struct fp_driver *find_supporting_driver(libusb_device *udev,
const struct usb_id **usb_id) const struct usb_id **usb_id)
{ {

View file

@ -91,6 +91,8 @@ enum fp_dev_state {
DEV_STATE_IDENTIFY_STOPPING, DEV_STATE_IDENTIFY_STOPPING,
}; };
struct fp_driver **fprint_get_drivers (void);
struct fp_dev { struct fp_dev {
struct fp_driver *drv; struct fp_driver *drv;
libusb_device_handle *udev; libusb_device_handle *udev;

View file

@ -0,0 +1,84 @@
/*
* Helper binary for creating a HAL FDI file for supported devices
* Copyright (C) 2008 Bastien Nocera <hadess@hadess.net>
* Copyright (C) 2008 Timo Hoenig <thoenig@suse.de>, <thoenig@nouse.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <config.h>
#include <stdio.h>
#include "fp_internal.h"
/* FDI entry example:
*
* <!-- AuthenTec AES2501 -->
* <match key="usb.vendor_id" int="0x08ff">
* <match key="usb.product_id" int="0x2580">
* <merge key="info.category" type="string">biometric.fingerprint_reader</merge>
* <append key="biometric.fingerprint_reader.access_method" type="strlist">libfprint</append>
* <append key="info.capabilities" type="strlist">biometric</append>
* <append key="info.capabilities" type="strlist">biometric.fingerprint_reader</append>
* <merge key="biometric.fingerprint_reader.libfprint.driver" type="string">aes2501</merge>
* <merge key="biometric.fingerprint_reader.libfprint.support" type="bool">true</merge>
* </match>
* </match>
*
*/
static void print_driver (struct fp_driver *driver)
{
int i;
for (i = 0; driver->id_table[i].vendor != 0; i++) {
printf (" <!-- %s -->\n", fp_driver_get_full_name (driver));
printf (" <match key=\"usb.vendor_id\" int=\"0x%04x\">\n", driver->id_table[i].vendor);
printf (" <match key=\"usb.product_id\" int=\"0x%04x\">\n", driver->id_table[i].product);
printf (" <merge key=\"info.category\" type=\"string\">biometric.fingerprint_reader</merge>\n");
printf (" <append key=\"biometric.fingerprint_reader.access_method\" type=\"strlist\">libfprint</append>\n");
printf (" <append key=\"info.capabilities\" type=\"strlist\">biometric</append>\n");
printf (" <append key=\"info.capabilities\" type=\"strlist\">biometric.fingerprint_reader</append>\n");
printf (" <merge key=\"biometric.fingerprint_reader.libfprint.driver\" type=\"string\">%s</merge>\n", driver->name);
printf (" <merge key=\"biometric.fingerprint_reader.libfprint.support\" type=\"bool\">true</merge>\n");
printf (" </match>\n");
printf (" </match>\n");
}
}
static void print_imaging_driver (struct fp_img_driver *driver)
{
print_driver (&(driver->driver));
}
int main (int argc, char **argv)
{
struct fp_driver **list;
guint i;
list = fprint_get_drivers ();
printf ("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n");
printf ("<!-- Created from libfprint %s -->\n", VERSION);
printf ("<deviceinfo version=\"0.2\">\n");
for (i = 0; list[i] != NULL; i++) {
print_driver (list[i]);
}
printf ("</deviceinfo>\n");
return 0;
}