我正在使用通过USB连接到Android设备的GEMALTO IDBRIDGE K30。
首先,我发送一条PC_to_RDR_IccPowerOff消息。
byte[] data= new byte[]{
(byte) 0x62,
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0x00,
(byte) 0x00,
(byte) 0x00,
(byte) 0x00, (byte) 0x00};
UsbInterface intf = _usbDevice.getInterface(0);
UsbEndpoint outputEndpoint = intf.getEndpoint(1);
UsbEndpoint inputEndpoint = intf.getEndpoint(0);
intf.getEndpointCount();
UsbDeviceConnection connection = _usbManager.openDevice(_usbDevice);
connection.claimInterface(intf, forceClaim);
//activate card for apdu
final int dataTransferred = connection.bulkTransfer(inputEndpoint, data, data.length, TIMEOUT);
Log.e(SIGNATURE_LOG, String.format("Written %s bytes to the dongle. Data written: %s", data.length, byteArrayToHexArrayString(data)));
作为回应我
收到的长度为64且内容为:[80,18,00,00,00,00,00,00,00,00,3B,DF,18,00,81,31,FE,58,80, 31,90,52,41,01,64,05,C9,03,AC,73,B7,B1,D4,44,00,00,00,00,00,00,00,00,00,00, 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00]
在此之后我等待5秒钟,然后尝试使用PC_to_RDR_XfrBlock发送APDU Select命令。
byte[] data2= new byte[]{
(byte) 0x6F,
(byte) 0x10, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0x00,
(byte) 0x01,
(byte) 0x00,
(byte) 0x00, (byte) 0x00,
(byte) 0x00,
(byte) 0x00,
(byte) 0x0C,
(byte) 0x00, (byte) 0xA4, (byte) 0x04, (byte) 0x00,
(byte) 0x07, (byte) 0xA0, (byte) 0x00, (byte) 0x00,
(byte) 0x01, (byte) 0x18, (byte) 0x45, (byte) 0x4E,
(byte) 0x15,};
作为响应我得到这个错误F4与描述程序字节冲突:
收到长度为64且内容为的信息:[80,00,00,00,00,00,01,40,F4,00,00,00,00,00,00,00,00,00,00, 00,00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00]
任何人都可以帮助我吗?我不明白我做错了什么。
答案 0 :(得分:1)
PROCEDURE BYTE CONFLICT
错误有点棘手,因为它发生在读者的固件内,并通过CCID升级给您。基本上它意味着读者通过T = 1协议与智能卡通信,并且在读卡器和智能卡之间没有正确接收或发送一些T = 1过程字节。在我看来,你的申请中没有什么可以做的。你能做什么:
也许你的智能卡坏了,尝试另一个相同类型(或更新版本的智能卡)
此外,here表示某些USB端口可能存在问题。尝试将您的阅读器连接到USB设备到Android设备。
您的智能卡读卡器GEMALTO IDBRIDGE K30
报告 TPDU交换级别(请参阅here)。由于在TPDU交换级别,发送到阅读器的所有数据都会转发到智能卡原样,因此您必须处理软件内的T = 1协议 。通常情况下,驱动程序会负责此任务,但在您的情况下,您将直接与USB级别的智能卡读卡器进行通信。所以中间没有驱动程序。因此,您必须在代码中自己实现和处理T = 1协议,或者找到现有的Java实现。 ISO-7816-3
是定义T = 1协议的标准。很遗憾,它不是免费提供的,所以我无法提供链接(尝试谷歌搜索)。您可以在开源Linux CCID driver中找到C语言中T = 1协议的现有实现。
如果您未与GEMALTO IDBRIDGE K30
读者绑定,则可以使其他读者具有扩展APDU 或短APDU 交换级别。在这些情况下,您不必关心软件中的协议。
答案 1 :(得分:0)
PROCEDURE BYTE CONFLICT
是CCID错误。 C文件的源代码位于http://ccid.sourcearchive.com/documentation/0.9.3/ccid_8c-source.html