From e53734ef62165b3335098dd7a8c7f1dc9781de02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Skj=C3=B8lberg?= Date: Mon, 13 Nov 2023 14:23:16 +0100 Subject: [PATCH 1/3] Adjust error handling --- .../android/nfc/external/acs/tag/MifareUltralightAdapter.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nfc/external-acs/src/main/java/no/entur/android/nfc/external/acs/tag/MifareUltralightAdapter.java b/nfc/external-acs/src/main/java/no/entur/android/nfc/external/acs/tag/MifareUltralightAdapter.java index f7999315..5c9ac4b7 100644 --- a/nfc/external-acs/src/main/java/no/entur/android/nfc/external/acs/tag/MifareUltralightAdapter.java +++ b/nfc/external-acs/src/main/java/no/entur/android/nfc/external/acs/tag/MifareUltralightAdapter.java @@ -60,7 +60,7 @@ public TransceiveResult transceive(byte[] data, boolean raw) throws RemoteExcept } catch (IOException e) { LOGGER.debug("Problem reading blocks " + pageOffset); return new TransceiveResult(TransceiveResult.RESULT_FAILURE, null); - } catch (ReaderException e) { + } catch (Exception e) { LOGGER.debug("Problem reading blocks " + pageOffset); return new TransceiveResult(TransceiveResult.RESULT_FAILURE, null); } @@ -79,7 +79,7 @@ public TransceiveResult transceive(byte[] data, boolean raw) throws RemoteExcept readerWriter.writeBlock(pageOffset, new DataBlock(page)); return new TransceiveResult(TransceiveResult.RESULT_SUCCESS, null); - } catch (IOException e) { + } catch (Exception e) { LOGGER.debug("Problem writing block " + pageOffset); return new TransceiveResult(TransceiveResult.RESULT_FAILURE, null); From 0c618f04814e9e64b55954e8a23b9569f22ffcdb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Skj=C3=B8lberg?= Date: Mon, 13 Nov 2023 14:48:21 +0100 Subject: [PATCH 2/3] Return write status code --- .../android/nfc/external/acs/tag/MifareUltralightAdapter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nfc/external-acs/src/main/java/no/entur/android/nfc/external/acs/tag/MifareUltralightAdapter.java b/nfc/external-acs/src/main/java/no/entur/android/nfc/external/acs/tag/MifareUltralightAdapter.java index 5c9ac4b7..bb9f9c72 100644 --- a/nfc/external-acs/src/main/java/no/entur/android/nfc/external/acs/tag/MifareUltralightAdapter.java +++ b/nfc/external-acs/src/main/java/no/entur/android/nfc/external/acs/tag/MifareUltralightAdapter.java @@ -78,7 +78,7 @@ public TransceiveResult transceive(byte[] data, boolean raw) throws RemoteExcept readerWriter.writeBlock(pageOffset, new DataBlock(page)); - return new TransceiveResult(TransceiveResult.RESULT_SUCCESS, null); + return new TransceiveResult(TransceiveResult.RESULT_SUCCESS, new byte[]{0x0A}); } catch (Exception e) { LOGGER.debug("Problem writing block " + pageOffset); From dd498a40ef27fa4caf4483ad0df28cfad2c00ffd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Skj=C3=B8lberg?= Date: Mon, 13 Nov 2023 15:51:55 +0100 Subject: [PATCH 3/3] Test --- .../entur/abt/nfc/example/MainActivity.java | 31 +++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/examples/nfc-reader-app/src/main/java/no/entur/abt/nfc/example/MainActivity.java b/examples/nfc-reader-app/src/main/java/no/entur/abt/nfc/example/MainActivity.java index 44a9a712..12059687 100644 --- a/examples/nfc-reader-app/src/main/java/no/entur/abt/nfc/example/MainActivity.java +++ b/examples/nfc-reader-app/src/main/java/no/entur/abt/nfc/example/MainActivity.java @@ -400,12 +400,12 @@ private void setContents(Tag tag, Intent intent) { int type = mifareUltralight.getType(); switch (type) { case MifareUltralight.TYPE_ULTRALIGHT: { - length = 12; + length = 12 + 4; break; } case MifareUltralight.TYPE_ULTRALIGHT_C: { - length = 36; + length = 36 + 4; break; } @@ -418,6 +418,33 @@ private void setContents(Tag tag, Intent intent) { bout.write(mifareUltralight.readPages(i)); } + boolean write = true; + boolean transieve = true; + if(write) { + Random random = new Random(); + byte[] payload = new byte[4]; + for(int i = 0; i < 4; i++) { + int offset = i + length / 2; + + random.nextBytes(payload); + if(!transieve) { + mifareUltralight.writePage(offset, payload); + LOGGER.info("Wrote " + ByteArrayHexStringConverter.toHexString(payload)); + } else { + + byte[] cmd = new byte[payload.length + 2]; + cmd[0] = (byte) 0xA2; + cmd[1] = (byte) offset; + System.arraycopy(payload, 0, cmd, 2, payload.length); + + byte[] transceive = mifareUltralight.transceive(cmd); + + LOGGER.info("Wrote " + ByteArrayHexStringConverter.toHexString(payload) + ": " + ByteArrayHexStringConverter.toHexString(transceive)); + + } + } + } + mifareUltralight.close(); }