问题标签 [pyscard]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
47 浏览

python - 如何使用 python 和 pyscard 向 ACS 智能卡读卡器发送外围命令

我想以编程方式控制智能卡读卡器 ACS ACR1281U-C1 的蜂鸣器,但我不确定如何正确理解如何使用 ESCAPE 命令。

我使用 python 3.9.6 + pyscard 2.0.1。视窗 10 (x64)。

我已经安装了 ACS 驱动程序(版本 4.2.8.0)。

ACS(应用程序编程接口 V1.11)的文档指出:

阅读器的外设控制命令是通过使用 PC_to_RDR_Escape 实现的。注意:驱动程序会自动添加 Class、INS 和 P1。

在附录 C 中,转义命令显示为 2079。

但是,sdk 提供了一些示例(在 Java 中),其中转义命令显示为 3500,并且明确传输了 Class、INS 和 P1 字段。

我可以复制两种方式来发送这个外围控制,但我不确定哪种方法是最好的,而且文档也不广泛。

1) SCARD_CTL_CODE(2079) 用 2079 计算 ESCAPE 命令,驱动程序会自动添加 Class、INS 和 P1 [0xE0, 0x00, 0x00],所以我不需要将它们放在命令中。这似乎更符合 API 文档:

SCARD_CTL_CODE(3500) 用 3500 计算 ESCAPE 命令,我必须在命令中显式添加 Class、INS 和 P1。这更符合 SDK 中的 Java 示例:

为什么会有这种差异?什么是正确的方法?

0 投票
1 回答
77 浏览

python-3.x - Python pyscard 控制 NFC 阅读器的蜂鸣器

我有两个 NFC 读取设备:ACR12U 和 ACR1252U

我在 python 中有一个简短的脚本,使用 pyscard 来读取 NFC 标签的 UID:

只要靠近 NFC 卡,ACR122U 就会发出嗡嗡声。ACR1252U 在靠近 NFC 时会发出嗡嗡声,当我移除它时会再次发出嗡嗡声。

我想改变这种行为,这样它们只会在我取出卡片并且卡片已被读取时才会发出嗡嗡声。我对它进行了测试,如果我取出卡片的速度太快,程序就会失败,但读卡器仍然嗡嗡作响,就像它成功了一样。

这是我第一次处理这样的事情,所以我尝试了一些试错法。

所以我想getuid = [0xFF, 0xCA, 0x00, 0x00, 0x00]是向读者发送一个读取 UID 的命令,我可以在他们的两本手册中找到它:

在此处输入图像描述

现在我想我可以用它来控制蜂鸣器。在 ACR1252U 的手册中,我发现了这个:

在此处输入图像描述

所以我尝试了以下方法:

但什么都没有发生。ACR122U 有不同的指令,但同样的事情发生。谁能帮助我我做错了什么?

编辑:

我能够更接近解决方案,但是我仍然不明白 100% 发生了什么。

我在写这篇文章的时候只有一个 ACR122U,所以所有的测试都是用那个完成的。从手册中,我能够获得一堆 APDU,并且我找到了一个模拟读卡的代码,而无需将实际卡接触到设备上,因此我可以对其进行测试。

现在我有了这个 APDU:turn_off_red = [0xFF, 0x00, 0x40, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00]

根据手册,哪个红色指示灯亮,它也可以正常工作,但只有几秒钟。即使我sleep(50)在代码末尾添加了 a,红色 LED 也只会闪烁一秒钟,然后转回来。

我认为当我尝试使用configBuzzer = [0xFF, 0x00, 0x52, 0x00, 0x00]. 它会关闭蜂鸣器几秒钟,然后再将其重新打开。