From 874d8164b4a556c6c79f9dc2782a9b79a77641be Mon Sep 17 00:00:00 2001 From: Bastien Nocera Date: Thu, 20 Nov 2008 17:38:12 +0000 Subject: [PATCH] Add ScanType and NumberEnrollStages properties Export the type of scan the device performs, and, when the device is claimed, the number of enrollment stages. --- TODO | 2 -- pam/pam_fprintd.c | 2 +- src/device.c | 25 ++++++++++++++++++++----- src/device.xml | 2 +- tests/list.c | 5 ++++- 5 files changed, 26 insertions(+), 10 deletions(-) diff --git a/TODO b/TODO index 2fd4cb8..af9f584 100644 --- a/TODO +++ b/TODO @@ -26,7 +26,5 @@ Review error cases, and possible errors Do we swipe or scan, devices would know -Export fp_dev_get_nr_enroll_stages and swipe type through properties - Add a "done" argument to verify and enroll result signals, make it easier to know when we're done. diff --git a/pam/pam_fprintd.c b/pam/pam_fprintd.c index 8a4256d..b104d0d 100644 --- a/pam/pam_fprintd.c +++ b/pam/pam_fprintd.c @@ -302,7 +302,7 @@ static int do_verify(DBusGConnection *connection, GMainLoop *loop, pam_handle_t if (dbus_g_proxy_call (dev, "GetProperties", &error, G_TYPE_INVALID, dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, G_TYPE_STRING), &props, G_TYPE_INVALID)) { - data->driver = g_strdup (g_hash_table_lookup (props, "Name")); + data->driver = g_value_dup_string (g_hash_table_lookup (props, "Name")); g_hash_table_destroy (props); } if (!data->driver) diff --git a/src/device.c b/src/device.c index 0619fa8..e05cdf4 100644 --- a/src/device.c +++ b/src/device.c @@ -1140,15 +1140,30 @@ static void fprint_device_get_properties (FprintDevice *rdev, { FprintDevicePrivate *priv = DEVICE_GET_PRIVATE(rdev); GHashTable *table; - struct fp_driver *driver; - const char *driver_name; + GValue *value; table = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, g_free); - driver = fp_dscv_dev_get_driver (priv->ddev); - driver_name = fp_driver_get_full_name (driver); - g_hash_table_insert (table, "Name", g_strdup (driver_name)); + value = g_new0 (GValue, 1); + g_value_init (value, G_TYPE_STRING); + g_value_set_string (value, fp_driver_get_full_name (fp_dscv_dev_get_driver (priv->ddev))); + g_hash_table_insert (table, "Name", value); + + value = g_new0 (GValue, 1); + g_value_init (value, G_TYPE_STRING); + g_value_set_static_string (value, + fp_driver_get_scan_type (fp_dscv_dev_get_driver (priv->ddev)) == FP_SCAN_TYPE_PRESS ? "press" : "swipe"); + g_hash_table_insert (table, "ScanType", value); + + if (priv->dev != NULL) { + value = g_new0 (GValue, 1); + g_value_init (value, G_TYPE_INT); + g_value_set_int (value, fp_dev_get_nr_enroll_stages (priv->dev)); + g_hash_table_insert (table, "NumberEnrollStages", value); + } dbus_g_method_return (context, table); + + g_hash_table_destroy (table); } diff --git a/src/device.xml b/src/device.xml index a4cdcab..c6636f2 100644 --- a/src/device.xml +++ b/src/device.xml @@ -55,7 +55,7 @@ - + diff --git a/tests/list.c b/tests/list.c index f610260..41d278f 100644 --- a/tests/list.c +++ b/tests/list.c @@ -57,7 +57,10 @@ static void list_fingerprints(DBusGProxy *dev, const char *username) if (!net_reactivated_Fprint_Device_get_properties(dev, &props, &error)) g_error("GetProperties failed: %s", error->message); - g_print("Fingerprints for user %s on %s:\n", username, (char *) g_hash_table_lookup (props, "Name")); + g_print("Fingerprints for user %s on %s (%s):\n", + username, + g_value_get_string (g_hash_table_lookup (props, "Name")), + g_value_get_string (g_hash_table_lookup (props, "ScanType"))); g_hash_table_destroy (props); for (i = 0; fingers[i] != NULL; i++) {