[Pcsclite-cvs-commit] r4249 - in /trunk/PCSC/src: hotplug.h hotplug_libhal.c
rousseau at users.alioth.debian.org
rousseau at users.alioth.debian.org
Fri Jun 5 08:41:59 UTC 2009
Author: rousseau
Date: Fri Jun 5 08:41:59 2009
New Revision: 4249
URL: http://svn.debian.org/wsvn/pcsclite/?sc=1&rev=4249
Log:
give a higher priority to a specific driver over the CCID Class driver
Modified:
trunk/PCSC/src/hotplug.h
trunk/PCSC/src/hotplug_libhal.c
Modified: trunk/PCSC/src/hotplug.h
URL: http://svn.debian.org/wsvn/pcsclite/trunk/PCSC/src/hotplug.h?rev=4249&op=diff
==============================================================================
--- trunk/PCSC/src/hotplug.h (original)
+++ trunk/PCSC/src/hotplug.h Fri Jun 5 08:41:59 2009
@@ -29,6 +29,7 @@
#define PCSCLITE_HP_NAMEKEY_NAME "ifdFriendlyName"
#define PCSCLITE_HP_LIBRKEY_NAME "CFBundleExecutable"
#define PCSCLITE_HP_CPCTKEY_NAME "ifdCapabilities"
+#define PCSCLITE_HP_CFBUNDLE_NAME "CFBundleName"
#define PCSCLITE_HP_BASE_PORT 0x200000
Modified: trunk/PCSC/src/hotplug_libhal.c
URL: http://svn.debian.org/wsvn/pcsclite/trunk/PCSC/src/hotplug_libhal.c?rev=4249&op=diff
==============================================================================
--- trunk/PCSC/src/hotplug_libhal.c (original)
+++ trunk/PCSC/src/hotplug_libhal.c Fri Jun 5 08:41:59 2009
@@ -61,6 +61,7 @@
char *libraryPath;
char *readerName;
int ifdCapabilities;
+ char *CFBundleName;
} *driverTracker = NULL;
#define DRIVER_TRACKER_SIZE_STEP 8
@@ -176,6 +177,12 @@
driverTracker[listCount].ifdCapabilities = strtol(keyValue,
NULL, 16);
+ /* Get CFBundleName */
+ rv = LTPBundleFindOptionalValueWithKey(fullPath,
+ PCSCLITE_HP_CFBUNDLE_NAME, keyValue, 0);
+ if (0 == rv)
+ driverTracker[listCount].CFBundleName = strdup(keyValue);
+
#ifdef DEBUG_HOTPLUG
Log2(PCSC_LOG_INFO, "Found driver for: %s",
driverTracker[listCount].readerName);
@@ -214,6 +221,7 @@
driverTracker[i].libraryPath = NULL;
driverTracker[i].readerName = NULL;
driverTracker[i].ifdCapabilities = 0;
+ driverTracker[i].CFBundleName = NULL;
}
}
}
@@ -276,6 +284,7 @@
DBusError error;
int i;
unsigned int idVendor, idProduct;
+ static struct _driverTracker *classdriver, *driver;
if (!libhal_device_property_exists(ctx, udi, "usb.vendor_id", NULL))
return NULL;
@@ -306,6 +315,8 @@
Log3(PCSC_LOG_DEBUG, "Looking a driver for VID: 0x%04X, PID: 0x%04X", idVendor, idProduct);
+ classdriver = NULL;
+ driver = NULL;
/* check if the device is supported by one driver */
for (i=0; i<driverSize; i++)
{
@@ -313,11 +324,21 @@
idVendor == driverTracker[i].manuID &&
idProduct == driverTracker[i].productID)
{
- return &driverTracker[i];
+ if ((driverTracker[i].CFBundleName != NULL)
+ && (0 == strcmp(driverTracker[i].CFBundleName, "CCIDCLASSDRIVER")))
+ classdriver = &driverTracker[i];
+ else
+ /* it is not a CCID Class driver */
+ driver = &driverTracker[i];
}
}
- return NULL;
+ /* if we found a specific driver */
+ if (driver)
+ return driver;
+
+ /* else return the Class driver */
+ return classdriver;
}
More information about the Pcsclite-cvs-commit
mailing list