aboutsummaryrefslogtreecommitdiffstats
path: root/scd
diff options
context:
space:
mode:
Diffstat (limited to 'scd')
-rw-r--r--scd/ChangeLog1
-rw-r--r--scd/ccid-driver.c23
2 files changed, 19 insertions, 5 deletions
diff --git a/scd/ChangeLog b/scd/ChangeLog
index 4aae08536..e85c8d81c 100644
--- a/scd/ChangeLog
+++ b/scd/ChangeLog
@@ -9,6 +9,7 @@
(ccid_transceive_apdu_level): New.
(ccid_transceive): Divert to above.
(parse_ccid_descriptor): Allow APDU level exchange mode.
+ (do_close_reader): Pass the interface number to usb_release_interface.
2004-12-21 Werner Koch <[email protected]>
diff --git a/scd/ccid-driver.c b/scd/ccid-driver.c
index eeea651a9..0694fe762 100644
--- a/scd/ccid-driver.c
+++ b/scd/ccid-driver.c
@@ -198,6 +198,7 @@ struct ccid_driver_s
unsigned short id_vendor;
unsigned short id_product;
unsigned short bcd_device;
+ int ifc_no;
int ep_bulk_out;
int ep_bulk_in;
int ep_intr;
@@ -914,6 +915,7 @@ ccid_open_reader (ccid_driver_t *handle, const char *readerid)
(*handle)->id_vendor = dev->descriptor.idVendor;
(*handle)->id_product = dev->descriptor.idProduct;
(*handle)->bcd_device = dev->descriptor.bcdDevice;
+ (*handle)->ifc_no = ifc_no;
(*handle)->ep_bulk_out = ep_bulk_out;
(*handle)->ep_bulk_in = ep_bulk_in;
(*handle)->ep_intr = ep_intr;
@@ -977,7 +979,7 @@ do_close_reader (ccid_driver_t handle)
}
if (handle->idev)
{
- usb_release_interface (handle->idev, 0);
+ usb_release_interface (handle->idev, handle->ifc_no);
usb_close (handle->idev);
handle->idev = NULL;
}
@@ -1018,6 +1020,7 @@ ccid_shutdown_reader (ccid_driver_t handle)
handle->idev = idev;
+ handle->ifc_no = ifc_no;
handle->ep_bulk_out = ep_bulk_out;
handle->ep_bulk_in = ep_bulk_in;
handle->ep_intr = ep_intr;
@@ -2115,6 +2118,7 @@ main (int argc, char **argv)
int no_pinpad = 0;
int verify_123456 = 0;
int did_verify = 0;
+ int no_poll = 0;
if (argc)
{
@@ -2139,6 +2143,11 @@ main (int argc, char **argv)
ccid_set_debug_level (1);
argc--; argv++;
}
+ else if ( !strcmp (*argv, "--no-poll"))
+ {
+ no_poll = 1;
+ argc--; argv++;
+ }
else if ( !strcmp (*argv, "--no-pinpad"))
{
no_pinpad = 1;
@@ -2157,7 +2166,8 @@ main (int argc, char **argv)
if (rc)
return 1;
- ccid_poll (ccid);
+ if (!no_poll)
+ ccid_poll (ccid);
fputs ("getting ATR ...\n", stderr);
rc = ccid_get_atr (ccid, NULL, 0, NULL);
if (rc)
@@ -2166,7 +2176,8 @@ main (int argc, char **argv)
return 1;
}
- ccid_poll (ccid);
+ if (!no_poll)
+ ccid_poll (ccid);
fputs ("getting slot status ...\n", stderr);
rc = ccid_slot_status (ccid, &slotstat);
if (rc)
@@ -2175,7 +2186,8 @@ main (int argc, char **argv)
return 1;
}
- ccid_poll (ccid);
+ if (!no_poll)
+ ccid_poll (ccid);
fputs ("selecting application OpenPGP ....\n", stderr);
{
@@ -2188,7 +2200,8 @@ main (int argc, char **argv)
}
- ccid_poll (ccid);
+ if (!no_poll)
+ ccid_poll (ccid);
fputs ("getting OpenPGP DO 0x65 ....\n", stderr);
{