基于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

具体内容实现很清楚,注释也解释的很明白,这里就不再赘述了,大家自己看吧。

指纹虐我千百遍,我待指纹如初恋,有事没事还是要接着看。









  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值