J'essaie de modifier la durée du buzzer sur l'ACR1252U.Erreur inconnue 0x16 sur l'accès du lecteur de carte à puce
Lien vers API: http://www.acs.com.hk/download-manual/6402/API-ACR1252U-1.09.pdf
Selon la documentation de l'API j'ai besoin commande 'E0000028010A' pour changer le statut de l'avertisseur sonore, selon laquelle '0A' marque la durée que 0A * 10ms (Page 44).
Après le code Java est utilisé:
public static void main(String[] args) {
try {
byte[] send = new byte[6];
send[0] = (byte) 0xE0; // Commandclass
send[1] = (byte) 0x00; // Protocoll
send[2] = (byte) 0x00; // Param 1
send[3] = (byte) 0x28; // Param 2: Buzzerstatus
send[4] = (byte) 0x01; // Change Flag
send[5] = (byte) 0x0A; // Duration: 0A*10ms => 100ms
Card card = getCard("DIRECT"); // Works!
CardChannel channel = card.getBasicChannel(); // Works!
CommandAPDU command = new CommandAPDU(send); // Works!
channel.transmit(command); // EXCEPTION!
} catch (Exception ex) {
ex.printStackTrace();
}
}
public static Card getCard(String target) throws Exception {
TerminalFactory factory = TerminalFactory.getDefault();
List<CardTerminal> terminals = factory.terminals().list();
for (CardTerminal t : terminals) {
if (t.getName().equals("ACS ACR1252 Dual Reader PICC 0")) {
Card card = t.connect(target);
return card;
}
}
throw new Exception();
}
Mais il en résulte la stacktrace suivante indiquant la "erreur 0x16 unkown":
javax.smartcardio.CardException: sun.security.smartcardio.PCSCException: Unknown error 0x16
at sun.security.smartcardio.ChannelImpl.doTransmit(ChannelImpl.java:219)
at sun.security.smartcardio.ChannelImpl.transmit(ChannelImpl.java:90)
at readerconfig.TagConfig.main(TagConfig.java:24)
Caused by: sun.security.smartcardio.PCSCException: Unknown error 0x16
at sun.security.smartcardio.PCSC.SCardTransmit(Native Method)
at sun.security.smartcardio.ChannelImpl.doTransmit(ChannelImpl.java:188)
... 2 more
J'ai passé des heures à chercher quoi que ce soit dans ce direction cependant je ne pouvais rien trouver. J'ai même essayé un autre appareil, qui a encore généré cette erreur.
Soit je suis complètement devenu aveugle ou quelque chose n'est pas configuré correctement avec mon ordinateur. Tout ce que je peux dire, c'est que j'ai déjà écrit et lu avec succès des étiquettes NFC en utilisant ce lecteur. Mais je ne peux tout simplement pas changer la config du lecteur lui-même.
EDIT:
J'ai aussi trouvé cette alternative pour envoyer la commande:
byte[] send = new byte[5];
send[0] = (byte) 0xE0;
send[1] = (byte) 0x0;
send[2] = (byte) 0x0;
send[3] = (byte) 0x18; // Tries to read firmware version
send[4] = (byte) 0x0;
Card card = CardUtils.getCard("DIRECT"); // Works!
card.transmitControlCommand(3500, send);
Mais cela se traduit par la "erreur inconnue 0x1":
javax.smartcardio.CardException: transmitControlCommand() failed
at sun.security.smartcardio.CardImpl.transmitControlCommand(CardImpl.java:236)
at readerconfig.ReaderConfig.main(ReaderConfig.java:28)
Caused by: sun.security.smartcardio.PCSCException: Unknown error 0x1
at sun.security.smartcardio.PCSC.SCardControl(Native Method)
at sun.security.smartcardio.CardImpl.transmitControlCommand(CardImpl.java:232)
... 1 more
https://bugs.openjdk.java.net/browse/JDK-6359908? –
Essayez d'utiliser d'abord la commande E1, pour lire le contrôle du buzzer. Si cela fonctionne, une étape sera franchie: la communication a été établie. – Aubin
Même erreur ... @RC. Im en utilisant T = 0. –