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); }
public void onNewIntent(Intent intent) { Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); byte[] id = tag.getId(); NfcV nfcMessage = NfcV.get(tag); try { nfcMessage.connect(); int resultIndex = 0; int blockIndex = 0; int blocks = 4; // 0 means 1 block, so it's +1 than 'blocks' byte[] cmd = new byte[] { (byte) 0x60, (byte) 0x23, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, // placeholder for tag UID (byte) blockIndex, (byte) blocks }; System.arraycopy(id, 0, cmd, 2, 8); byte[] data = nfcMessage.transceive(cmd); int start = 2; byte[] results = new byte[data.length]; for (int i = 0; i <= blocks; i++) { for (int b = start; b < start + 4; b++) { // First data block may contain zero bytes, which does not denote end of book code. // this caused troubles with some books if (data[b] == 0 && i > 1) { break; } results[resultIndex] = data[b]; resultIndex++; } start += 5; } nfcMessage.close(); results = ArrayUtils.subarray(results, 3, resultIndex); String res = new String(results); HashMap<String, String> temp = new HashMap<String, String>(); temp.put("sent", "false"); temp.put("to_send", "false"); temp.put("code", res); dataList.add(0, temp); adapter.notifyDataSetChanged(); this.toast.cancel(); BookAsyncProcessor p = new BookAsyncProcessor(adapter, sharedPref.getString("service_url", "")); p.execute(temp); } catch (IOException e) { this.toast.show(); } }