nfc hal分析

2018-08-02  本文已影响0人  413x

nfc hal分析

AndroidXRef 真是绝好的在线工具。

/system/nfc/src/include/adaptations/NfcAdaptation:

sp<INfc> NfcAdaptation::mHal

在整个/system/nfc目录下都没有对mHal的初始化,在该目录下所有mHal的相关操作都是调用其内部函数
故猜测mHal为Nfc的Hal层接口。

/hardware/interfaces/nfc/1.0/default/

在整个目录下没有INfc的c或者cpp文件,仅存在INfc.hal。猜测aidl文件功能类似,看google android hal
文档。发现会通过hidl-gen根据INfc.hal自动生成INfc.h,BpNfc.h,NfcAll.cpp,BnNfc.h,iHwNfc.h

查看INfc.hal:

open:打开NFCC设备并准备好接受write命令进一步初始化。

write:将写入内容放入queue中并立即初始化。

coreInitialized:在接受到来自NFCC的CORE_INIT_RSP后被调用。随即等待NfcEvent.POST_INIT_CPLT

prediscover:在每次开始RF discovering时都会被调用,在这里做固件相关的配置

powerCycle:通过power cycle重启controller。

/hardware/interfaces/nfc/1.0/default/Nfc.h

定义了struct Nfc,派生自INfc,定义了open,write等成员函数,静态函数eventCall,dataCallback,
内部成员mCallback,mDevice

/hardware/interfaces/nfc/1.0/default/service.cpp

该文件中的对INfc.hal中的文件中open, write等进行实现。HIDL_FETCH_INfc是外部模块获取Nfc结构体的方法
它内部实现了获取mDevice的方式:hw_get_module(这是hw内部管理hal的接口)。

/hardware/interfaces/nfc/1.0/default/service.cpp

该文件是hidl-gen自动生成的。mHal有成员函数getService

/hardware/libhardware

主要关注上述的hw_get_module如何实现

hw_get_module为接口,内部由hw_get_module_by_class实现。内部查找class_id所对应动态库路径,调用load加载
,在load内部用dlopen打开。用dlsym找到HMI符号所对应模块。

上一篇下一篇

猜你喜欢

热点阅读