4

我正在尝试使用 NFC 将我的 Android 平板电脑连接到设备并从设备中检索数据。

我试过的

按照nfc_device_detection_1.01.pdf(第 4 章)中的说明发送命令

transceive()的 android java doc提到了

“应用程序不得将 SoD(长度)或 EoD(CRC)附加到有效负载,它将自动计算”

因此,我尝试了使用和不使用 CRC,使用和不使用数据包数据长度,但文档并不清楚我是否应该将其留空或者我是否应该不包括它。

我采用的另一种方法是遵循format_sequence_guidelines_1.1.pdf(同步代码后跟请求)第 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 回答