zoukankan      html  css  js  c++  java
  • HIDL学习笔记_3 Hello

    HIDL系列四 绑定式的案例及理解(多篇):  https://chendongqi.me/2019/09/08/hidl-binderizd/
    Android Treble 架构下的HIDL:https://ruleizhou.github.io/2019/07/25/Android-Treble-%E6%9E%B6%E6%9E%84%E4%B8%8B%E7%9A%84HIDL/  --已看

    一、passthrough 模式HAL的注册和使用

    1. service 注册

    使用 HIDL 接口,hidl-gen 产生 cpp 代码后,将下面的注释去掉,使用这个直通式的注册函数

    IPerf* HIDL_FETCH_IPerf(const char* /* name */) {
        LOG_D("+");
        return new Perf();
    }

    然后到生成的 perf.cpp 中实现 Perf 类。

    2. client 使用

    (1) 获取服务

    static android::sp<IPerfV1_0> gPerfHalV1_0 = nullptr;
    static android::sp<IPerfV1_1> gPerfHalV1_1 = nullptr;
    static android::sp<IPerfV1_2> gPerfHalV1_2 = nullptr;
    
    static bool getPerfHal() {
        if (gPerfHalV1_0 == nullptr) {
            gPerfHalV1_0 = IPerfV1_0::getService();
            if (gPerfHalV1_0 != nullptr) {
                ALOGI("Loaded perf HAL 1.0 service");
                gPerfHalV1_1 = IPerfV1_1::castFrom(gPerfHalV1_0);
                if (gPerfHalV1_1 != nullptr) {
                    ALOGI("Loaded perf HAL 1.1 service");
                        gPerfHalV1_2 = IPerfV1_2::castFrom(gPerfHalV1_1);
                        if (gPerfHalV1_2 != nullptr)
                            ALOGI("Loaded perf HAL 1.2 service");
                }
            } else {
                ALOGI("Couldn't load power HAL service");
                gPerfHalExists = false;
            }
        }
    
        if (gPerfHalV1_2 == nullptr) {
            ALOGE("[getPerfHal] nullptr");
            return false;
        }
    
        return true;
    }

    (2) 使用服务

    gPerfHalV1_2->perfLockAcquire(hdl, duration, rscList, my_tid);
    gPerfHalV1_2->perfLockRelease(hdl, my_tid);

    3. 说明

    这种直通式的hal,hal的响应函数是运行在调用者的线程的,没有经过binder跨进程调用。使用 service list 命令也看不到HIDL直通式实现的hal,也说明了其不是一个hal服务。

    # service list | grep Perf
    //对比:
    # service list | grep suspend
    269     suspend_control: [android.system.suspend.ISuspendControlService]
  • 相关阅读:
    "Coding Interview Guide" -- 删除无序单链表中值重复出现的节点
    "Coding Interview Guide" -- 设计一个有getMin功能的栈
    "Coding Interview Guide" -- 仅用递归函数和栈操作逆序一个栈
    "Coding Interview Guide" -- 猫狗队列
    "Coding Interview Guide" -- 阶乘
    "Coding Interview Guide" -- 不用额外变量交换两个整数的值
    IDEA问题
    JAVA
    Log4j
    MAVEN教程
  • 原文地址:https://www.cnblogs.com/hellokitty2/p/15581224.html
Copyright © 2011-2022 走看看