Бесконтактная ошибка сброса

Мое приложение работает должным образом во всех аспектах, кроме случаев, когда я хочу удалить бесконтактную карту "А" и заменить ее бесконтактной картой "В".

Когда карта B присутствует, я запускаю следующие функции PCSC:

    lResult = PCSC.SCardDisconnect(hCard, SCARD_RESET_CARD)
    lResult = PCSC.SCardReleaseContext(hContext)
    lMode = SCARD_SHARE_EXCLUSIVE
    lProtocol = SCARD_PROTOCOL_T0

    lResult = PCSC.SCardEstablishContext(SCARD_SCOPE_USER, 0, 0, hContext)

    If lMode = SCARD_SHARE_DIRECT Then
        lResult = PCSC.SCardConnect(hContext, ConnReaderName, lMode, 0, hCard, lActiveProtocol)
    Else
        lResult = PCSC.SCardConnect(hContext, ConnReaderName, lMode, lProtocol, hCard, lActiveProtocol)
    End If

Несмотря на отключение этого кода, освобождение контекста, восстановление контекста и повторное подключение к карте, я, похоже, получаю ошибку 8010000f Protocol Mismatch. Обе карты имеют Т =0. После долгих испытаний я обнаружил, что единственное, что действительно работает, - это подождать около 10 секунд бездействия после введения бесконтактной карты B в поле, после чего индикатор активности считывателя снова мигает, по-видимому, сбрасывая карту и позволяя транзакции идти впереди как обычно.

Почему это происходит? И есть ли способ, которым я могу форсировать этот возможный сброс раньше?

Я разделил команды ScardDisconnect и ScardReleaseContext, выполняя их, пока бесконтактная карта A все еще была в поле, но это не имело никакого значения.

0 ответов

Вот возможное решение:

установить новое соединение в прямом режиме с последующим повторным подключением в общем / монопольном режиме с принудительным сбросом карты или отключением карты

ret = SCardConnect(hContext, readername, lMode, SCARD_PROTOCOL_T0, &hCard, &dwActiveProtocol);
if (ret == SCARD_E_PROTO_MISMATCH) {
    ret = SCardConnect(hContext, readername, SCARD_SHARE_DIRECT, 0, &hCard, &dwActiveProtocol);
    if (!ret) ret = SCardReconnect(hCard, lMode, SCARD_PROTOCOL_T0, SCARD_RESET_CARD, &dwActiveProtocol);
}
Другие вопросы по тегам