aboutsummaryrefslogtreecommitdiffstats
path: root/scd/ccid-driver.c
diff options
context:
space:
mode:
authorNIIBE Yutaka <[email protected]>2019-02-22 11:05:09 +0000
committerNIIBE Yutaka <[email protected]>2019-02-22 11:05:09 +0000
commit611faf1579a56925994d53eb08e1290a4b3958cf (patch)
tree0513c126b954df485479d1a2ef2dc2795a481dca /scd/ccid-driver.c
parentsm: Fix certificate creation with key on card. (diff)
downloadgnupg-611faf1579a56925994d53eb08e1290a4b3958cf.tar.gz
gnupg-611faf1579a56925994d53eb08e1290a4b3958cf.zip
scd: internal driver: Submit SET_INTERFACE control transfer.
* scd/ccid-driver.c (ccid_open_usb_reader): Alway submit SET_INTERFACE control transfer. -- This handling is not mondatory, but it's better to do so, because there are card reader with pinpad and token with ack button, which support user interaction. User interaction status should be reset at open time. The status should be reset when the session is closed/stopped. In practice, since cleanup routine in a driver may not be called properly, it's good to submit SET_INTERFACE at open time. Signed-off-by: NIIBE Yutaka <[email protected]>
Diffstat (limited to 'scd/ccid-driver.c')
-rw-r--r--scd/ccid-driver.c14
1 files changed, 6 insertions, 8 deletions
diff --git a/scd/ccid-driver.c b/scd/ccid-driver.c
index c165f6e30..69df17355 100644
--- a/scd/ccid-driver.c
+++ b/scd/ccid-driver.c
@@ -1653,15 +1653,13 @@ ccid_open_usb_reader (const char *spec_reader_name,
goto leave;
}
- if (set_no != 0)
+ /* Submit SET_INTERFACE control transfer which can reset the device. */
+ rc = libusb_set_interface_alt_setting (idev, ifc_no, set_no);
+ if (rc)
{
- rc = libusb_set_interface_alt_setting (idev, ifc_no, set_no);
- if (rc)
- {
- DEBUGOUT_1 ("usb_set_interface_alt_setting failed: %d\n", rc);
- rc = CCID_DRIVER_ERR_CARD_IO_ERROR;
- goto leave;
- }
+ DEBUGOUT_1 ("usb_set_interface_alt_setting failed: %d\n", rc);
+ rc = CCID_DRIVER_ERR_CARD_IO_ERROR;
+ goto leave;
}
rc = ccid_vendor_specific_init (*handle);