2013-05-10 5 views
0

정수 값을 저장하고 API 함수로 증가 또는 감소시키고 싶습니다.android nfc - mifare classic 1k 증가 작업이 실패 함

나는 유틸리티를 사용하여 카드를 읽혀질 수 있고,이 블록 (5)의 내용이다 : 값 블록이없는 것 같다 enter image description here

.

이 내 코드입니다 : 내가 잘못 뭐하는 거지 내가 이해가 안 this.mClassic.increment(firstBlock, 1); 에서 tranceive failed을 돌아왔다

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(); 

... 나를 도울 수 있습니까? 고마워요.

+0

코드를 다소 정리하고 수행하려는 작업을 알려주십시오. – ThomasRS

+0

정수 값을 저장하고 API 함수로 증가 또는 감소시키고 싶습니다. – michele

답변

5

Mifare 1K는 값 블록에서 데이터 무결성 검사를 수행합니다. zeroValue 블록은 불행히도 유효한 값 블록이 아닙니다. 따라서 태그가 불평하고 오류가 발생합니다.

당신은 MIFARE 데이터 시트의 형식을 찾을 수 있습니다

그러나, 가치 블록의 형식은 간단하다 (읽을 가치!) :

당신이 사용하여 32 비트 값을 저장하는 경우
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 

위의 형식을 사용하면 코드가 작동하기 쉽습니다.

+0

어떻게 자바로 만들 수 있습니까? thanks – michele

+2

죄송합니다, 자신 코드를 작성해야합니다. –