Search code examples
smartcardsmartcard-readerpcsc

The smart card is not responding to a reset


I have been working of the read / write operation of smart cards, I believe my card is sle_4428 and I am using HID OMNIKEY 3121 USB Card Reader. The problem is that when I enter card in card reader my program responds as the smart card is not responding to a reset with error code 0x80100066, instead of connecting the card and getting ATR...

[EDIT] It works fine if I do only the read operation. When I do the write operation and then reinsert the card it stops responding, giving the above message. The APDU command I use to write is: FF D6 00 00 #(01 02)


Solution

  • Your problem is that HID Omnikey failes to properly "cold" reset smart card.

    With the following Java code-snipped, you can reset HID Omnikey reader CL.

    import jnasmartcardio.Smartcardio;
    
    import javax.smartcardio.*;
    import javax.xml.bind.DatatypeConverter;
    
    public class OMNIKEYConfiguration {
    
    public static void main(String... args) throws Exception {
        TerminalFactory factory = TerminalFactory.getInstance("PC/SC", null, new Smartcardio());
    
        String terminalName = "OMNIKEY CardMan 5x21-CL 0";
        CardTerminal terminal = factory.terminals().getTerminal(terminalName);
    
        // Connect directly to reader
        Card card = terminal.connect("DIRECT");
    
        int code = 3224092; // #define IOCTL_CCID_ESCAPE SCARD_CTL_CODE(3500)
        byte[] command = DatatypeConverter.parseHexBinary("0300"); // 0300 - ON; 0301 - OFF
        byte[] resp = card.transmitControlCommand(code, command);
        System.out.println(DatatypeConverter.printHexBinary(resp));
    
        card.disconnect(true);
    }
    }
    

    Use command "0x0300" to turn ON antenna, otherwise use "0x0301" to turn OFF antenna.

    For cold reset call OFF and then ON commands.