ACR122u прямая связь нет ответа
Я пытаюсь получить доступ к ACR122u с помощью Java, отправив прямую команду. Странная вещь, я не получаю никакого ответа и никаких ошибок.. Это мой код:
final static int IOCTL_SMARTCARD_ACR122_ESCAPE_COMMAND = 0x003136B0;
.....
List<CardTerminal> terminals = null;
TerminalFactory factory = TerminalFactory.getDefault();
terminals = factory.terminals().list();
CardTerminal terminal = terminals.get(0);
Card card = terminal.connect("direct");
CardChannel channel = card.getBasicChannel();
byte[] commandAPDU = {(byte) 0xD4, 0x06, 0x63, 0x05, 0x63, 0x0D, 0x63, 0x38 };
byte[] responseAPDU = card.transmitControlCommand(IOCTL_SMARTCARD_ACR122_ESCAPE_COMMAND, commandAPDU );
System.out.println(bytesToHex(responseAPDU) + "...");
Есть ли кто-нибудь, кто знает причину этой ситуации?
Спасибо заранее!
1 ответ
Решение
Наконец, у меня есть решение. Я отвечу на свой вопрос, если есть другие люди с такой же проблемой.
Ошибка состояла в том, что я только отправляю сообщение здесь. С new CommandAPDU()
вы уже определили класс,INS, P1, P2. Кроме того, вам не нужно определять Lc
потому что Javac сделает это для нас. С transmitControlCommand
вам нужно определить Lc
, Итак, с этим знанием новый (рабочий) код:
List<CardTerminal> terminals = null;
TerminalFactory factory = TerminalFactory.getDefault();
terminals = factory.terminals().list();
CardTerminal terminal = terminals.get(0);
Card card = terminal.connect("direct");
CardChannel channel = card.getBasicChannel();
//Read register
byte[] commandAPDU1 = {(byte)0xFF,0x00,0x00,0x00,0x08, (byte)0xD4, 0x06, 0x63, 0x05, 0x63, 0x0D, 0x63, 0x38 };
byte[] responseAPDU1 = card.transmitControlCommand(IOCTL_SMARTCARD_ACR122_ESCAPE_COMMAND, commandAPDU1 );
System.out.println(bytesToHex(responseAPDU1) + "...");
//Response: D5070707059000...