mirror of
git://git.gnupg.org/gnupg.git
synced 2024-12-22 10:19:57 +01:00
scd: Change handling of SPR532 card reader.
* scd/ccid-driver.c (ccid_vendor_specific_init): Put some workaround for SPR532 initialization. (ccid_slot_status): Send ESCape command after GetSlotStatus. -- Backport master commit of: 684a52dffa8b7f79b26fe53b3ab10d7748a8fb37 GnuPG-bug-id: 5065 Fixes-commit: 4fae55f8ee11b3f710524e5e8b8a91b159949f2d Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
This commit is contained in:
parent
11d8d1e050
commit
7db836c0e9
@ -1284,9 +1284,14 @@ ccid_vendor_specific_init (ccid_driver_t handle)
|
||||
}
|
||||
else if (handle->id_vendor == VENDOR_SCM)
|
||||
{
|
||||
DEBUGOUT ("sending escape sequence to switch to a case 1 APDU\n");
|
||||
r = send_escape_cmd (handle, (const unsigned char*)"\x80\x02\x00", 3,
|
||||
NULL, 0, NULL);
|
||||
/*
|
||||
* It seems that SEQ may be out of sync between host and the card reader,
|
||||
* and SET_INTERFACE doesn't reset it. Make sure it works at the init.
|
||||
*/
|
||||
abort_cmd (handle, 0);
|
||||
r = libusb_clear_halt (handle->idev, handle->ep_intr);
|
||||
DEBUGOUT_1 ("libusb_clear_halt intr: %s\n", libusb_error_name (r));
|
||||
r = 0;
|
||||
}
|
||||
|
||||
if (r != 0 && r != CCID_DRIVER_ERR_CARD_INACTIVE
|
||||
@ -2419,7 +2424,15 @@ ccid_slot_status (ccid_driver_t handle, int *statusbits, int on_wire)
|
||||
/* Setup interrupt transfer at the initial call of slot_status
|
||||
with ON_WIRE == 0 */
|
||||
if (handle->transfer == NULL && handle->ep_intr >= 0)
|
||||
ccid_setup_intr (handle);
|
||||
{
|
||||
ccid_setup_intr (handle);
|
||||
if (handle->id_vendor == VENDOR_SCM)
|
||||
{
|
||||
DEBUGOUT ("sending escape sequence to switch to a case 1 APDU\n");
|
||||
send_escape_cmd (handle, (const unsigned char*)"\x80\x02\x00", 3,
|
||||
NULL, 0, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
*statusbits = 0;
|
||||
return 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user