Низкоуровневый доступ к nfc в смартфоне с использованием libnfc

Я хотел бы использовать libnfc на смартфоне (я могу использовать как телефоны Android, так и Windows). Мне нужен низкоуровневый доступ к устройству NFC, потому что стандартный API не позволяет мне выполнять все необходимые мне действия.

Это возможно? Есть ли способ сделать что-то, кроме libnfc? Кто-нибудь может мне помочь?

1 ответ

телефон с операционной системой Виндоус

На Windows Phone я не думаю, что вам будет легко обойти Windows API и получить прямой доступ к уровню драйверов контроллера NFC с помощью своего собственного программного стека.

Android

На Android это зависит от того, о какой libnfc вы говорите, и от того, насколько глубоко вы хотите войти в систему Android устройства.

Этот libnfc поддерживает только контроллер NFC PN532 NFC и, следовательно, не работает с текущими контроллерами NFC, интегрированными в устройства Android (NXP PN544/PN547, Broadcom BCM2079x). Однако, если вы говорите о libnfc-nxp (для PN54x от NXP) или libnfc-nci (для BCM2079x Broadcom и, возможно, других совместимых с NCI чипов), это другая история. Вы можете использовать их или адаптировать к вашим потребностям.

Таким образом, теперь вопрос заключается в том, как вы можете обойти стандартный Android API и использовать напрямую существующий стек NFC (libnfc-nci/nxp или Android NFC).

Я бы посоветовал вам сначала взглянуть на функциональные возможности, которые предоставляет существующий сервис Android NFC, помимо того, что доступно через Android API. Если эта функциональность уже достаточна, вы можете попытаться напрямую взаимодействовать со службой NFC и просто использовать эту функциональность.

Если вам понадобится больше функциональности, это будет сложно: контроллер NFC интегрируется в систему Android через драйвер ядра и доступен в виде файла устройства Linux (в разделе /dev/). Служба Android NFC использует libnfc-nxp/nci для доступа к этому файлу устройства. Таким образом, в обычных условиях файл устройства уже используется службой Android NFC и поэтому недоступен / недоступен другим экземплярам libnfc-*. Более того, только служба NFC (или, скорее, ее пользователь Linux) имеет доступ к файлу устройства.

Итак, есть два варианта:

  1. Вы можете изменить всю систему Android (то есть создать специальную прошивку системы Android). В этом случае самым простым вариантом будет использовать существующий исходный код службы libnfc-* и Android NFC и расширить его с помощью своей функциональности. Вы даже можете адаптировать Android API вашей пользовательской прошивки к вашим потребностям.

  2. Вы хотите сменить работающую систему (т.е. вы не хотите прошивать настроенную прошивку на устройство). В этом случае вам потребуется заменить существующую службу Android NFC на собственную службу NFC, которая содержит расширенную функциональность, которая вам нужна. Вам, безусловно, понадобится доступ с правами root для достижения чего-либо из этого (поскольку вам придется принудительно завершить работу существующей службы NFC, а вашей замещающей службе NFC потребуется доступ к файлу устройства контроллера NFC).

Другие вопросы по тегам