ACR122U — исключение InvalidDeviceStateException при передаче APDU

Я загрузил библиотеку Android ACS и попробовал пример кода и приложение ReaderTest на своем устройстве Android, используя считыватель ACR122U с кабелем otg.

Я попытался отправить следующую команду APDU — FF CA 00 00 00, но я продолжаю сталкиваться с этим исключением в следующей строке фрагмента кода ниже:

                    // Transmit APDU
                    responseLength = mReader.transmit(params[0].slotNum,
                            command, command.length, response,
                            response.length);

исключение :

com.acs.smartcard.InvalidDeviceStateException: текущее состояние не равно определенному

Я проверил, чтобы все элементы, передаваемые методу .transmit, были точными (slotNum, command, command.length и т. д.). Просто не могу понять, почему это исключение выбрасывается.

Любая помощь будет принята с благодарностью!


person Prakash Ash    schedule 03.09.2016    source источник


Ответы (2)


Мне удалось найти решение. Это исключение было вызвано необходимостью выполнить некоторую инициализацию, о которой я не очень хорошо знал. Нашел этот пример в библиотеке NFC. Шаги подробно описаны в фрагменте кода ниже:

private void initalizeCard() throws ReaderException {
    reader.power(0, Reader.CARD_WARM_RESET);
    reader.setProtocol(0, Reader.PROTOCOL_T0 | Reader.PROTOCOL_T1);

    byte[] sendBuffer={(byte)0xFF, (byte)0xCA, (byte)0x00, (byte)0x00, (byte)0x00};
    byte[] recvBuffer=new byte[300];
    reader.transmit(0, sendBuffer, sendBuffer.length, recvBuffer, recvBuffer.length);
}
person Prakash Ash    schedule 05.09.2016

вы должны сначала выполнить теплый сброс ---> set-protocol, и тогда ваша команда apdu получит правильный ответ.

person Jo_cn    schedule 02.05.2018