From 881dcdfd84ebad36bff20c895e629025bed9d94e Mon Sep 17 00:00:00 2001 From: NIIBE Yutaka Date: Thu, 26 Jan 2017 22:02:41 +0900 Subject: 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 --- scd/app.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'scd/app.c') diff --git a/scd/app.c b/scd/app.c index b10a452d6..daff0b7d7 100644 --- a/scd/app.c +++ b/scd/app.c @@ -192,6 +192,7 @@ app_new_register (int slot, ctrl_t ctrl, const char *name) } app->slot = slot; + app->card_status = (unsigned int)-1; if (npth_mutex_init (&app->lock, NULL)) { @@ -329,6 +330,7 @@ select_application (ctrl_t ctrl, const char *name, app_t *r_app, if (scan || !app_top) { struct dev_list *l; + int all_have_intr_endp; err = apdu_dev_list_start (opt.reader_port, &l); if (err) @@ -368,7 +370,8 @@ select_application (ctrl_t ctrl, const char *name, app_t *r_app, } } - apdu_dev_list_finish (l); + all_have_intr_endp = apdu_dev_list_finish (l); + update_fdset_for_usb (1, all_have_intr_endp); } npth_mutex_lock (&app_list_lock); @@ -1050,6 +1053,7 @@ scd_update_reader_status_file (void) log_debug ("Removal of a card: %d\n", a->slot); apdu_close_reader (a->slot); deallocate_app (a); + update_fdset_for_usb (0, 0); } else a->card_status = status; -- cgit v1.2.3