2

请原谅我可能没有使用正确的术语,因为我是新手。我已经包装了 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 上运行......

4

1 回答 1

0

我刚刚发现至少有一些控制命令只有在有卡存在的情况下才会起作用。

尝试在有卡的情况下运行您的代码。

这目前适用于我的设置,即 Raspberry Pi 和 ACS ACR1252U。

于 2015-08-04T04:37:21.073 回答