2015-05-12 4 views
10

У меня есть телефон LG D320n для Android, модуль PN532 nchc и модуль Stollmann NFCPlayer, с которым я могу правильно читать теги NFC.Android: эмуляция карты - прочитайте сообщение ndef с модулем n5c PN532

Я тестировал образец здесь: https://github.com/grundid/host-card-emulation-sample

Он отлично работает, когда я прочитал одно Android устройство в качестве тега с другим устройством Android в качестве читателя. Но я не могу прочитать устройство Android как тег с помощью считывателя PN532 через NFCPlayer. Я хочу, чтобы читатель читал сообщение NDEF с устройства Android, выступающего в качестве тега, но NFCPlayer даже не распознает устройство Android. Я думаю, что мне нужно написать некоторые изменения на стороне Android, но я не могу понять, что делать. Я думаю, что у меня недостаточно знаний о том, как работают NFC-коммуникации и HCE, хотя я читал это: https://developer.android.com/guide/topics/connectivity/nfc/hce.html

Я бы очень признателен за любые рекомендации, которые могут помочь мне понять, чего я здесь не хватает.

ответ

1

grundid example app должен быть обнаружен NFCPlayer как «унаследованный тег» (вкладка «R/W: Legacy»), поскольку он не реализует слой абстракции NDEF. На этой вкладке вы можете обменивать PDU (APDU в случае HCE) с эмулируемой смарт-картой. Действительный ПБДП для примера приложения будет

00 A4 04 00 07 F0010203040506 00 

Вы можете отправить этот APDU, введя его в поле PDU и нажав на кнопке «Фонды. PDU». Обратите внимание, что приложение grundid HCE даже не реализует APDU ответа ISO/IEC 7816-4. Следовательно, вы можете столкнуться с проблемами с некоторыми бесконтактными считывателями смарт-карт.

Если вы хотите, чтобы ваша эмулированная смарт-карта была обнаружена NFCPlayer в качестве тега NFC Forum Type 4, содержащего сообщение NDEF (вкладка «R/W: NDEF»), вам нужно будет реализовать спецификацию тегов NFC Forum Type 4 (как определено NFC Forum.Эта спецификация определяет, как данные должны быть сохранены на (эмулированной) шине Smart/ISO 14443-4, которая будет интерпретироваться как тег NDEF. В качестве отправной точки вы можете использовать это NDEF on HCE example app (хотя качество и надежность этот код является сомнительным) .Этот пример реализует файловую систему смарт-карт для хранения данных NDEF.

+0

Прошу прощения за такой поздний ответ. У меня были другие проекты, которые нужно было сделать в первую очередь. Ваш ответ мне очень помог. Я понял, что мне не нужны ndef-сообщения, поэтому я d не проверяйте эту часть). Большое спасибо! –

+0

привет, у меня есть другой вопрос. Он работает плавно с OnePluse One с CM. в logcat у меня есть эти выходы: 07-08 10: 30: 03.445 1468-26171 /? D/BrcmNfcJni: RoutingManager :: stackCallback: event = 0x18 07-08 10: 30: 03.450 1468-26171 /? D/HostEmulationManager: notifyHostEmulationActivated 07-08 10: 30: 03.452 1468-26171 /? D/BrcmNfcJni: RoutingManager :: stackCallback: event = 0x17 07-08 10: 30: 03.452 1468-26171 /? D/BrcmNfcJni: RoutingManager :: stackCallback: NFA_CE_DATA_EVT; стат = 0x0; ч = 0x301; data len = 13 –

+0

, а NFCPlayer находит мое устройство Android как ISO 14443-A с 1234 ID, а затем я могу обменять. PDU. , но с другим устройством (LG d320n) он не работает ... NFCPlayer не распознает его, а RoutingManager :: stackCallback: event = 0x18 или notifyHostEmulationActivated не вызывается, как я мог видеть его в logcat. почему это? Интересно, что однопроцессорное устройство распознает LG с помощью grundid app (режим приемника). Заранее спасибо! –

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