ACR122U LED控制

时间:2016-07-30 16:26:01

标签: android led apdu smartcard-reader acr122

有没有人知道如何通过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次循环的总重复次数?

一些解释的例子很棒。

1 个答案:

答案 0 :(得分:7)

更改LED状态的命令是

+------+------+------+------+------+------+------+------+------+
| CLA  | INS  | P1   | P2   | Lc   | DATA                      |
+------+------+------+------+------+------+------+------+------+
| 0xFF | 0x00 | 0x40 | SC   | 0x04 | T1   | T2   | #R   | 0x00 |
+------+------+------+------+------+------+------+------+------+

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

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

  • 位0:此标志定义闪烁完成后红色LED的状态(另请参见位2)。
  • 位1:此标志定义闪烁完成后绿色LED的状态(另请参见第3位)。
  • 位2:仅当该标志置位(1)时,闪烁完成后红色LED的状态将被设置为位0的值。如果清除此标志(0),红色LED将返回到发出LED控制命令之前的状态。
  • 位3:仅当该标志置位(1)时,闪烁完成后绿色LED的状态将被设置为位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将以下列波形闪烁两次:

RED ON   ----------\                    /----------\
                   |                    |          |                    
RED OFF            \--------------------/          \-------------------- 

         \________/ \__________________/ \________/ \__________________/
         T1 = 500ms     T2 = 1000ms      T1 = 500ms     T2 = 1000ms

         \_____________________________/ \_____________________________/
                  Repetition 1                    Repetition 2

现在,让我们假设你也想要闪烁绿色LED,但是它的初始状态设置为关闭(这样闪烁在红色和绿色之间切换而不是红色和没有光)。因此,您还要设置SC的第7位,即SC = 0xD0。因此,您有以下命令:

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

然后红色LED和绿色LED将以下列波形交替闪烁两次:

RED ON     ----------\                    /----------\
                     |                    |          |                    
RED OFF              \--------------------/          \--------------------

GREEN ON             /--------------------\          /--------------------
                     |                    |          |                    
GREEN OFF  ----------/                    \----------/

           \________/ \__________________/ \________/ \__________________/
           T1 = 500ms     T2 = 1000ms      T1 = 500ms     T2 = 1000ms

           \_____________________________/ \_____________________________/
                    Repetition 1                    Repetition 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将熄灭。您将获得以下波形:

RED ON     ----------\                    /----------\                    /--------------...
                     |                    |          |                    |
RED OFF              \--------------------/          \--------------------/

GREEN ON             /--------------------\          /--------------------\
                     |                    |          |                    |
GREEN OFF  ----------/                    \----------/                    \--------------...

           \________/ \__________________/ \________/ \__________________/
           T1 = 500ms     T2 = 1000ms      T1 = 500ms     T2 = 1000ms

           \_____________________________/ \_____________________________/ \_____________...
                    Repetition 1                    Repetition 2             Final state

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

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

您会收到以下wave格式:

RED ON     --------------------\          /--------------...
                               |          |
RED OFF                        \----------/

GREEN ON                       /----------\
                               |          |
GREEN OFF  --------------------/          \--------------...

           \__________________/ \________/
               T1 = 1000ms      T2 = 500ms

           \_____________________________/ \_____________...
                    Repetition 1             Final state