public int readNfcV(Tag tag) throws Exception { if (tag == null) { callbackContext.error("NULL"); } byte[] response = new byte[4]; NfcV nfcv = NfcV.get(tag); if (nfcv != null) { try { nfcv.connect(); byte[] request = new byte[] { (byte) 0x00, // flag (byte) 0x20, // command: READ ONE BLOCK (byte) block // IMMER im gleichen Block }; response = nfcv.transceive(request); } catch (IOException e) { callbackContext.error(nfcv.toString()); } finally { try { nfcv.close(); } catch (IOException e) { } } } // 1. Byte: Block locking status byte[] value = new byte[] {response[1], response[2], response[3], response[4]}; return ByteBuffer.wrap(value).order(java.nio.ByteOrder.BIG_ENDIAN).getInt(); }
public void writeNfcV(Tag tag, int oldValue, int newValue) throws Exception { int currentValue = readNfcV(tag); if (((oldValue != -1) && (oldValue != 0) && (currentValue != oldValue)) || (((oldValue == -1) || (oldValue == 0)) && ((currentValue != 0) && currentValue != -1))) { callbackContext.error(FALSE_TAG); return; } byte[] data = ByteBuffer.allocate(4).putInt(newValue).array(); if (tag == null) { callbackContext.error("NULL"); return; } NfcV nfcv = NfcV.get(tag); nfcv.connect(); byte[] request = new byte[7]; request[0] = 0x00; // flag request[1] = 0x21; // command: WRITE ONE BLOCK request[2] = (byte) block; // IMMER im gleichen Block speichern request[3] = (byte) data[0]; request[4] = (byte) data[1]; request[5] = (byte) data[2]; request[6] = (byte) data[3]; try { byte[] response = nfcv.transceive(request); if (response[0] != (byte) 0x00) { callbackContext.error("Error code: " + response[1]); } } catch (IOException e) { if (e.getMessage().equals("Tag was lost.")) { // continue, because of Tag bug } else { callbackContext.error("Couldn't write on Tag"); throw e; } } nfcv.close(); int result = readNfcV(tag); PluginResult pluginResult = new PluginResult(PluginResult.Status.OK, result); callbackContext.sendPluginResult(pluginResult); }