NXP PN7160 Istruzioni per i controller NFC basati su NCI

L'infurmazione di u documentu 

infurmazione Cuntinutu
Parole chjave PN7160, PN7220, NCI, EMVCo, NFC Forum, Android, NFC
Astrattu Stu documentu descrive cumu portà a liberazione di middleware cumuni PN7160/PN7220 à Android 14.

Questa guida furnisce struzzioni dettagliate nantu à cumu integrà i controller NFC basati in NXP NCI, PN7160 è PN7220, in un ambiente Android. U prucessu implica l'installazione di u driver di kernel necessariu è a cunfigurazione di MW (vede [1]). Per più infurmazione, riferite à a pagina di u produttu per PN7160 [2] è PN7220 [3]. U Prughjettu Android Open Source (AOSP) hè statu aghjurnatu per incorpore supportu per i cuntrolli NFC PN7160 è PN7220.

U PN7220 vene in duie cunfigurazioni: unicu host è dual-host. A pila hè generalmente a stessa per i dui. In u modu dual-host, SMCU hè aghjuntu chì significa chì tutti i travaglii ligati EMVCo sò eseguiti nantu à SMCU. In singlehost EMVCo hè eseguitu in una pila MW dedicata EMVCo

Android MW stack

A Figura 1 illustra l'architettura di a pila Android NFC PN7220.

  • U NXP I2C Driver hè un modulu di kernel chì permette l'accessu à e risorse hardware di PN7220.
  • U modulu HAL hè una implementazione di a strata di astrazione hardware specifica per u controller NXP NFC.
  • LibNfc-Nci hè una libreria nativa chì furnisce funziunalità NFC.
  • NFC JNI agisce cum'è un ponte trà Java è classi Native.
  • U Framework NFC è EMVCo hè un modulu di u framework di l'applicazione chì permette l'accessu à e funziunalità NFC è EMVCo.

A Figura 2 mostra l'architettura di a pila Android NFC PN7160. 


Figura 2. PN7160 Android MW stack 

  • U NXP I2C Driver hè un modulu di kernel chì permette l'accessu à e risorse hardware di PN7160.
  • U modulu HAL hè una implementazione di a strata di astrazione hardware specifica per u controller NXP NFC.
  • LibNfc-nci hè una libreria nativa chì furnisce funziunalità NFC.
  • NFC JNI agisce cum'è un ponte trà Java è classi Native.
  • L'NFC hè un modulu di u framework di l'applicazione chì permette l'accessu à e funziunalità NFC.
  • U codice fonte MW hè u listessu per PN7160 è PN7220, ma ci sò uni pochi limitazioni.

A Tabella 1 mostra caratteristiche micca supportate di ogni controller NFC. 

Table 1. Funzioni senza supportu 

Controller NFC Funzioni micca supportate
PN7160
  • EMVCo MW stack
  • SMCU
  • funzione CT
PN7220
  • NFCEE_NDEF

Nota: Da Android 14 in poi, P2P ùn hè micca supportatu ancu in PN7160.

Driver di u kernel

Per stabilisce a cunnessione cù u PN7220 o PN7160, a pila Android usa u driver di kernel nxpnfc. Si pò truvà in [4].

Dettagli di u driver

PN7220 supporta l'interfaccia fisica I2C, mentri PN7160 supporta l'interfaccia fisica I2C o SPI. Quandu hè stallatu in u kernel, u driver hè espostu via u node di u dispositivu in /dev/nxpnfc.

Nota: PN7160 è PN7220 utilizanu dui drivers differenti, a selezzione di u driver currettu hè necessariu basatu annantu à u tipu di chip.

Ottene u codice fonte di u driver PN7160

Copia u repository di driver nfcandroid_platform_drivers/drivers/pn7160/nfc in u repertoriu di u kernel, rimpiazzendu l'implementazione esistente. Vede [4] per u kernel files.

$rm -rf drivers/nfc
$git clone "https://github.com/nxp-nfc-infra/nfcandroid_platform_drivers.git" -b
br_ar_14_comm_infra_dev

Questu finisci cù u cartulare drivers/nfc chì cuntene i seguenti files:

  • README.md: infurmazione di repository
  • Fatefile: cunduttore intestatu fàfile
  • Kconfig: cunfigurazione di u driver file
  • Licenza: termini di licenza di cunduttore
  • nfc sottocartella chì cuntene:
    • commoc.c: implementazione di driver genericu
    • common.h: definizione di l'interfaccia generica di u driver
    • i2c_drv.c: implementazione di driver specifichi i2c
    • - i2c_drv.h: definizione di l'interfaccia di u driver specificu i2c
    • spi_drv.c: implementazione di u driver specificu spi
    • spi_drv.h: definizione di l'interfaccia di u driver specificu spi
    • Fatefile: fàfile chì hè inclusu in a marcafile di u cunduttore
    • Kbuild => custruisce file
    • Kconfig => cunfigurazione di u driver file
Ottene u codice fonte di u driver PN7220

Copia u nfcandroid_platform_drivers/drivers/pn7220cs/nfc (single-host usecase) o nfcandroid_platform_ drivers/drivers/pn7220cms/nfc (dual-host usecase) in u kernel directory drivers/nfc, rimpiazzà u driver esistente. Vede [4] per u kernel files.

$rm -rf drivers/nfc$git clone "https://github.com/nxp-nfc-infra/nfcandroid_platform_drivers.git" -bbr_ar_14_comm_infra_dev

Dopu stu cumandamentu, u cartulare drivers/nfc cuntene i seguenti files:

  • README.md: infurmazione di repository
  • Fatefile: cunduttore intestatu fàfile
  • Kconfig: cunfigurazione di u driver file
  • Licenza: termini di licenza di cunduttore
  • nfc sottocartella chì cuntene:
    • commoc.c: implementazione di driver genericu
    • common.h: definizione di l'interfaccia generica di u driver
    • i2c_drv.c: implementazione di driver specifichi i2c
    • i2c_drv.h: Definizione di l'interfaccia di driver specifichi i2c
    • Fatefile: fàfile chì hè inclusu in a marcafile di u cunduttore
    • Kbuild => custruisce file
    • Kconfig => cunfigurazione di u driver file
Custruì u driver

L'arburu di u dispositivu hè rispunsevuli di aghjunghje u driver à u kernel è di carricà in u boot di u dispositivu.

Dopu avè aghjurnatu a specificazione di l'arburu di u dispusitivu, l'arburu di l'arburu di a piattaforma deve esse ricustruita. NXP consiglia di utilizà a versione di kernel 5.10 perchè furnisce una validazione cumpleta.

Per custruisce u driver, i seguenti passi deve esse realizatu:

  1. Pigliate u driver di kernel
  2. Ottene u codice fonte per u driver
  3. Mudificà a definizione di l'arburu di u dispusitivu, chì hè unicu à u dispusitivu in usu.
  4. Custruisce u driver:

a. Per mezu di a prucedura di menuconfig, aghjunghje u driver di destinazione in a custruzzione.

Dopu avè ricustruitu u kernel cumpletu, u driver serà inclusu in l'imaghjini di u kernel. Tutte l'imaghjini novi di u kernel devenu esse copiate in a custruzione AOSP.

adattazione AOSP

NXP aghjusta mudificazioni à u codice AOSP. Questu significa chì u codice AOSP hè utilizatu com'è fundazione, ma estendu per e funzioni specifiche NXP. [5] hè l'AOSP attuale tag utilizatu da NXP. Dopu avè ottenutu l'AOSP build, u codice AOSP esistente deve esse rimpiazzatu, è un numeru di patch deve esse applicatu.

Nota: Una versione diversa di u codice AOSP pò esse aduprata, ma mudificazioni supplementari deve esse realizatu.

AOSP custruisce

Ottene u codice fonte AOSP.

$ repo init -u https://android.googlesource.com/platform/manifest -b android-14.0.0_r2 $ repo sync

Nota: U strumentu repo deve esse stallatu nant'à u sistema. Vede [6] per l'istruzzioni.

Custruisce u codice fonte.

$cd Android_AROOT
$source build/envsetup.sh
$lunch select_target #target hè DH chì vulemu aduprà per example: evk_8mn-userdebug
$ fà -j

Copia tutti i repositori NXP in u locu di destinazione.

Tabella 2. Branche per a versione specifica di Android

versione Android Branca
Android 14 br_ar_14_comm_infra_dev

Nota: Mentre a clonazione, hè impurtante selezziunà u ramu currettu.

Table 3. Clone repository

AOSP Repos NXP GitHub Repos
"$ANDROID_ROOT"/pacchetti/ apps/Nfc https://github.com/nxp-nfc-infra/nxp_nci_hal_nfc/tree/br_ar_14_comm_infra_dev
"$ANDROID_ROOT"/system/nfc https://github.com/nxp-nfc-infra/nxp_nci_hal_libnfc-nci/tree/br_ar_14_comm_infra_dev
"$ANDROID_ROOT"/hardware/ nxp/nfc https://github.com/nxp-nfc-infra/nfcandroid_nfc_hidlimpl/tree/br_ar_14_comm_infra_dev
"$ANDROID_ROOT"/vendor/nxp/ quadri https://github.com/nxp-nfc-infra/nfcandroid_frameworks/tree/br_ar_14_comm_infra_dev
"$ANDROID_ROOT"/hardware/ nxp/emvco https://github.com/nxp-nfc-infra/nfcandroid_emvco_aidlimpl/tree/ br_ar_14_comm_infra_dev
"$ANDROID_ROOT" https://github.com/nxp-nfc-infra/nfcandroid_platform_reference/tree/ br_ar_14_comm_infra_dev

Table 4. Clone repository per l'applicazioni di teste è u supportu TDA 

Folder in GitHub AOSP Repos NXP GitHub IC Supportatu
test_apps/SMCU_Switch "$ANDROID_ROOT"/

pacchetti/applicazioni/

https://github.com/ nxp-nfc-infra/

nfcandroid_infra_test_apps

PN7220
test_apps/EMVCoMode SwitchApp "$ANDROID_ROOT"/

pacchetti/applicazioni/Nfc/

https://github.com/ nxp-nfc-infra/

nfcandroid_infra_test_apps

PN7220
test_apps/Cockpit "$ANDROID_ROOT"/

hardware/nxp/nfc/

https://github.com/ nxp-nfc-infra/

nfcandroid_infra_test_apps

PN7220
test_apps/SelfTest "$ANDROID_ROOT"/

hardware/nxp/nfc/

https://github.com/ nxp-nfc-infra/

nfcandroid_infra_test_apps

PN7220
test_apps/SelfTest_pn7160 "$ANDROID_ROOT"/

hardware/nxp/nfc/

https://github.com/ nxp-nfc-infra/

nfcandroid_infra_test_apps

PN7160
test_apps/load_unload "$ANDROID_ROOT"/

hardware/nxp/nfc/

https://github.com/ nxp-nfc-infra/

nfcandroid_infra_test_apps

PN7220
test_apps/SelfTestAidl "$ANDROID_ROOT"/

hardware/nxp/nfc/

https://github.com/ nxp-nfc-infra/

nfcandroid_infra_test_apps

PN7220
nfc_tda "$ANDROID_ROOT"/sistema/ https://github.com/ nxp-nfc-infra/

nfcandroid_infra_comm_libs

PN7220
emvco_tda "$ANDROID_ROOT"/

hardware/nxp/emvco/

https://github.com/ nxp-nfc-infra/

nfcandroid_infra_comm_libs

PN7220
emvco_tda_test "$ANDROID_ROOT"/

hardware/nxp/emvco/

https://github.com/ nxp-nfc-infra/

nfcandroid_infra_comm_libs

PN7220
NfcTdaTestApp "$ANDROID_ROOT"/

pacchetti/applicazioni/Nfc/

https://github.com/ nxp-nfc-infra/nfcandroid_infra_comm_libs PN7220

Applica patchs

Table 5. Apply patches

Locu per applicà Patch da applicà Locu di u patch
"$ANDROID_ROOT"/build/ bazel/ AROOT_build_bazel. patch https://github.com/nxp-nfc-infra/nfcandroid_platform_reference/ tree/br_ar_14_comm_infra_dev/build_cfg/build_pf_patches/
"$ANDROID_ROOT"/build/ fà/ AROOT_build_make. patch https://github.com/nxp-nfc-infra/nfcandroid_platform_reference/ tree/br_ar_14_comm_infra_dev/build_cfg/build_pf_patches/
"$ANDROID_ROOT"/build/ prestu/ AROOT_build_soong. patch https://github.com/nxp-nfc-infra/nfcandroid_platform_reference/ tree/br_ar_14_comm_infra_dev/build_cfg/build_pf_patches/
"$ANDROID_ROOT"/

frameworks/base/

AROOT_frameworks_ basa.patch https://github.com/nxp-nfc-infra/nfcandroid_platform_reference/ tree/br_ar_14_comm_infra_dev/build_cfg/build_pf_patches/
"$ANDROID_ROOT"/

frameworks/nativu/

AROOT_frameworks_ nativu.patch https://github.com/nxp-nfc-infra/nfcandroid_platform_reference/ tree/br_ar_14_comm_infra_dev/build_cfg/build_pf_patches/
"$ANDROID_ROOT"/

sistema / logging /

AROOT_system_logging. patch https://github.com/nxp-nfc-infra/nfcandroid_platform_reference/ tree/br_ar_14_comm_infra_dev/build_cfg/build_pf_patches/
"$ANDROID_ROOT"/

pacchetti/moduli/ bluethooth/

AROOT_packages_moduli_Bluethooth. patch https://github.com/nxp-nfc-infra/nfcandroid_platform_reference/ tree/br_ar_14_comm_infra_dev/build_cfg/build_pf_patches/
"$ANDROID_ROOT"/

framework/proto_logging/

AROOT_framework_ proto_logging.patch https://github.com/nxp-nfc-infra/nfcandroid_platform_reference/ tree/br_ar_14_comm_infra_dev/build_cfg/build_pf_patches/

Nota: Verificate l'output dopu l'applicazione di u patch, se ogni prublema hè stata osservata durante u patch.

Aggiungi librerie FW. Vede [8] per FW.

Nota: Ùn hè micca obligatoriu. FW pò esse sempre aghjurnatu.

Per PN7160: 

$git clone https://github.com/NXP/nfc-NXPNFCC_FW.git
$cp -r nfc-NXPNFCC_FW/InfraFW/pn7220/64-bit/libpn7160_fw.so AROOT/vendor/
nxp/7160/firmware/lib64/libpn7160_fw.so
$cp -r nfc-NXPNFCC_FW/InfraFW/pn7220/32-bit/libpn7160_fw.so AROOT/vendor/
nxp/7160/firmware/lib/libpn7160_fw.so

Per PN7220: 

$git clone https://github.com/NXP/nfc-NXPNFCC_FW.git
$cp -r nfc-NXPNFCC_FW/InfraFW/pn7220/64-bit/libpn7220_64bit.so AROOT/vendor/nxp/
pn7220/firmware/lib64/libpn72xx_fw.so

Aghjunghjendu NFC à a custruzione

In u dispusitivu.mk makefile (per esample, device/brand/platform/device.mk), includenu una marca specificafiles:

$(call inherit-product, vendor/nxp/nfc/device-nfc.mk) 

In u BoardConfig.mk fatefile (per esample, device/brand/platform/BoardConfig.mk), includenu una marca specificafile:

-include vendor/nxp/nfc/BoardConfigNfc.mk 

Aghjunghjite l'applicazione DTA

$git clone https://github.com/NXPNFCProject/NXPAndroidDTA.git $patch -p1 nfc-dta.patch #situatu in https://github.com/nxp-nfc-infra/ nfcandroid_platform_reference/tree/br_ar_14_comm_infra_dev/build build_mw_patches/db845c $ cp -r nfc-dta /system/nfc-dta $/system/nfc-dta/$ mm -j

Custruite AOSP cù cambiamenti:

$cd framework/base
$mm
$cd ../..
$cd venditore/nxp/frameworks
$mm #dopu à questu, com.nxp.emvco.jar è com.nxp.nfc.jar duveranu esse fora /
destinazione/prodotto/xxxx/sistema/framwework/
$cd ../../..
$cd hardware/nxp/nfc
$mm
$cd ../../..
$ fà -j

Avà, lampu u dispusitivu cù novi images Android.

Android NFC Apps è Lib nantu à i miri

Dopu à a custruzzione, e librerie create deve esse stallate nantu à u dispusitivu di destinazione. A Sezione 4.2 specifica u locu di u prughjettu, a biblioteca currispundente è u locu di u dispositivu di destinazione induve esse installatu.

Nota: I binari EMVCo sò applicabili solu cù PN7220.

Table 6. Cumpilatu files cù u scopu di u dispusitivu 

Locu di u prugettu Cumpilatu Files Cumenti Situazione in u dispusitivu di destinazione
"$ANDROID_ROOT"/

pacchetti/apps/Nfc

NfcNci.odex NfcNci.vdex lib/NfcNci.apk oat/libnfc_nci_jni.so   /system/app/NfcNci/ avena/bracciu64/

/system/app/NfcNci/ avena/bracciu64/

/system/app/NfcNci/

/system/lib64/

"$ANDROID_ROOT"/

sistema / nfc

libnfc_nci.so   /system/lib64/
"$ANDROID_ROOT"/

system/nfc_tda"

nfc_tda.so Applicabile solu per a funzione CT. /system/lib64/
"$ANDROID_ROOT"/

hardware/nxp/nfc

nfc_nci_nxp_pn72xx.so android.hardware.nfc_72xx@1.2-service android.hardware.nfc_72xx@1.2-service.rc android.hardware.nfc@1.0.so android.hardware.nfc@1.1.so android.hardware.nfc@1.2.so venditore.nxp.nxpnfc@2.0.so venditore.nxp.nxpnfc@1.0.so   /vendor/lib64

/vendor/bin/hw/

/vendor/etc/init

/system/lib64/

/system/lib64/

/system/lib64/

/vendor/lib64/

/vendor/lib64/

"$ANDROID_ROOT/

hardware / interfacce / nfc "

android.hardware.nfc-V1-ndk.so android.hardware.nfc@1.0.so android.hardware.nfc@1.1.so android.hardware.nfc@1.2.so android.hardware.nfc@1.0.so android.hardware.nfc@1.1.so android.hardware.nfc@1.2.so   /system\/ib64/

/system/lib64/

/system/lib64/

/system/lib64/

/vendor/lib64/

/vendor/lib64/

/vendor/lib64/

"$ANDROID_ROOT"/

venditore/nxp/frameworks

com.nxp.emvco.jar (PN7220) com.nxp.nfc.jar   /system/framework

/system/framework

"$ANDROID_ROOT"/

hardware/nxp/emvco

emvco_poller.so (PN7220) vendor.nxp.emvco-V1-ndk.so vendor.nxp.emvco-V2-ndk.so vendor.nxp.emvco-V2-ndk.so vendor.nxp.emvco-service vendor.nxp. emvco-service.rc   /vendor/lib64/

/system/lib64/

/system/lib64/

/vendor/lib64/

/vendor/bin/hw/

/vendor/etc/init/

"$ANDROID_ROOT/

hardware/nxp/emvco_tda”

emvco_tda.so Applicabile solu per a funzione CT. /vendor/lib64/
Block mapping

Mapping the block name from Section 1 to target location in AOSP code.

Table 7. Patch location in NFC Stack 

Block name Situazione in codice AOSP
NFC HAL è EMVCo HAL hardware / interfacce /
Pila NFC hardware/nxp/nfc/
EMVCo L1 Data Exchange Layer = EMVCo Stack hardware/nxp/emvco/
LibNfc-Nci sistema/nfc/
NFC JNI pacchetti/applicazioni/nfc/
Serviziu NFC pacchetti/applicazioni/nfc/
Framework NFC frameworks/base/
Quadru EMVCo venditore/nxp/frameworks/
EMVCo AP

PN7220 MW stack estende u codice AOSP cù EMVCo MW stack. Questa sezione descrive l'API EMVCo.

Nota: L'API pò esse chjamatu solu quandu si usa PN7220 IC. Sè u chjamà cù PN7160 IC, l'API ùn funziona micca. EMVCo Profile Scuperta. Quelli API ponu esse aduprati cù contactless è contactless profiles.

registerEMVCoEventListener()

  • ndk::ScopedAStatus registerEMVCoEventListener (const std::shared_ptr< INxpEmvcoClientCallback > & in_clientCallback, bool * in_aidl_return)
  • Descrizzione: Registrate a funzione di callback EMVCo per riceve l'avvenimenti da un dispositivu di ascolta
  • Nota: Questa funzione deve esse da ballà prima di invucà qualsiasi altra API.
  • Parametri:
    • [in] *in_clientCallback: hà una callback HAL di u cliente EMVCo
    • [in] *in_aidl_return: indica u statu di registru in ritornu à u chjamante
  • Ritorna
    • boolean ritorna veru, se successu è torna falsu, s'ellu ùn hè micca successu à registrà

uttene u Modu di scuperta attuale () 

  • ndk::ScopedAStatus getCurrentDiscoveryMode(::aidl::vendor::nxp::emvco::NxpDiscoveryMode * _aidl_return)
  • Descrizzione: torna l'attuale pro attivufile tipu.
  • Ritorna
    • NxpDiscoveryMode - NFC / EMVCo / Unknown

onNfcStateChange() 

  • ndk::ScopedAStatus onNfcStateChange (NxpNfcState in_nfcState)
  • Descrizzione: aghjurnatu u statu NFC à EMVCo HAL.
  • Parametri:
    • [in] in_nfcState: specifica u statu NFC
  • Ritorni:
    • nuddu

registerNFCStateChangeCallback()

  • ndk::ScopedAStatus registerNFCStateChangeCallback ( const std::shared_ptr< ::aidl::vendor::nxp::emvco::INxpNfcStateChangeRequestCallback > & in_nfcStateChangeRequestCallback, bool * _aidl_re
  • Descrizzione: Registrate una funzione di callback NFC per riceve l'avvenimenti da un dispositivu di ascolta.
  • Nota: Questa funzione deve esse chjamata prima di invucà qualsiasi altra API.
  • Parametri:
    • [in] in_nfcStateChangeCallback: INxpNfcStateChangeRequestCallback a funzione di callback di l'avvenimentu chì deve esse passatu da u chjamante. Duverebbe implementà per accende / disattiva NFC basatu nantu à a dumanda ricevuta.
  • Ritorni: boolean ritorna vera, se u successu è ritorna false, s'ellu ùn hè micca statu registratu.

setByteConfig()

ndk::ScopedAStatus setByteConfig ( ::aidl::vendor::nxp::emvco::NxpConfigType
in_type,
int32_t in_length,
int8_t in_value,
::aidl::vendor::nxp::emvco::NxpEmvcoStatus * _aidl_return

setEMVCoMode()

ndk::ScopedAStatus setEMVCoMode ( int8_t in_disc_mask,
bool in_isStartEMVCo )

  • Descrizzione: Cumincia u modu EMVCo cù u Device-Controller. Una volta chì u Canale di Dati di l'Applicazione hè stabilitu, l'Applicazione pò mandà à inizià u modu EMVCo cù u Dispositivu-Controller.
  • Parametri:
    • [in] in_disc_mask EMVCo: e tecnulugia di polling sò cunfigurate attraversu stu paràmetru
    • [in]in_isStartEMVCo: specifica per inizià o piantà u modu EMVCo
  • Ritorni:
    • nuddu

setLed()

ndk::ScopedAStatus setLed ( ::aidl::vendor::nxp::emvco::NxpLedControl
in_ledControl,
::aidl::vendor::nxp::emvco::NxpEmvcoStatus * emvco_status)

Per Cuntattate EMVCo, i seguenti API ponu esse aduprati sopra à i precedenti.

closeTDA()

ndk::ScopedAStatus closeTDA ( int8_t in_tdaID, bool in_standBy )

  • Descrizzione: Chiude a smart card cunnessa cù TDA
  • Parametri:
    • [in] tdaID: id di u slot tda da chjude
  • Eccezzioni:
    • EMVCO_STATUS_INVALID_PARAMETER, se furnitu tdaID ùn hè micca validu
    • EMVCO_STATUS_FEATURE_NOT_SUPPORTED quandu a funzione di a carta di cuntattu ùn hè micca supportata.
  • Ritorni:
    • nuddu

scopre TDA()

ndk::ScopedAStatus discoverTDA
(std::vector<::aidl::vendor::nxp::emvco::NxpEmvcoTDAInfo > * emvcoTDAInfo)

Descrizzione: discoverTDA furnisce tutti i dettagli di a smart card cunnessa nantu à TDA

  • Parametri:
    • [in]*in_clientCallback: furnisce u statu EMVCo è u statu TDA cum'è callback
  • Eccezzioni:
    •  EMVCO_STATUS_FEATURE_NOT_SUPPORTED quandu a funzione di a carta di cuntattu ùn hè micca supportata.
  • Ritorni:
    • NxpEmvcoTDAInfo[] torna tutte e smart card cunnesse nantu à TDA. emvcoTDAInfo validu hè ricevutu solu quandu u statutu hè EMVCO_STATUS_OK

openTDA()

ndk::ScopedAStatus openTDA ( int8_t in_tdaID, bool in_standBy, int8_t * out_connID )

Descrizzione: apre a smart card cunnessa cù TDA

  • Parametri:
    • [in]tdaID: tda id di a smart card ricevuta attraversu discoverTDA
  • Eccezzioni:
    • EMVCO_STATUS_INVALID_PARAMETER, se furnitu tdaID ùn hè micca validu
    • EMVCO_STATUS_FEATURE_NOT_SUPPORTED quandu a funzione di a carta di cuntattu ùn hè micca supportata.
  • Ritorni:
    • byte torna l'id di cunnessione di a smart card. ID di cunnessione validu ricevutu solu quandu u statutu hè EMVCO_STATUS_OK

registerEMVCoCTListener() 

ndk::ScopedAStatus registerEMVCoCTListener (const std::shared_ptr<::aidl::vendor::nxp::emvco::INxpEmvcoTDACallback > & in_in_clientCallback, bool * _aidl_return)

  • Descrizzione: registra a callback EMVCoCT à a pila EMVCo
  • Parametri:
    • [in]*in_in_clientCallback: furnisce u statu EMVCo è u statu TDA cum'è callback
  • Ritorni:
    • nuddu 

riceve () 

ndk::ScopedAStatus transceive (const std::vector< uint8_t > & in_cmd_data, std::vector< uint8_t > * out_rsp_data )

  • Descrizzione: manda dati di l'applicazione cù u Device-Controller è riceve dati di risposta da u controller
  • Nota: L'ID di cunnessione di u TDA deve esse aghjuntu cum'è parte di l'intestazione NCI.
  • Parametri:
    • [in]in_cmd_data: Buffer di dati di cumanda di l'applicazione
  • Eccezzioni:
    • EMVCO_STATUS_INVALID_PARAMETER, se l'ID di cunnessione furnitu ùn hè micca validu
    • EMVCO_STATUS_FEATURE_NOT_SUPPORTED quandu a funzione di a carta di cuntattu ùn hè micca supportata.
  • Ritorni:
    • Risposta APDU ricevuta da u cuntrollu. Risposta valida APDU ricevuta solu quandu u statutu hè EMVCO_STATUS_OK

Per EMVCo senza contactu, i seguenti API ponu esse chjamati:

registerEMVCoEventListener()

ndk::ScopedAStatus registerEMVCoEventListener (const std::shared_ptr< INxpEmvcoClientCallback > & in_clientCallback, bool * _aidl_return )

  • Descrizzione: Registrate una funzione di callback EMVCo per riceve l'avvenimenti da un dispositivu di ascolta.
  • Nota: Questa funzione deve esse chjamata prima di invucà qualsiasi altra API.
  • Parametri:
    • [in] * in_clientCallback: hà una callback HAL di u cliente EMVCo
    • [in]*in_aidl_return: indica u statu di registru in ritornu à u chjamante
  • Ritorni:
    • boolean ritorna veru, se successu è torna falsu, s'ellu ùn hè micca successu à registrà

setEMVCoMode()

ndk::ScopedAStatus setEMVCoMode ( int8_t in_config, bool in_isStartEMVCo )

  • Descrizzione: Cumincia u modu EMVCo cù u Device-Controller. Una volta chì u Canale di Dati di l'Applicazione hè stabilitu, l'Applicazione pò mandà à inizià u modu EMVCo cù u Dispositivu-Controller.
  • Parametri:
    • [in]in_config: E tecnulugie di polling EMVCo sò cunfigurate attraversu stu paràmetru
    • [in]in_isStartEMVCo: specifica per inizià o piantà u modu EMVCo
  • Ritorni:
    • nuddu

StopRFDisovery ()

ndk::ScopedAStatus stopRFDisovery
( ::aidl::vendor::nxp::emvco::NxpDeactivationType in_deactivationType, ::aidl::vendor::nxp::emvco::NxpEmvcoStatus * emvco_status )

  • Descrizzione: ferma u campu RF è si move in u statu di disattivazione specificatu.
  • Parametri:
    • [in]in_deactivationType: specifica u statu da esse dopu a disattivazione RF
  • Ritorni:
    • NxpEmvcoStatus torna EMVCO_STATUS_OK se u cumandamentu hè statu processatu bè è torna EMVCO_STATUS_FAILED, se u cumandamentu ùn hè micca processatu per via di un statu invalidu. U modu EMVCo deve esse ON per chjamà sta API

riceve ()

ndk::ScopedAStatus transceive (const std::vector< uint8_t > & in_data, int32_t * _aidl_return )

  • Descrizzione: mandà dati dumanda cù u Device-Controller.
  • Nota: In casu, se l'invio di dati hè fallutu, l'Applicazione invocà di novu open() prima di invucà sta API.
  • Parametri:
    • (in]in_data : Buffer di dati di l'applicazione
  • Ritorni:
    • NxpEmvcoStatus chì indica u statu di esecuzione
Cunfigurazione files PN7160

Per PN7160, ci sò dui cunfigurazioni diffirenti files.

  1. libnfc-nci.conf
  2. libnfc-nxp.conf

Nota: Cunfigurazione files furniti da NXP sò examples liati à a scheda demo di u controller NFC. Quessi files deve esse aduttatu secondu l'integrazione mirata.

Cunfigurazione files deve esse piazzatu in u locu di destinazione (vede Table 8).

Table 8. Locu di cunfigurazione files 

Nome di cunfigurazione file Locu in u dispusitivu
libnfc-nci.conf sistema / ecc
libnfc-nxp.conf venditore / ecc

Per avè più infurmazione nantu à a cunfigurazione files, vede [9].

Cunfigurazione files PN7220

Per PN7220, ci sò cinque cunfigurazioni diffirenti files.

  1. libemvco-nxp.conf
  2. libnfc-nci.conf
  3. libnfc-nxp.conf
  4. libnfc-nxp-eeprom.conf
  5. libnfc-nxp-rfExt.conf

Nota: Cunfigurazione files furniti da NXP sò examples liati à a scheda demo di u controller NFC. Quessi files deve esse aduttatu secondu l'integrazione mirata

Cunfigurazione files deve esse piazzatu in u locu di destinazione (vede Table 9).

Table 9. Locu di cunfigurazione files 

Nome di cunfigurazione file Locu in u dispusitivu
libemvco-nxp.conf venditore / ecc
libnfc-nci.conf sistema / ecc
libnfc-nxp.conf venditore / ecc
libnfc-nxp-eeprom.conf venditore / ecc
libnfc-nxprfExt.conf venditore / ecc

Per avè più infurmazione nantu à a cunfigurazione files, vede [9]. 

Applicazione DTA

Per permette a prova di certificazione di u Forum NFC, hè furnita una applicazione di prova di u dispositivu. Hè cumpostu di parechji cumpunenti in i diversi strati Android, chì deve esse custruitu è ​​​​inclusi in l'imagine Android.

Per spinghje l'applicazione DTA, i seguenti passi devenu esse eseguiti:

  1. Copia tutti i DTA files à un locu
    $cp -rf "out/target/product/hikey960/system/lib64/libosal.so" / DTA-PN7220
    $cp -rf "out/target/product/hikey960/system/lib64/libmwif.so"/DTA-PN7220
    $cp -rf "out/target/product/hikey960/system/lib64/libdta.so"/DTA-PN7220
    $cp -rf "out/target/product/hikey960/system/lib64/libdta_jni.so" /DTA-PN7220
    $cp -rf "out/target/product/hikey960/system/app/NxpDTA/NxpDTA.apk"/DTAPN7220
  2. Push the binari à u dispusitivu cum'è quì sottu
    adb shell mkdir /system/app/NxpDTA/
    adb push libosal.so /system/lib64/
    adb push libdta.so /system/lib64/
    adb push libdta_jni.so /system/lib64/
    adb push libmwif.so /system/lib64/
    adb push NxpDTA.apk /system/app/NxpDTA/

Dopu avè lampatu u mira, l'applicazione DTA deve esse presente in a lista di l'applicazioni installate. Vede [7] per una descrizzione dettagliata di cumu utilizà l'applicazione.

Abbreviazioni

Table 10. Abbreviations 

Acronimu Descrizzione
APDU unità di dati di u protocolu di l'applicazione
AOSP Prughjettu Android Open Source
DH host di u dispusitivu
HAL strata di astrazione hardware
FW firmware
I2C Circuitu Inter-Integratu
LPCD rilevazione di carte di bassa putenza
NCI Interfaccia di cuntrollu NFC
NFC cumunicazione vicinu à u campu
MW middleware
PLL loop in fase di blocco
P2P peer to peer
RF freccia radio
SDA dati seriali
SMCU microcontroller sicuru
SW software

Referenze

  1. Repository GitHub - PN7160 è PN7220 Common MW: (ligame)
  2. Web pagina - PN7160 - Controller NFC Plug and Play cù Firmware Integratu è Interfaccia NCI (ligame)
  3. Web pagina - PN7220 - Controller NFC conforme à EMV L1 cù interfaccia NCI chì supporta l'applicazioni EMV è NFC Forum (ligame)
  4. Repository GitHub - Driver di kernel PN7160 è PN7220: (ligame)
  5. Risorse - AOSP r2 tag (ligame)
  6. Risorse - Strumenti di cuntrollu di fonte (ligame)
  7. Guida di l'usu - UG10068 - PN7220 - Guida di partenza rapida (ligame)
  8. Repositoriu GitHub - Locu FW PN7160 è PN7220: (ligame)
  9. Nota d'applicazione - AN14431 - cunfigurazione PN7160 / PN7220 files (ligame)

Nota nantu à u codice fonte in u documentu

Exampu codice mostratu in stu documentu hà i seguenti copyright è licenza BSD-3-Clause:

Copyright 2024 NXP A ridistribuzione è l'usu in forme binari è fonti, cù o senza mudificazione, sò permessi, basta chì e seguenti cundizioni sò soddisfatte

  1. I redistribuzioni di u codice fonte devenu mantene l'avvisu di copyright sopra, sta lista di cundizioni è a seguente disclaimer.
  2. Redistribuzioni in forma binaria deve ripruduce l'avvisu di copyright sopra, sta lista di e cundizioni è a seguente disclaimer in a documentazione è / o altri materiali deve esse furnitu cù a distribuzione.
  3. Nè u nome di u detentore di i diritti d'autore nè i nomi di i so cuntributori ponu esse aduprati per appruvà o prumove i prudutti derivati ​​da stu software senza un permessu scrittu specificu.

QUESTU SOFTWARE hè furnitu da i detentori di diritti d'autore è i cuntributori "cum'è" è ogni garanzia espressa o IMPLICITA, INCLUSI, MA NON LIMITATA, E GARANTIE IMPLICITE DI COMMERCIABILITÀ E IDONEITA' PER UN PUBLIC PARTICULARI SONT DISCLAIMED. IN NESSUN CASU U COPYRIGHT O CONTRIBUTORS SERÀ RESPONSABILI PER QUALSIASI DANNI DIRETTI, INDIRETTI, INCIDENTALI, SPECIALI, ESEMPLARI O CONSEGUENTI (INCLUSU, MA NON LIMITATI À, L'ACQUISSIONE DI BEN SOSTITUTI O SERVIZI, PERDITA DI PROFITTI, SERVIZI; O INTERRUPZIONE D'AFFARI) QUANTÀ CAUSATA E IN QUALSIASI TEORIA DI RESPONSABILITÀ, SIA IN CONTRATTU, STRICT RESPONSABILITÀ, O TORT (INCLUSU NELLIGENZA O ALTRE) SURGIENDU IN QUALSUNA MANIERA DA L'USU DI STESS SOFTWARE, ANCHE SE AVVISU DI A POSSIBILITÀ DI SSE.

Storia di rivisione

Table 11. Storia di rivisione 

Document ID Data di liberazione Descrizzione
AN14430 v.1.0 03 settembre 2024 • Versione iniziale

L'infurmazione legale

Definizioni

Draft - Un statutu di draft nantu à un documentu indica chì u cuntenutu hè sempre sottu re internuview è sottumessu à appruvazioni formale, chì pò esse risultatu in mudificazioni o aghjunte. NXP Semiconductors ùn dà alcuna rapprisintazioni o garanzie in quantu à l'accuratezza o a completezza di l'infurmazioni incluse in una versione bozza di un documentu è ùn hà micca responsabilità per e cunsequenze di l'usu di tali informazioni.

Disclaimers

Garanzia limitata è responsabilità - L'infurmazione in stu documentu hè ritenuta precisa è affidabile. Tuttavia, NXP Semiconductors ùn dà alcuna rapprisintazioni o garanzie, espresse o implicite, in quantu à l'accuratezza o a completezza di tali informazioni è ùn anu micca responsabilità per e cunsequenze di l'usu di tali informazioni. NXP Semiconductors ùn assume micca rispunsabilità per u cuntenutu di stu documentu se furnitu da una fonte d'infurmazioni fora di NXP Semiconductors.

In nessun casu, NXP Semiconductors serà rispunsevule per danni indiretti, incidentali, punitivi, speciali o cunsequenziali (inclusi - senza limitazione - prufitti persi, risparmii persi, interruzioni di l'affari, costi ligati à a rimozione o a sostituzione di qualsiasi prudutti o carichi di rilavorazione) sia. o micca tali danni sò basati in tort (cumpresa negligenza), garanzia, violazione di cuntrattu o qualsiasi altra teoria legale.

Malgradu qualsiasi dannu chì u cliente puderia incorre per qualsiasi ragione, a responsabilità cumulativa è cumulativa di NXP Semiconductors versu u cliente per i prudutti descritti quì serà limitata in cunfurmità cù i Termini è e cundizioni di vendita cummerciale di NXP Semiconductors.

U dirittu di fà cambiamenti - NXP Semiconductors si riserva u dirittu di fà cambiamenti à l'infurmazioni publicate in stu documentu, cumprese senza limitazione specificazioni è descrizzioni di i prudutti, in ogni mumentu è senza avvisu. Stu documentu rimpiazza è rimpiazza tutte l'infurmazioni furnite prima di a publicazione di questu.

Idoneità à l'usu - I prudutti NXP Semiconductors ùn sò micca cuncepiti, autorizati o garantiti per esse adattati per l'usu in supportu di vita, sistemi o equipaggiamenti critichi per a vita o per a sicurezza, nè in applicazioni induve fallimentu o malfunzionamentu di un pruduttu NXP Semiconductors pò esse ragionevolmente aspettatu. per risultatu in ferite persunale, morte o danni severi à a pruprietà o à l'ambiente. NXP Semiconductors è i so fornitori ùn accettanu alcuna responsabilità per l'inclusione è / o l'usu di i prudutti NXP Semiconductors in tali equipaghji o applicazioni è per quessa, tali inclusioni è / o usu sò à u risicu di u cliente.

Applicazioni - L'applicazioni chì sò descritte quì per qualsiasi di sti prudutti sò solu per scopi illustrativi. NXP Semiconductors ùn face alcuna rappresentanza o garanzia chì tali applicazioni seranu adattate per l'usu specificatu senza più teste o mudificazione.

I clienti sò rispunsevuli di u disignu è u funziunamentu di e so applicazioni è prudutti chì utilizanu i prudutti NXP Semiconductors, è NXP Semiconductors ùn accetta micca responsabilità per qualsiasi assistenza cù applicazioni o cuncepimentu di i prudutti di i clienti. Hè a sola rispunsabilità di u cliente per determinà se u pruduttu NXP Semiconductors hè adattatu è adattatu per l'applicazioni di u cliente è i prudutti pianificati, è ancu per l'applicazione pianificata è l'usu di i clienti di terze parti di u cliente. I Clienti duveranu furnisce un disignu adattatu è salvaguardi operativi per minimizzà i risichi assuciati cù e so applicazioni è prudutti.

NXP Semiconductors ùn accetta alcuna responsabilità in relazione à qualsiasi difettu, dannu, costi o prublema chì hè basatu annantu à qualsiasi debule o predefinitu in l'applicazioni o i prudutti di u cliente, o l'applicazione o l'usu da u cliente (s) terzu di u cliente. U Cliente hè rispunsevuli di fà tutte e teste necessarie per l'applicazioni è i prudutti di u cliente chì utilizanu i prudutti NXP Semiconductors per evità un difettu di l'applicazioni è i prudutti o di l'applicazione o l'usu da i clienti di terzu di u cliente. NXP ùn accetta alcuna responsabilità in questu rispettu.

Termini è cundizioni di vendita cummerciale - I prudutti di NXP Semiconductors sò venduti sottumessi à i termini è e cundizioni generali di vendita cummerciale, cum'è publicatu in https://www.nxp.com/profile/terms, salvo accordu altrimenti in un accordu individuale scrittu validu. In casu chì un accordu individuale hè cunclusu solu i termini è e cundizioni di l'accordu rispettivu sò applicati. NXP Semiconductors si oppone espressamente à applicà i termini è e cundizioni generali di u cliente in quantu à l'acquistu di i prudutti NXP Semiconductors da u cliente.

U cuntrollu di l'esportazione - Stu ducumentu è ancu l'articulu (s) descritti quì ponu esse sottumessi à e regule di cuntrollu di l'esportazione. L'esportazione pò esse bisognu di una autorizazione previa da l'autorità competenti.

Idoneità per l'usu in i prudutti chì ùn sò micca qualificati per l'automobile - A menu chì stu documentu dichjara espressamente chì stu pruduttu specificu NXP Semiconductors hè qualificatu per l'automobile, u pruduttu ùn hè micca adattatu per l'usu di l'automobile. Ùn hè nè qualificatu nè testatu in cunfurmità cù e teste di l'automobile o i requisiti di l'applicazione. NXP Semiconductors ùn accetta alcuna responsabilità per l'inclusione è / o l'usu di prudutti qualificati micca di l'automobile in l'equipaggiu o l'applicazioni di l'automobile.

In l'eventu chì u cliente usa u pruduttu per u disignu è l'usu in l'applicazioni automobilistiche à e specificazioni è i standard di l'automobile, u cliente (a) utilizerà u pruduttu senza a garanzia di u pruduttu di NXP Semiconductors per tali applicazioni, usu è specificazioni automobilistiche, è ( b) ogni volta chì u cliente usa u pruduttu per l'applicazioni automobilistiche al di là di e specificazioni di NXP Semiconductors, tale usu serà solu à u risicu di u cliente, è (c) u cliente indennizza cumplettamente NXP Semiconductors per qualsiasi responsabilità, danni o rivendicazioni di produttu falluti risultanti da u disignu di u cliente è l'usu di u pruduttu per l'applicazioni automobilistiche oltre a garanzia standard di NXP Semiconductors è e specificazioni di produttu di NXP Semiconductors

Publicazioni HTML - Una versione HTML, se dispunibule, di stu documentu hè furnita cum'è cortesia. L'infurmazione definitiva hè contenuta in u documentu applicabile in formatu PDF. Se ci hè una discrepanza trà u documentu HTML è u documentu PDF, u documentu PDF hà priorità.

Traduzioni - Una versione non-inglese (traduttu) di un documentu, cumprese l'infurmazioni legali in quellu documentu, hè solu per riferimentu. A versione inglese prevalerà in casu di qualsiasi discrepanza trà e versioni tradutte è inglesi.

Sicurezza - U Cliente capisce chì tutti i prudutti NXP ponu esse sughjetti à vulnerabilità micca identificate o ponu sustene standard di sicurezza stabiliti o specificazioni cù limitazioni cunnisciute. U Cliente hè rispunsevule per u disignu è u funziunamentu di e so applicazioni è prudutti in tuttu u so ciclu di vita per riduce l'effettu di queste vulnerabilità nantu à l'applicazioni è i prudutti di u cliente. A rispunsabilità di u Cliente si estende ancu à altre tecnulugia aperte è / o proprietarie supportate da i prudutti NXP per l'usu in l'applicazioni di u cliente. NXP ùn accetta alcuna responsabilità per alcuna vulnerabilità. U Cliente deve cuntrollà regularmente l'aghjurnamenti di sicurezza da NXP è seguite in modu adattatu. U Cliente deve selezziunà i prudutti cù caratteristiche di sicurezza chì risponde megliu à e regule, i regulamenti è i normi di l'applicazione prevista è pigliate e decisioni finali di cuncepimentu riguardanti i so prudutti è hè solu rispunsevule per u rispettu di tutti i requisiti legali, regulatori è di sicurezza in quantu à i so prudutti, indipendentamente. di qualsiasi informazione o supportu chì pò esse furnitu da NXP.

NXP hà una Squadra di Risposta à Incidenti di Sicurezza di u Produttu (PSIRT) (accessibile à PSIRT@nxp.com) chì gestisce l'investigazione, i rapporti è a liberazione di soluzioni per e vulnerabilità di sicurezza di i prudutti NXP.

NXP BV - NXP BV ùn hè micca una sucietà operativa è ùn distribuisce o vende prudutti.

Licenze

Acquistu di IC NXP cù tecnulugia NFC - L'acquistu di un IC NXP Semiconductors chì hè in cunfurmità cù unu di i standard di Near Field Communication (NFC) ISO/IEC 18092 è ISO/IEC 21481 ùn trasmette micca una licenza implicita sottu à qualsiasi drittu di brevettu violatu da l'implementazione di qualsiasi di questi standard. L'acquistu di NXP Semiconductors IC ùn include micca una licenza per alcuna patente NXP (o altru dirittu IP) chì copre cumminazioni di quelli prudutti cù altri prudutti, sia hardware o software.

Marchi

Avvisu: Tutte e marche riferite, i nomi di i prudutti, i nomi di serviziu, è i marchi sò a pruprietà di i so rispettivi pruprietarii. NXP - a parola è u logo sò marchi di NXP BV I2C-bus - u logo hè una marca di NXP BV

Per piacè esse cuscenti chì avvisi impurtanti riguardanti stu documentu è u pruduttu (s) descritti quì, sò stati inclusi in a sezione "Informazioni legali".

© 2024 NXP BV Tutti i diritti riservati.
Per più infurmazione, visitate: https://www.nxp.com

 

Documenti / Risorse

NXP PN7160 Controller NFC Basati NCI [pdf] Istruzzioni
PN7160, PN7220, PN7160 Controller NFC Basati NCI, PN7160, Controller NFC Basati NCI, Controller NFC Basati, Controller NFC, Controllers

Referenze

Lascia un cumentu

U vostru indirizzu email ùn serà micca publicatu. I campi obbligatori sò marcati *