【问题标题】:ACR122U LED controllingACR122U LED控制
【发布时间】:2016-07-30 16:26:00
【问题描述】:

有人知道如何在Android上通过Reader.control()方法控制ACR122U的双色LED吗? (库 acssmc-1.1.3)。

我正在阅读 API,但不知道命令描述的含义:

例子:

byte[] command = {(byte) 0xFF, (byte) 0x00, (byte) 0x40, (byte) 0b01110111, (byte) 0x04, (byte) 20, (byte) 30, (byte) 3, (byte) 2};

这些东西我不明白:

  • 字节 3 (P2):我不知道如何设置。
  • 字节 5 (T1):第一个周期状态持续时间以某种方式从字节 3 控制?
  • 字节 6 (T2):从字节 3 以某种方式控制的第二个周期状态持续时间?
  • 字节 7(重复次数):第 1 次和第 2 次循环状态重复的总次数?

一些解释的例子会很棒。

【问题讨论】:

    标签: android led apdu smartcard-reader acr122


    【解决方案1】:

    改变LED状态的命令是

    +------+------+------+------+------+------+------+ ------+------+ |共轭亚油酸 | INS | P1 | P2 | LC |数据 | +------+------+------+------+------+------+------+ ------+------+ | 0xFF | 0x00 | 0x40 | SC | 0x04 | T1 | T2 | #R | 0x00 | +------+------+------+------+------+------+------+ ------+------+

    其中 SC 定义 LED 的状态(连续开/关、闪烁),T1/T2 定义闪烁波形,#R 定义闪烁波形的重复次数。

    因此,定义 LED 应如何闪烁以及闪烁完成后应如何显示的主要参数是 SC。这是一个 8 位的字段:

    • 位 0:此标志定义红色 LED 闪烁完成后的状态(另请参见位 2)。
    • 位 1:此标志定义绿色 LED 在闪烁完成后的状态(另请参见位 3)。
    • Bit 2:只有当该标志设置为 (1) 时,红色 LED 的状态才会在闪烁完成后设置为 bit 0 的值。如果此标志被清除 (0),红色 LED 将返回到您发出 LED 控制命令之前的状态。
    • Bit 3:只有当该标志设置为 (1) 时,绿色 LED 的状态才会在闪烁完成后设置为 bit 0 的值。如果此标志被清除 (0),绿色 LED 将返回到您发出 LED 控制命令之前的状态。
    • 位 4:此标志定义在开始执行 LED 控制命令时应将红色 LED 设置为的状态。
    • 位 5:此标志定义在开始执行 LED 控制命令时应将绿色 LED 设置为的状态。
    • 位 6:此标志定义红色 LED 是否应以闪烁波形切换。
    • 第 7 位:此标志定义是否应使用闪烁波形切换绿色 LED。

    假设您设置了 SC 的第 4 位和第 6 位(并清除其余部分),即 SC = 0x50。此外,您设置 T1 = 5 (0x05)、T2 = 10 (0x0A) 和 #R = 2 (0x02)。因此,您有以下命令:

    +------+------+------+------+------+------+------+ ------+------+ | 0xFF | 0x00 | 0x40 | 0x50 | 0x04 | 0x05 | 0x0A | 0x02 | 0x00 | +------+------+------+------+------+------+------+ ------+------+

    然后绿色LED熄灭,红色LED闪烁两次,波形如下:

    红灯亮 ----------\ /------------\ | | | 红色关闭 \--------------------/ \-------- \________/ \__________________/ \________/ \__________________/ T1 = 500 毫秒 T2 = 1000 毫秒 T1 = 500 毫秒 T2 = 1000 毫秒 \_____________________________/ \_____________________________/ 重复 1 重复 2

    现在,假设您还想闪烁绿色 LED,但将其初始状态设置为关闭(以便闪烁在红色和绿色之间切换,而不是在红色和无光之间切换)。因此,您还设置了 SC 的第 7 位,即 SC = 0xD0。因此,您有以下命令:

    +------+------+------+------+------+------+------+ ------+------+ | 0xFF | 0x00 | 0x40 | 0xD0 | 0x04 | 0x05 | 0x0A | 0x02 | 0x00 | +------+------+------+------+------+------+------+ ------+------+

    然后红色LED和绿色LED交替闪烁两次,波形如下:

    红灯亮 ----------\ /------------\ | | | 红色关闭 \--------------------/ \-------- 绿灯亮 /--------------------\ /-------- | | | 绿灯灭 ----------/ \----------/ \________/ \__________________/ \________/ \__________________/ T1 = 500 毫秒 T2 = 1000 毫秒 T1 = 500 毫秒 T2 = 1000 毫秒 \_____________________________/ \_____________________________/ 重复 1 重复 2

    现在,假设闪烁完成后,您希望红色 LED 持续亮起,绿色 LED 持续熄灭。因此,您需要设置位 2 和 3,以便能够定义两个 LED 的最终状态。 (如果您不设置这些位,那么位 0 和 1 的值将被简单地忽略。)然后您想要定义红色打开(位 0 = 1)和绿色关闭(位 1 = 0)的最终状态。因此,您得到 SC = 0xDD。因此,您有以下命令:

    +------+------+------+------+------+------+------+ ------+------+ | 0xFF | 0x00 | 0x40 | 0xDD | 0x04 | 0x05 | 0x0A | 0x02 | 0x00 | +------+------+------+------+------+------+------+ ------+------+

    然后红色LED和绿色LED交替闪烁两次,闪烁后红色LED点亮,绿色LED熄灭。你得到以下波形:

    红灯亮 ----------\ /----------\ /--------------... | | | | 红色关闭 \--------------------/ \--------/ 绿灯亮 /--------\ /--------\ | | | | 绿灯灭 ----------/ \----------/ \--------------... \________/ \__________________/ \________/ \__________________/ T1 = 500 毫秒 T2 = 1000 毫秒 T1 = 500 毫秒 T2 = 1000 毫秒 \_____________________________/ \_______________/ \_____________... 重复 1 重复 2 最终状态

    最后,您希望将重复次数减少到 1 (#R = 0x01),并且您希望反转闪烁波形的高低相位(T1 = 0x0A 和 T2 = 0x05)。因此,您有以下命令:

    +------+------+------+------+------+------+------+ ------+------+ | 0xFF | 0x00 | 0x40 | 0xDD | 0x04 | 0x0A | 0x05 | 0x01 | 0x00 | +------+------+------+------+------+------+------+ ------+------+

    你得到以下波形:

    红灯亮--------\ /----------------... | | 红色关闭\---------/ 绿灯 /----------\ | | 绿色关闭--------/ \--------------... \__________________/ \________/ T1 = 1000 毫秒 T2 = 500 毫秒 \___________________/ \_____________... 重复 1 最终状态

    【讨论】:

    • 你真的测试过这个吗?命令完成后,我无法让 LED 状态保持不变。它闪烁得很好,但不幸的是,在命令完成后它又回到了默认状态(红色)。我正在使用您的示例:[0xFF, 0, 0x40, 0xDD, 0x04, 0x05, 0x0a, 0x02, 0x00].
    • @AndréBorie 是的,它适用于我这里的两个 ACR122U 阅读器。
    • @MichaelRoland 您介意分享您使用的确切代码吗?我想试试这个。我注意到每次读卡器检测到卡时 LED 状态都会重置 - 让我离开 LED 状态的唯一方法是在卡在现场时设置它们,然后停止轮询读卡器(通过停止pcscd)。
    • @AndréBorie 我没有任何代码,我使用 APDU 脚本工具将这些 APDU 发送给阅读器。显然,如果您有自动检测卡的读卡器版本(这是我拥有的较新版本),那么读卡器将重置 LED 状态,您可能必须在检测到时再次设置它们。不过,我不确定您为什么要为此停止 pcscd。
    • @MichaelRoland Pcscd 似乎正在为我轮询卡片,即使实际上没有程序正在使用读卡器,这会导致每次检测到卡片时 LED 都会重置。通过至少停止它,我可以让 LED 保持在卡被移除之前的任何状态。糟糕的解决方案,但在此期间总比没有好。还是谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-25
    • 2019-11-16
    • 1970-01-01
    • 1970-01-01
    • 2017-06-06
    相关资源
    最近更新 更多