diff --git a/libfprint/Makefile.am b/libfprint/Makefile.am index ebe13f8..c79012b 100644 --- a/libfprint/Makefile.am +++ b/libfprint/Makefile.am @@ -1,6 +1,6 @@ lib_LTLIBRARIES = libfprint.la -noinst_PROGRAMS = fprint-list-hal-info -MOSTLYCLEANFILES = $(hal_fdi_DATA) +noinst_PROGRAMS = fprint-list-hal-info fprint-list-udev-rules +MOSTLYCLEANFILES = $(hal_fdi_DATA) $(udev_rules_DATA) UPEKTS_SRC = drivers/upekts.c UPEKTC_SRC = drivers/upektc.c @@ -66,6 +66,15 @@ hal_fdidir = $(datadir)/hal/fdi/information/20thirdparty/ $(hal_fdi_DATA): fprint-list-hal-info $(builddir)/fprint-list-hal-info > $@ +fprint_list_udev_rules_SOURCES = fprint-list-udev-rules.c +fprint_list_udev_rules_CFLAGS = -fvisibility=hidden -I$(srcdir)/nbis/include $(LIBUSB_CFLAGS) $(GLIB_CFLAGS) $(IMAGEMAGICK_CFLAGS) $(CRYPTO_CFLAGS) $(AM_CFLAGS) +fprint_list_udev_rules_LDADD = $(builddir)/libfprint.la + +udev_rules_DATA = 60-fprint-autosuspend.rules +udev_rulesdir = $(sysconfdir)/udev/rules.d/ + +$(udev_rules_DATA): fprint-list-udev-rules + $(builddir)/fprint-list-udev-rules > $@ if ENABLE_UPEKTS DRIVER_SRC += $(UPEKTS_SRC) diff --git a/libfprint/fprint-list-udev-rules.c b/libfprint/fprint-list-udev-rules.c new file mode 100644 index 0000000..76a1471 --- /dev/null +++ b/libfprint/fprint-list-udev-rules.c @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2009 Red Hat + * Copyright (C) 2008 Bastien Nocera + * Copyright (C) 2008 Timo Hoenig , + * + * 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 +#include + +#include "fp_internal.h" + +static const struct usb_id whitelist_id_table[] = { + { .vendor = 0x08ff, .product = 0x2810 }, + { 0, 0, 0, }, +}; + +static const struct usb_id blacklist_id_table[] = { + { .vendor = 0x0483, .product = 0x2016 }, + { 0, 0, 0 }, +}; + +struct fp_driver whitelist = { + .id_table = whitelist_id_table, +}; + +static void print_driver (struct fp_driver *driver) +{ + int i, j, blacklist; + + for (i = 0; driver->id_table[i].vendor != 0; i++) { + blacklist = 0; + for (j = 0; blacklist_id_table[j].vendor != 0; j++) { + if (driver->id_table[i].vendor == blacklist_id_table[j].vendor && + driver->id_table[j].product == blacklist_id_table[j].product) { + blacklist = 1; + } + } + if (blacklist) + continue; + + printf ("SUBSYSTEM==\"usb\", ATTRS{idVendor}==\"%04x\", ATTRS{idProduct}==\"%04x\", ATTRS{dev}==\"*\", ATTR{power/level}=\"auto\"\n", driver->id_table[i].vendor, driver->id_table[i].product); + } +} + +int main (int argc, char **argv) +{ + struct fp_driver **list; + guint i; + + list = fprint_get_drivers (); + + for (i = 0; list[i] != NULL; i++) { + print_driver (list[i]); + } + + print_driver (&whitelist); + + return 0; +}