Контекст для тех, кто придет к этому в будущем:
NTAG21x имеет функцию счетчика NFC. Эта функция позволяет NTAG21x автоматически увеличивать значение 24-битного счетчика, запускаемое первым допустимым значением.
- ЧИТАТЬ команду или
- БЫСТРОЕ ЧТЕНИЕ
после того, как метка NTAG21x получает питание от радиочастотного поля. Как только счетчик NFC достигнет максимального значения FF FF FF hex, значение счетчика NFC больше не изменится. Счетчик NFC включается или отключается с помощью бита NFC_CNT_EN (см. Раздел 8.5.7) http://www.nxp.com/documents/data_sheet/NTAG213_215_216.pdf.
Насколько я понимаю, вы находитесь на правильном пути с записью в тег, вы хотите использовать метод transceive
для обновления этого бита, но вы не уверены, какие данные нужно записать для этого. Обратите внимание, что MifraUltralight.transceieve(byte[])
эквивалентно подключению к этому тегу через NfcA
и вызову transceive(byte[])
.
Важно отметить, что «приложения должны отправлять только полные байты команд» (из Android docs), поэтому мы должны обновить весь этот байт. Однако мы хотим записать в тег, который поддерживает только полезную нагрузку размером 4 байта (1 страница), поэтому мы будем перезаписывать всю страницу.
Вот где мой опыт начинает немного ломаться, но я бы предложил подход:
- Прочитайте страницу 42, скопируйте байты в буфер
- Запишите эти скопированные байты на страницу 42, но сначала обновите бит счетчика.
Делаем шаг 1:
NfcA transaction = NfcA.get(tag);
transaction.connect(); // error handle
byte cmdRead = (byte)0x30;
byte page = (byte)(0x42 & 0xff); // AND to make sure it is the correct size
byte[] command = new byte[] {cmdRead, page};
byte[] page42 = nfcAtransaction.transceive(command); // error handle
byte mask = 0b00010000; // 3rd bit, or should it be 4th?
byte newData = page42[0] | mask;
Делаем шаг 2:
byte cmdWrite = (byte)0xA2;
byte page = (byte)(42 & 0xff);
byte[] command = new byte[] { cmdWrite, page, newData, page42[1], page42[2], page42[3]};
byte[] result = nfcA.transceive(command);
Полностью не проверено, но я надеюсь, что это поможет.
person
henrycjc
schedule
01.05.2017