[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