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符号所对应模块。
网友评论