2014-05-20 41 views
-1

我試圖通過NFC(即卡模擬模式)將一些數據發送到Nexus 4。我嘗試了許多命令APDU,例如寫入和更新APDU,但是我無法讓它們工作。使用ACR122在卡模擬模式下將數據寫入Nexus 4

我想說的是,我希望在選擇APDU命令後向手機發送一些數據(不是AID)。

由於提前,

貝德

回答

1

的HCE模擬卡將確切地理解這些命令,你的HCE應用程序的APDU服務流程。所以,舉例來說,如果你的HCE服務的processCommandApdu()回調方法是這樣的:

final static byte[] SW_NO_ERROR = new byte[]{ (byte)0x90, (byte)0x00 }; 
final static byte[] SW_INCORRECT_P1P2 = new byte[]{ (byte)0x6A, (byte)0x86 }; 
final static byte[] SW_INS_NOT_SUPPORTED = new byte[]{ (byte)0x6D, (byte)0x00 }; 
final static byte[] SW_ERR_UNKNOWN = new byte[]{ (byte)0x6F, (byte)0x00 }; 

@Override 
public byte[] processCommandApdu(byte[] apdu, Bundle extras) { 
    if (apdu.length >= 4) { 
     if ((apdu[1] == (byte)0xA4) && (apdu[2] == (byte)0x04)) { 
      // SELECT APPLICATION 
      return SW_NO_ERROR; 
     } else if ((apdu[1] == (byte)0xCA) && (apdu[2] == (byte)0x02)) { 
      // GET DATA (SIMPLE TLV) 
      switch (apdu[3] & 0x0FF) { 
       case 0x001: 
        return new byte[]{ apdu[3], (byte)0x02, (byte)0x01, (byte)0x00, (byte)0x90, (byte)0x00 }; 
       case 0x002: 
        return new byte[]{ apdu[3], (byte)0x02, (byte)0x12, (byte)0x34, (byte)0x90, (byte)0x00 }; 
       case 0x003: 
        return new byte[]{ apdu[3], (byte)0x06, (byte)0xAA, (byte)0xBB, (byte)0xCC, (byte)0xDD, (byte)0xEE, (byte)0xFF, (byte)0x90, (byte)0x00 }; 
       default: 
        return SW_INCORRECT_P1P2; 
      } 
     } else { 
      return SW_INS_NOT_SUPPORTED; 
     } 
    } 

    return SW_ERR_UNKNOWN; 
} 

你HCE應用程序將瞭解以下APDU命令:

  • 選擇應用程序(由AID)

    00 A4 04 xx ... 
    
  • GET DATA for data object 0201

    00 CA 02 01 00 
    
  • 用於數據GET數據對象0202

    00 CA 02 02 00 
    
  • GET DATA爲數據對象0203

    00 CA 02 03 00 
    

其它命令將導致各種錯誤。

+0

謝謝,這是有幫助的 – user3657641