Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java libNFC是否只支持读、写和编译_Java_C_Lib Nfc - Fatal编程技术网

Java libNFC是否只支持读、写和编译

Java libNFC是否只支持读、写和编译,java,c,lib-nfc,Java,C,Lib Nfc,一周前,我买了一个NFC阅读器(PN532I2C)和5个NFC标签(NTAG216),目标是为Java创建一个接口,这样我就可以在我的项目中使用Java。接口按预期工作,但当我尝试NTAG216支持的所有命令(第32页)时,只有读、写和COMP_-WRITE工作。这不是由接口引起的,我也在C中尝试过,但结果相同。那么,我的命令中是否有错误,或者libNFC是否以任何方式阻止执行这些命令? 很抱歉我的英语可能不好,我希望我的问题仍然可以理解 感谢您的回答, 雅各布 守则: public cl

一周前,我买了一个NFC阅读器(PN532I2C)和5个NFC标签(NTAG216),目标是为Java创建一个接口,这样我就可以在我的项目中使用Java。接口按预期工作,但当我尝试NTAG216支持的所有命令(第32页)时,只有读、写和COMP_-WRITE工作。这不是由接口引起的,我也在C中尝试过,但结果相同。那么,我的命令中是否有错误,或者libNFC是否以任何方式阻止执行这些命令?
很抱歉我的英语可能不好,我希望我的问题仍然可以理解

感谢您的回答,
雅各布


守则:

public class Main {

  public static void main(String[] args) {
    System.load(new File("libNFC-JavaInterface.so").getAbsolutePath());
    Context context = new Context();
    Device device = new Device(context);
    Target target = new Target();
    device.selectPassiveTarget(new Modulation(ModulationType.NMT_ISO14443A, BaudRate.NBR_106), null,
        target);
    int[] response;

    System.out.print("UID: ");
    try {
      System.out.printf("%014X", getUID(device));
    } catch (NFCException e) {
      device.selectPassiveTarget(new Modulation(ModulationType.NMT_ISO14443A, BaudRate.NBR_106),
          null, target);
      System.out.print("FAILED");
    }
    System.out.println();

    System.out.print("Version: ");
    try {
      response = getVersion(device);
      for (int i = 0; i < response.length; i++) {
        System.out.printf("%02X", response[i]);
      }
    } catch (NFCException e) {
      device.selectPassiveTarget(new Modulation(ModulationType.NMT_ISO14443A, BaudRate.NBR_106),
          null, target);
      System.out.print("FAILED");
    }
    System.out.println();

    System.out.print("Read: ");
    try {
      response = read(device, 0x08);
      for (int i = 0; i < response.length; i++) {
        System.out.printf("%02X", response[i]);
      }
    } catch (NFCException e) {
      device.selectPassiveTarget(new Modulation(ModulationType.NMT_ISO14443A, BaudRate.NBR_106),
          null, target);
      System.out.print("FAILED");
    }
    System.out.println();

    System.out.print("Fast Read: ");
    try {
      response = fastRead(device, 0x08, 0x11);
      for (int i = 0; i < response.length; i++) {
        System.out.printf("%02X", response[i]);
      }
    } catch (NFCException e) {
      device.selectPassiveTarget(new Modulation(ModulationType.NMT_ISO14443A, BaudRate.NBR_106),
          null, target);
      System.out.print("FAILED");
    }
    System.out.println();

    System.out.print("Write: ");
    try {
      write(device, 0x08, new int[] {0x41, 0x42, 0x43, 0x44});
      System.out.print("SUCCESSFUL");
    } catch (NFCException e) {
      device.selectPassiveTarget(new Modulation(ModulationType.NMT_ISO14443A, BaudRate.NBR_106),
          null, target);
      System.out.print("FAILED");
    }
    System.out.println();

    System.out.print("Compatibility Write: ");
    try {
      compatibilityWrite(device, 0x09, new int[] {0x45, 0x46, 0x47, 0x48});
      System.out.print("SUCCESSFUL");
    } catch (NFCException e) {
      device.selectPassiveTarget(new Modulation(ModulationType.NMT_ISO14443A, BaudRate.NBR_106),
          null, target);
      System.out.print("FAILED");
    }
    System.out.println();

    System.out.print("Read cnt: ");
    try {
      response = readCnt(device);
      for (int i = 0; i < response.length; i++) {
        System.out.printf("%02X", response[i]);
      }
    } catch (NFCException e) {
      device.selectPassiveTarget(new Modulation(ModulationType.NMT_ISO14443A, BaudRate.NBR_106),
          null, target);
      System.out.print("FAILED");
    }
    System.out.println();

    System.out.print("Read sig: ");
    try {
      response = readSig(device);
      for (int i = 0; i < response.length; i++) {
        System.out.printf("%02X", response[i]);
      }
    } catch (NFCException e) {
      device.selectPassiveTarget(new Modulation(ModulationType.NMT_ISO14443A, BaudRate.NBR_106),
          null, target);
      System.out.print("FAILED");
    }
    System.out.println();

    target.free();
    device.close();
    context.exit();
  }

  public static long getUID(Device device) throws NFCException {
    int[] response = read(device, 0x00);
    return (long) response[0] << 48 | (long) response[1] << 40 | (long) response[2] << 32
        | (long) response[4] << 24 | (long) response[5] << 16 | (long) response[6] << 8
        | (long) response[7] << 0;
  }

  public static int[] getVersion(Device device) throws NFCException {
    int[] response = new int[8];
    device.transceiveBytes(new int[] {0x60}, response, -1);
    return response;
  }

  public static int[] read(Device device, int startPage) throws NFCException {
    int[] response = new int[16];
    device.transceiveBytes(new int[] {0x30, startPage & 0xFF}, response, -1);
    return response;
  }

  public static int[] fastRead(Device device, int startPage, int endPage) throws NFCException {
    int[] response = new int[((endPage &= 0xFF) - (startPage &= 0xFF) + 1) * 4];
    device.transceiveBytes(new int[] {0x3A, startPage, endPage}, response, -1);
    return response;
  }

  public static void write(Device device, int startPage, int[] data) throws NFCException {
    int[] command = new int[6];
    command[0] = 0xA2;
    command[1] = startPage & 0xFF;
    for (int i = 0; i < data.length; i++) {
      command[2 + i] = data[i] & 0xFF;
    }
    device.transceiveBytes(command, new int[0], -1);
  }

  public static void compatibilityWrite(Device device, int startPage, int[] data)
      throws NFCException {
    int[] command = new int[18];
    command[0] = 0xA0;
    command[1] = startPage & 0xFF;
    for (int i = 0; i < data.length; i++) {
      command[2 + i] = data[i] & 0xFF;
    }
    device.transceiveBytes(command, new int[0], -1);
  }

  public static int[] readCnt(Device device) throws NFCException {
    int[] response = new int[3];
    device.transceiveBytes(new int[] {0x39, 0x02}, response, -1);
    return response;
  }

  public static int[] readSig(Device device) throws NFCException {
    int[] response = new int[32];
    device.transceiveBytes(new int[] {0x3C, 0x00}, response, -1);
    return response;
  }
}

我没有尝试libNFC,但我的代码也有同样的问题,所以可能是相同的修复


对于NTAG2xx特定函数(获取版本、快速读取、读取CNT、读取SIG),您需要使用PN532函数“独立通信”(0x42)而不是“InDataExchange”(0x40)。这个函数只适用于标准的NFC论坛函数(读、写)。

当我搜索pn53x.c时,我发现:if(pnd->beasymframing){abtCmd[0]=InDataExchange;..}else{abtCmd[0]=incommunicationthru;..}。在进一步研究之后,我发现了如何禁用easyFraming:NFC\u device\u set\u property\u bool(pnd,NP_EASY_FRAMING,false);所以现在我禁用它(GET_VERSION,FAST_READ,READ_CNT,READ_SIG)对于其余部分,它将被启用。除READ\u CNT外,其他一切都在工作。这现在会导致RF传输错误,但就我而言,目前还可以。对于READ\u CNT,请确保它在NFC标记上被激活,否则将出现错误(在配置页面中,访问字节中的NFC\u CNT EN位设置为1)
UID: 04675362D55681
Version: error  libnfc.driver.pn532_i2c Application level error detected  (127)
FAILED
Read: 41424344454647480000000000000000
Fast Read: error    libnfc.driver.pn532_i2c Application level error detected  (127)
FAILED
Write: SUCCESSFUL
Compatibility Write: SUCCESSFUL
Read cnt: error libnfc.driver.pn532_i2c Application level error detected  (127)
FAILED
Read sig: error libnfc.driver.pn532_i2c Application level error detected  (127)
FAILED