本文主要是介绍基于Dragonboard 410c的指纹锁(六),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
中断了一段时间的指纹探究又要开始了,底层驱动暂时没找到任何实例,在网上查了一下,大部分都说厂商会提供驱动、库、以及HAL层实现,所以感觉有点无奈,因为我在网上买的指纹模块,除了模块和相关资料外,根本就没有提供所谓的驱动、库以及HAL层实现。所以智能去代码里去找相关实例,驱动暂时没有找到,但是HAL层实现到是发现了。
前面已经提过,Android系统从M开始才将指纹识别的部分添加进去,所以,查找指纹模块相关的代码至少要从Android M开始。好了,接下来一起看看。
HAL层代码路径:
hardware/libhardware/modules/fingerprint/fingerprint.c
打开代码后找到函数入口:
fingerprint_module_t HAL_MODULE_INFO_SYM = {
.common = {
.tag = HARDWARE_MODULE_TAG,
.module_api_version = FINGERPRINT_MODULE_API_VERSION_2_0,
.hal_api_version = HARDWARE_HAL_API_VERSION,
.id = FINGERPRINT_HARDWARE_MODULE_ID,
.name = "Demo Fingerprint HAL",
.author = "The Android Open Source Project",
.methods = &fingerprint_module_methods,
},
};
主要的fingerprint_module_methods。
static struct hw_module_methods_t fingerprint_module_methods = {
.open = fingerprint_open,
};
然后继续向下看看fingerprint_open
static int fingerprint_open(const hw_module_t* module, const char __unused *id,
hw_device_t** device)
{
if (device == NULL) {
ALOGE("NULL device on open");
return -EINVAL;
}
fingerprint_device_t *dev = malloc(sizeof(fingerprint_device_t));
memset(dev, 0, sizeof(fingerprint_device_t));
dev->common.tag = HARDWARE_DEVICE_TAG;
dev->common.version = FINGERPRINT_MODULE_API_VERSION_2_0;
dev->common.module = (struct hw_module_t*) module;
dev->common.close = fingerprint_close;
dev->pre_enroll = fingerprint_pre_enroll;
dev->enroll = fingerprint_enroll;
dev->get_authenticator_id = fingerprint_get_auth_id;
dev->cancel = fingerprint_cancel;
dev->remove = fingerprint_remove;
dev->set_active_group = fingerprint_set_active_group;
dev->authenticate = fingerprint_authenticate;
dev->set_notify = set_notify_callback;
dev->notify = NULL;
*device = (hw_device_t*) dev;
return 0;
}
到这只需要看后面的函数就可以了,如:fingerprint_pre_enroll
static uint64_t fingerprint_pre_enroll(struct fingerprint_device __unused *dev) {
return FINGERPRINT_ERROR;
}
其他函数就不用看了,内容都一样:return FINGERPRINT_ERROR
其实大概的意思应该是,接口和框架在这了,具体内容就要你自己去实现了。很是无奈,但是船到桥头自然直、车到山前必有路。源码里一搜,发现了一个实现。
路径:
device/generic/goldfish/fingerprint/fingerprint.c
具体内容实现很清楚,注释也解释的很明白,这里就不再赘述了,大家自己看吧。
指纹虐我千百遍,我待指纹如初恋,有事没事还是要接着看。
这篇关于基于Dragonboard 410c的指纹锁(六)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!