transceive() возвращает не то, что должен

122
24 сентября 2019, 14:30

Пытаюсь записать/прочитать информацию с NFC тэга (NfcV) M24LR64E-R.

Реализовал три команды: Read Single Block, Write Single Block, Get System Info. На все эти команды тэг отвечает, что передача удалась. Но сама команда transceive() возвращает byte[] длинной 2.

Сам ответ: byte[0] = 1, byte[1] = 3.

Не могу понять в чем дело... Что тэг хочет мне сказать данным ответом?

Вот мой код:

if (myTag == null) {
                        Toast.makeText(context, "Tag = null", Toast.LENGTH_LONG).show();
                } else {
                    Intent intent = getIntent();
                    if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())
                    ) {
                        myTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
                        NfcV nfcv = NfcV.get(myTag);
                        try {

Get System Info:

byte[] id = myTag.getId();
byte[] cmd = new byte[2 + id.length];
cmd[0] = 0x20;
cmd[1] = 0x2B;
System.arraycopy(id, 0, cmd, 2, id.length);

Read Single Block:

byte[] cmd = new byte[] { 
          0x60, 0x20,
          0, 0, 0, 0, 0, 0, 0, 0,
          (byte)0,0
};
System.arraycopy(id, 0, cmd, 2, 8);

Write Single Block:

byte[] cmd = new byte[]{
             0x60, 0x21,
             0, 0, 0, 0, 0, 0, 0, 0,
             (byte) 0, 
             mes[0], mes[1], mes[2], mes[3],
             (byte) 0
};
System.arraycopy(id, 0, cmd, 2, 8);

При выполнении 2 команды закомменчены и передается лишь одна

try {
      nfcv.connect();
      Toast.makeText(context, "connect", Toast.LENGTH_LONG).show();
          } catch (IOException e) {
          e.printStackTrace();
          }
      byte[] conf = nfcv.transceive(cmd);
      Toast.makeText(context, "transceive", Toast.LENGTH_LONG).show();

      } catch (IOException e) {
     Toast.makeText(context, "NO transceive",Toast.LENGTH_LONG).show();
         e.printStackTrace();
        }
      try {
            nfcv.close();
            } catch (IOException e) {
              e.printStackTrace();
            }
Answer 1

Как оказалось - CRC в явном виде не оправляется, т.к. функция высчитывает его сама. Моя ошибка заключалась в отправке неверного флага. Покопался в даташите и нашел описание каждого бита флага. Теперь все работает.

READ ALSO
Почему выдаёт ошибку java.lang.StringIndexOutOfBoundsException: length=0; index=0?

Почему выдаёт ошибку java.lang.StringIndexOutOfBoundsException: length=0; index=0?

У меня есть две картинки, они кликабельные, нажимая на эти картинки, я меняю цвет Action BarНо один код работает отлично, другой абсолютно такой...

155
java.lang.IllegalStateException: Duplicate key

java.lang.IllegalStateException: Duplicate key

Я разрабатываю игровое дополнение для Minecraft и столкнулся со следующей проблемойКогда я выполняю команду на добавление клана, то происходит...

194
Как исправить ошибку подключения к PostgreSQL из Inellij IDEA

Как исправить ошибку подключения к PostgreSQL из Inellij IDEA

Пытаюсь подключиться к БДjar файл подключил как библиотеку

213
Как привязать url фото профиля?

Как привязать url фото профиля?

Как привязать url фото профиля из Storage и юзера чата с этим фото из Database в одном адаптере?

209