NFC リーダーから取得した APDU を SIM カードにルーティングしたいと考えています。HCEのドキュメントによると、対応するルーティングエントリを使用して OffHostApduService を作成するだけで可能だと思いました(私はそうしました)。
残念ながら、SIM は APDU を取得していないようです。SIM が SIM リーダーによってワークステーションに直接接続されている場合に機能する SELECT コマンドは、6a82 (ファイルが見つかりません) を返します。
LogCat で、2 つの興味深い情報を見つけました。
SIM にルーティングする必要がある選択コマンドを実行するたびに、次のエントリが表示されます。
01-14 10:44:18.501: D/BrcmNfcJni(1009): RoutingManager::stackCallback: event=0x17
01-14 10:44:18.501: D/BrcmNfcJni(1009): RoutingManager::stackCallback: NFA_CE_DATA_EVT; h=0x302; data len=12
01-14 10:44:18.501: D/HostEmulationManager(1009): notifyHostEmulationData
Android OS は、SIM へのルーティングがアクティブで、select などのコマンドが SIM に送信されていることを認識していないはずなので、ルーティングが正しく設定されていない手がかりであると思います。
リーダーの NFC フィールドから電話を取り外すたびに、次のエラーが表示されます。
01-14 10:46:48.791: E/BrcmNfcNfa(1009): UICC[0x0] is not activated
このエラーの原因を追跡しようとしたところexternal/libnfc-nci/src/nfa/ce/nfa_ce_act.chere
、Broadcom NFC ドライバーに属すると思われるファイルが見つかりました。
ドライバーは SIM がアクティブ化されていないと考えているため、アプリケーションが APDU の正しいルーティングを設定できないのが間違いだと思います。コマンドを送信した瞬間に SIM のロックが解除されます (PIN 入力) が、カード リーダーで使用する前に SIM のロックを解除する必要がないため、これが何か関係があるとは思えません。
テストには Nexus 5 を使用します。APDU を CPU ではなく SIM にルーティングできる経験や実際の例を持っている人はいますか?