请原谅我可能没有使用正确的术语,因为我是新手。我已经包装了 PCSC API,应用程序现在检测到卡片(使用 SCardGetStatusChange)没有任何问题。
现在我希望能够做一些简单的事情,比如关闭蜂鸣器。据我了解,我首先需要使用 ShareMode.SCARD_SHARE_DIRECT 调用 SCardConnect。此呼叫以 OK 响应。之后,我使用 SCardControl 发送以下字节:FF 00 52 00 00(如http://www.acs.com.hk/download-manual/419/API-ACR122U-2.02.pdf的第 6.7 章所述)
但是,此调用返回 -2146435064。我使用 0x42000001 作为 SCardControl 的第二个参数。我尝试了其他几个“有根据的猜测”,但结果都一样。
有没有人得到这个工作?
更新
无论我尝试什么,SCardControl 都会不断返回 -2146435064 (SCARD_E_INSUFFICIENT_BUFFER)。调用的定义如下:
WinSCard.SCardControl (card, controlCode, ref data[0], data.Length, ref responseBuffer[0], responseBuffer.Length, ref responseLength);
使用具有以下值的参数:
- card = 0x1201a(由调用 SCardConnect 创建)
- controlCode = 0x42000DAC (0x42000000 | 3500) 但如前所述,我尝试了其他几个值
- 数据 = 字节 [] { 0xFF, 0x00, 0x52, 0x00, 0x00}
- 响应缓冲区 = 字节 [100]
为了消除可能的 controlCode 无效值,我还尝试使用 SCardTransmit(将 SCARD_PROTOCOL_RAW 与 SCardConnect 一起使用),但这会导致 -2146435050(SCARD_E_NOT_TRANSACTED)
更新 2
刚刚在 Raspberry PI 上尝试了相同的代码(通过 libpcsclite.so),它工作正常。我真的很想让它在 OS X 上运行......