2017-09-28 16 views
2

J'étudie le code NFC de construction Google Pixel PSBA (android-8.0.0_r3). Je peux comprendre le flux d'appels du noyau jusqu'au module matériel Android system\nfc\halimpl\pn54x\nfc_nci.c comme suit:PSBA flux d'appels de dispositif NFC de HAL Application Framework couche

struct nfc_nci_module_t HAL_MODULE_INFO_SYM = { 
    .common = 
     { 
      .tag = HARDWARE_MODULE_TAG, 
      .module_api_version = 0x0100, /* [15:8] major, [7:0] minor (1.0) */ 
      .hal_api_version = 0x00,  /* 0 is only valid value */ 
      .id = NFC_NCI_HARDWARE_MODULE_ID, 
      .name = "NXP PN54X NFC NCI HW HAL", 
      .author = "NXP Semiconductors", 
      .methods = &nfc_module_methods, 
     }, 
}; 

Ce module matériel est chargé via hw_get_module(NFC_NCI_HARDWARE_MODULE_ID) trouvé dans hardware/interface/nfc/1.0/default/nfc.cpp : HIDL_FETCH_INfc(...). Maintenant, je suis coincé ici incapable de trouver où dans le PSBA invoqué HIDL_FETCH_INfc(...) et comment établir le lien avec la couche suivante?

Répondre

0

Pour les services Android qui interagissent avec le matériel, il se connecte de la manière suivante. Dans le nfc.cpp il devrait y avoir une des fonctions qui sont similaires à:

JNINativeMethod method_table[]= { 
    {"external_name","(I)Z)",(void*)internal_name}, 
}; 

int register_android_server_FlexcanService(JNIEnv* env) 
{ 
    return jniRegisterNativeMethods(env,"com/android/server/MyService",method_table,NELEM(method_table)); 
} 

Ce jniRegisterNativeMethods est appelé à onload.cpp et nfc.cpp est ajouté à la Android.mk dans le même dossier

ensuite, dans le paquet java com.android.server.MyService (core/java/com/android/serveur), il y aura un appel à la fonction native:

public static native boolean external_name(int someVar); 

de là, il y aura un fichier liant .aidl exposer les méthodes de service au SDK et éventuellement dans applications Android de premier niveau.

+0

je ne vois pas de 'jniRegisterNativeMethods (...)' 'dans dir matériel/Interface/nfc' – Consy

+0

Voulez-vous dire que vous ne pouvez pas trouver' jniRegisterNativeMethods' en tapant dans le terminal: 'grep -r dans jniRegisterNativeMethods' le répertoire hardware/interface/nfc? Oui –

+0

essayé, ne peut pas trouver dans le matériel/Interface/nfc dir – Consy

0

Dans 7.x Android, NFC JNI localise dans les paquets/apps/Nfc/NCI/JNI /. Je n'ai pas vérifié la source Android 8.x, mais je pense qu'il est toujours là.

+0

Oui, vous avez raison sur le chemin , mais toujours pas de réponse sur la façon dont 'HIDL_FETCH_INfc (...)' lien avec l'un des fichiers là-bas? – Consy

+0

Vous pouvez trouver 'hw_get_module (NFC_HARDWARE_MODULE_ID, & hw_module);' dans les paquets/apps/Nfc/nci/jni /, pourquoi avez-vous besoin de 'HIDL_FETCH_INfc'? – ZhouZhuo