Запись данных в Nexus 4 в режиме эмуляции карты с помощью ACR122

Я пытаюсь отправить некоторые данные на Nexus 4 через NFC (то есть в режиме эмуляции карты). Я попробовал несколько командных APDU, таких как запись и обновление APDU, но не смог заставить их работать.

Я пытаюсь сказать, что хочу отправить некоторые данные (это не AID) на телефон после команды select APDU.

Заранее спасибо,

Бадер


person user3657641    schedule 20.05.2014    source источник


Ответы (1)


Эмулированная карта HCE будет понимать именно те команды, которые обрабатывает служба APDU вашего приложения HCE. Так, например, если метод обратного вызова processCommandApdu() службы HCE выглядит следующим образом:

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 ...
    
  • ПОЛУЧИТЬ ДАННЫЕ для объекта данных 0201

    00 CA 02 01 00
    
  • ПОЛУЧИТЬ ДАННЫЕ для объекта данных 0202

    00 CA 02 02 00
    
  • ПОЛУЧИТЬ ДАННЫЕ для объекта данных 0203

    00 CA 02 03 00
    

Другие команды приведут к различным ошибкам.

person Michael Roland    schedule 20.05.2014