diff --git a/libnfc/drivers/acr122_usb.c b/libnfc/drivers/acr122_usb.c index 1efe079..58afeed 100644 --- a/libnfc/drivers/acr122_usb.c +++ b/libnfc/drivers/acr122_usb.c @@ -275,7 +275,7 @@ acr122_usb_connstring_decode(const nfc_connstring connstring, struct acr122_usb_ int res = sscanf(connstring, "%[^:]:%[^:]:%[^:]", driver_name, dirname, filename); - if (!res || (0 != strcmp(driver_name, ACR122_USB_DRIVER_NAME))) { + if (!res || ((0 != strcmp(driver_name, ACR122_USB_DRIVER_NAME)) && (0 != strcmp(driver_name, "usb")))) { // Driver name does not match. res = 0; } else { diff --git a/libnfc/drivers/pn53x_usb.c b/libnfc/drivers/pn53x_usb.c index fcf774f..bca59cb 100644 --- a/libnfc/drivers/pn53x_usb.c +++ b/libnfc/drivers/pn53x_usb.c @@ -266,7 +266,7 @@ pn53x_usb_connstring_decode(const nfc_connstring connstring, struct pn53x_usb_de int res = sscanf(connstring, "%[^:]:%[^:]:%[^:]", driver_name, dirname, filename); - if (!res || (0 != strcmp(driver_name, PN53X_USB_DRIVER_NAME))) { + if (!res || ((0 != strcmp(driver_name, PN53X_USB_DRIVER_NAME)) && (0 != strcmp(driver_name, "usb")))) { // Driver name does not match. res = 0; } else { diff --git a/libnfc/nfc.c b/libnfc/nfc.c index 4895abe..421ffac 100644 --- a/libnfc/nfc.c +++ b/libnfc/nfc.c @@ -198,13 +198,21 @@ nfc_open(nfc_context *context, const nfc_connstring connstring) while ((ndr = *pndr)) { // Specific device is requested: using device description if (0 != strncmp(ndr->name, ncs, strlen(ndr->name))) { - pndr++; - continue; + // Check if connstring driver is usb -> accept any driver *_usb + if ((0 != strncmp("usb", ncs, strlen("usb"))) || 0 != strncmp ("_usb", ndr->name + (strlen(ndr->name) - 4), 4)) { + pndr++; + continue; + } } pnd = ndr->open(ncs); // Test if the opening was successful if (pnd == NULL) { + if (0 == strncmp("usb", ncs, strlen("usb"))) { + // We've to test the other usb drivers before giving up + pndr++; + continue; + } log_put(LOG_CATEGORY, NFC_PRIORITY_TRACE, "Unable to open \"%s\".", ncs); log_fini(); return pnd;