Raspberry Pi に接続された 3 つの ACR122U NFC リーダーがあります。javax.smartcardio を使用してリーダーとやり取りする Java プログラムがあります。私のプログラムは、見つかったリーダーごとにスレッドを作成します。
List<CardTerminal> terminals = TerminalFactory.getDefault().terminals().list();
int terminalCount = terminals.size();
System.out.println("Detected " + String.valueOf(terminalCount) + " terminal/s");
for(int i = 0; i < terminalCount; i++)
{
System.out.println("Initiating thread :" + String.valueOf(i));
new Thread(new AccessTerminal(i,terminals.get(i))).start();
}
各スレッド クラスは、基本的に次のことを行う AccessTerminal クラスを実行します。
System.out.println("Thread started... Waiting for card...");
cardTerminal.waitForCardPresent(0);
System.out.println("Card found");
card = cardTerminal.connect("*");
cardChannel = card.getBasicChannel();
if(authenticate())
{
int UID = getUID();
System.out.println("User identified as :" + String.valueOf(UID));
}
cardTerminal.waitForCardAbsent(0);
上記のコードは、ACR122U が 1 つしか接続されていない場合に完全に実行されます。WINDOWS マシンに 3 台の ACR122U を接続した場合も、完全に動作します。ただし、ラズベリーパイに2つ以上接続している場合、1つのリーダーは最初は何もしませんが、最初に他のリーダーをスキャンすると、「カードが見つかりました」の途中でフリーズし、他のリーダーをスワイプして来ますNoCardPresent Exception でアップします。以下はエラーです。
Starting system...
Detected 2 terminal/s
Initiating thread :0
Initiating thread :1
Thread started... Waiting for card...
Thread started... Waiting for card...
Card found
Card found
Card not valid
Nov 27, 2013 1:02:01 PM livaccess.AccessTerminal run
SEVERE: null
javax.smartcardio.CardNotPresentException: No card present
at sun.security.smartcardio.TerminalImpl.connect(TerminalImpl.java:82)
at livaccess.AccessTerminal.run(AccessTerminal.java:41)
at java.lang.Thread.run(Thread.java:722)
Caused by: sun.security.smartcardio.PCSCException: SCARD_W_REMOVED_CARD
at sun.security.smartcardio.PCSC.SCardStatus(Native Method)
at sun.security.smartcardio.CardImpl.<init>(CardImpl.java:85)
at sun.security.smartcardio.TerminalImpl.connect(TerminalImpl.java:78)
... 2 more
Windowsマシンで同じ設定でまったく同じプログラムを実行すると、次の出力が得られます。
Starting system...
Detected 2 terminal/s
Initiating thread :0
Initiating thread :1
Thread started... Waiting for card...
Thread started... Waiting for card...
Card found
Card is valid
User identified as :1534
Thread started... Waiting for card...
Card found
Card is valid
User identified as :1534
どちらの場合も、両方のリーダーで同じカードを読み取りました。カードが無効または有効であることを心配しないでください。これは私のコードでは無関係なチェックです。
誰かが私に解決策を持っているなら、私はとてもいっぱいになるでしょう. Linuxが2つのUSBデバイスを区別していないことに関係していると感じています。
読んでくれてありがとう!