aboutsummaryrefslogtreecommitdiffstats
path: root/scd/ccid-driver.c
diff options
context:
space:
mode:
authorNIIBE Yutaka <[email protected]>2017-01-26 13:02:41 +0000
committerNIIBE Yutaka <[email protected]>2017-01-26 13:02:41 +0000
commit881dcdfd84ebad36bff20c895e629025bed9d94e (patch)
tree09cd09205463d53951090ea06a943172770c4c00 /scd/ccid-driver.c
parentscd: Fix APP reference counting. (diff)
downloadgnupg-881dcdfd84ebad36bff20c895e629025bed9d94e.tar.gz
gnupg-881dcdfd84ebad36bff20c895e629025bed9d94e.zip
scd: Only submit apdu_get_status when needed.
* scd/apdu.c (apdu_dev_list_finish): Return Boolean value if all device support INTERRUPT transfer. * scd/ccid-driver.c (ccid_dev_scan_finish): Likewise. * scd/app.c (app_new_register): Fix initial value of card_status. (select_application): Call update_fdset_for_usb. (scd_update_reader_status_file): Ditto. * scd/scdaemon.c (update_fdset_for_usb, need_tick): New. (handle_connections): Call handle_tick when select returns. Let select watch USB file descriptors, too. Call libusb_handle_events_timeout_completed for INTERRUPT transfer. Signed-off-by: NIIBE Yutaka <[email protected]>
Diffstat (limited to '')
-rw-r--r--scd/ccid-driver.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/scd/ccid-driver.c b/scd/ccid-driver.c
index ce5539385..8ca8e9646 100644
--- a/scd/ccid-driver.c
+++ b/scd/ccid-driver.c
@@ -1699,13 +1699,17 @@ ccid_dev_scan (int *idx_max_p, struct ccid_dev_table **t_p)
return err;
}
-void
+int
ccid_dev_scan_finish (struct ccid_dev_table *tbl, int max)
{
+ int all_have_intr_endp = 1;
int i;
for (i = 0; i < max; i++)
{
+ if (tbl[i].ep_intr == -1)
+ all_have_intr_endp = 0;
+
free (tbl[i].ifcdesc_extra);
tbl[i].transport = 0;
tbl[i].n = 0;
@@ -1719,6 +1723,8 @@ ccid_dev_scan_finish (struct ccid_dev_table *tbl, int max)
}
libusb_free_device_list (ccid_usb_dev_list, 1);
ccid_usb_dev_list = NULL;
+
+ return all_have_intr_endp;
}
unsigned int