2013-05-10 2 views
0

Я хочу сохранить целочисленное значение и увеличивать или уменьшать его с помощью функции API.android nfc - mifare classic 1k Ошибка приращения операции tranceive

Я прочитанная карту с помощью утилиты, и это содержание блока 5: enter image description here

Кажется, что нет никакого значения блока.

Это мой код:

int sector = 5; 
    this.mClassic.connect(); 
    boolean success = this.mClassic.authenticateSectorWithKeyA(sector, MifareClassic.KEY_DEFAULT); 

     if(success){ 
      int firstBlock = mClassic.sectorToBlock(sector); 
      Log.i("MIFARE CLASSIC", "first block of the given sector:" + firstBlock); 


      //set the value = 0 
      byte[] zeroValue = {0, 0, 0, 0, 0,0,0,0,0,0,0,0,0,0,0,0,}; 
      //save this value 
          mClassic.writeBlock(firstBlock, zeroValue); 

      //increment the value and store it 
      this.mClassic.increment(firstBlock, 1); 
      this.mClassic.transfer(firstBlock); 

      // read the incremented value by converting it in integer from bytearray 
      b = readSector(firstBlock); 
      data = b.toByteArray(); 
      value = 0; 
      for (int i = 0; i < data.length; i++) 
      { 
       value = (value << 8) + (data[i] & 0xff); 
      } 
      Log.i("MIFARE CLASSIC", "After increment " + value); 
     } 
     mClassic.close(); 

Я вернулся tranceive failed в this.mClassic.increment(firstBlock, 1); я не понимаю, что я делаю неправильно ... кто может мне помочь? Большое спасибо.

+0

Можете ли вы немного очистить свой код и рассказать нам, что вы пытаетесь сделать? – ThomasRS

+0

Я хочу сохранить целочисленное значение и увеличивать или уменьшать его с помощью функции API. – michele

ответ

5

Mifare 1K выполняет проверку целостности данных в блоке значений. К сожалению, ваш блок zeroValue не является допустимым блоком значений. Поэтому тег жалуется, и вы получаете сообщение об ошибке.

Вы можете найти формат, в Mifare Datasheets

Однако формат ценностного блока прост (стоит читать!):

byte 0..3: 32 bit value in little endian 
byte 4..7: copy of byte 0..3, with inverted bits (aka. XOR 255) 
byte 8..11: copy of byte 0..3 
byte 12:  index of backup block (can be any value) 
byte 13:  copy of byte 12 with inverted bits (aka. XOR 255) 
byte 14:  copy of byte 12 
byte 15:  copy of byte 13 

Если вы храните 32 разрядное значение с помощью формат выше, ваш код, скорее всего, просто сработает.

+0

как я могу создать его с помощью java? спасибо – michele

+2

К сожалению, вам нужно написать код самостоятельно. –

Смежные вопросы