2013-05-10 161 views
0

我想存儲一個整數值並用API函數遞增或遞減它。android nfc - mifare classic 1k增量操作失敗失敗

我已經readed與實用的卡,這是塊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(); 

我在this.mClassic.increment(firstBlock, 1); 我不明白我在做什麼錯返回tranceive failed ...誰可以幫我? 非常感謝。

+0

你能清理一下你的代碼並告訴我們你想要做什麼嗎? – ThomasRS 2013-05-10 11:35:48

+0

我想存儲一個整數值並用API函數遞增或遞減它。 – michele 2013-05-10 13:21:29

回答

5

Mifare 1K對值塊進行數據完整性檢查。不幸的是,您的zeroValue塊不是有效的值塊。因此,標籤抱怨並且出現錯誤。

你可以找到在MIFARE數據表格式

但是,值塊的格式很簡單(值得一讀!):

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 2013-05-12 12:56:19

+2

對不起,你必須親自編寫代碼。 – 2013-05-12 13:33:01