4

NFC を使用して Android タブレットをデバイスに接続し、デバイスからデータを取得しようとしています。

私が試したこと

nfc_device_detection_1.01.pdf (第 4 章)で説明されているコマンドの送信

transceive()の Android Java doc には、

「アプリケーションは SoD (長さ) または EoD (CRC) をペイロードに追加してはなりません。自動的に計算されます」

したがって、CRC の有無にかかわらず、パケット データ長の有無にかかわらず試してみましたが、空白のままにしておくべきか、含めないべきかについて、ドキュメントは明確ではありません。

私が取った別のアプローチは、 format_sequence_guidelines_1.1.pdf (Sync Codeの後に Request が続く) の 2.2 章の図に従うことですが、結果は同じです。

問題

transceive() メソッドに引数として送信するコマンド (バイト) がわかりません。**

質問

誰か:

  • NFCF通信の例はありますか?
  • 使用すべきプロトコル/コマンドに関する詳細情報はありますか?
  • コマンドに必要なバイトが NFC タグに含まれているかどうかを確認できますか?

コード

transceive() は、IO 例外「タグが失われました」をスローします。

これは、コマンド バイトが正しくないためだと思います (さまざまなコマンドを使用しました)。

最後の注意 (transceive() を while ループに入れて、毎回通信を閉じて接続するのにも疲れました)

    String action = intent.getAction();

    if (NfcAdapter.ACTION_TECH_DISCOVERED.equals(action)) {

        Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);

        NfcF nfcf = NfcF.get(tag);

        nfcf.connect();

        byte[] command = new byte[] { (byte) 0x00, (byte) 0x00};

        byte[] response =  nfcf.transceive(command);

     }

回答に追加情報が必要な場合はコメントしてください。ありがとうございました。

4

2 に答える 2

3

ターゲット デバイス (タグ) IDm、FeliCa コマンド バイト、およびペイロードを指定して、「生の」コマンドを送信する方法の関数の例を次に示します。

byte[] rawCmd(NfcF nfcF, byte[] IDm, byte felicaCmd, byte[] payload) throws IOException {
    final int len = payload != null ? payload.length : 0;

    final byte[] cmd = new byte[10 + len];
    cmd[0] = (byte) (10 + len);
    cmd[1] = felicaCmd;
    System.arraycopy(IDm, 0, cmd, 2, IDm.length);

    if (payload != null) {
        System.arraycopy(payload, 0, cmd, 10, payload.length);
    }

    nfcF.transceive(cmd);
}
于 2013-08-01T18:54:39.943 に答える
0

これが将来誰かに役立つことを願っています。

byte[] transceiveProtocol(NfcF nfcF, int systemCode, int requestCode, int timeSlot) {

byte d0 = 6;
byte d1 = 0;
byte d2 = (byte)(systemCode>> 8 & 0xFF);
byte d3 = (byte)(systemCode>> 0 & 0xFF);
byte d4 = (byte)(requestCode & 0xFF);
byte d5 = (byte)(timeSlot & 0xFF);

byte[] command = { d0, d1, d2, d3, d4, d5 };

return nfcF.transceive(command);
}
于 2013-08-09T07:50:02.730 に答える