fprint-list: Add SPI devices to supported list

This will make them show up on the website.
This commit is contained in:
Benjamin Berg 2021-06-25 12:28:13 +02:00
parent dbd89929b9
commit 145f7287fa
1 changed files with 76 additions and 23 deletions

View File

@ -28,8 +28,8 @@
GHashTable *printed = NULL;
static GList *
insert_drivers (GList *list)
static void
insert_drivers (GList **usb_list, GList **spi_list)
{
g_autoptr(GArray) drivers = fpi_get_driver_types ();
gint i;
@ -41,34 +41,70 @@ insert_drivers (GList *list)
g_autoptr(FpDeviceClass) cls = g_type_class_ref (driver);
const FpIdEntry *entry;
if (cls->type != FP_DEVICE_TYPE_USB)
continue;
for (entry = cls->id_table; entry->vid; entry++)
switch (cls->type)
{
char *key;
case FP_DEVICE_TYPE_USB:
key = g_strdup_printf ("%04x:%04x", entry->vid, entry->pid);
if (g_hash_table_lookup (printed, key) != NULL)
for (entry = cls->id_table; entry->vid; entry++)
{
g_free (key);
continue;
char *key;
key = g_strdup_printf ("%04x:%04x", entry->vid, entry->pid);
if (g_hash_table_lookup (printed, key) != NULL)
{
g_free (key);
continue;
}
g_hash_table_insert (printed, key, GINT_TO_POINTER (1));
*usb_list = g_list_prepend (*usb_list,
g_strdup_printf ("%s | %s\n", key, cls->full_name));
}
break;
g_hash_table_insert (printed, key, GINT_TO_POINTER (1));
case FP_DEVICE_TYPE_UDEV:
for (entry = cls->id_table; entry->udev_types; entry++)
{
char *key;
list = g_list_prepend (list, g_strdup_printf ("%s | %s\n", key, cls->full_name));
/* Need SPI device */
if ((entry->udev_types & FPI_DEVICE_UDEV_SUBTYPE_SPIDEV) == 0)
continue;
key = g_strdup_printf ("SPI:%s:%04x:%04x", entry->spi_acpi_id, entry->hid_id.vid, entry->hid_id.pid);
if (g_hash_table_lookup (printed, key) != NULL)
{
g_free (key);
continue;
}
g_hash_table_insert (printed, key, GINT_TO_POINTER (1));
if (entry->udev_types & FPI_DEVICE_UDEV_SUBTYPE_HIDRAW)
*spi_list = g_list_prepend (*spi_list,
g_strdup_printf ("%s | %04x:%04x | %s\n", entry->spi_acpi_id, entry->hid_id.vid, entry->hid_id.pid, cls->full_name));
else
*spi_list = g_list_prepend (*spi_list,
g_strdup_printf ("%s | - | %s\n", entry->spi_acpi_id, cls->full_name));
}
break;
case FP_DEVICE_TYPE_VIRTUAL:
default:
break;
}
}
return list;
}
int
main (int argc, char **argv)
{
GList *list, *l;
GList *usb_list = NULL;
GList *spi_list = NULL;
GList *l;
setlocale (LC_ALL, "");
@ -83,19 +119,36 @@ main (int argc, char **argv)
g_print ("\n");
g_print ("This is a list of supported devices in libfprint's development version. Those drivers might not all be available in the stable, released version. If in doubt, contact your distribution or systems integrator for details.\n");
g_print ("\n");
insert_drivers (&usb_list, &spi_list);
g_print ("## USB devices\n");
g_print ("\n");
g_print ("USB ID | Driver\n");
g_print ("------------ | ------------\n");
list = NULL;
list = insert_drivers (list);
list = g_list_sort (list, (GCompareFunc) g_strcmp0);
for (l = list; l != NULL; l = l->next)
usb_list = g_list_sort (usb_list, (GCompareFunc) g_strcmp0);
for (l = usb_list; l != NULL; l = l->next)
g_print ("%s", (char *) l->data);
g_print ("\n");
g_list_free_full (usb_list, g_free);
g_print ("## SPI devices\n");
g_print ("\n");
g_print ("The ACPI ID represents the SPI interface. Some sensors are also connected to a HID device (Human Input Device) for side-channel requests such as resets.\n");
g_print ("\n");
g_print ("ACPI ID | HID ID | Driver\n");
g_print ("------------ | ------------ | ------------\n");
spi_list = g_list_sort (spi_list, (GCompareFunc) g_strcmp0);
for (l = spi_list; l != NULL; l = l->next)
g_print ("%s", (char *) l->data);
g_print ("\n");
g_list_free_full (usb_list, g_free);
g_list_free_full (list, g_free);
g_hash_table_destroy (printed);
return 0;