Android HIDL接口添加

一.HIDL介绍

HIDL的全称是HAL interface definition language(硬件抽象层接口定义语言),是Android
Framework 与Android HAL之间的接口。HIDL 旨在用于进程间通信 (IPC),进程之间的通信
采用 Binder 机制。

二.HIDL 与AIDL 的对比

三.HIDL接口添加 

HIDL接口路径:

hardware\interfaces\imw\1.0\

路径下有两个文件:

Android.bp

IImwManager.hal

Android.bp:

hidl_interface {
    name: "vendor.isolution.hardware.imw@1.0",  //FQName 的全名
    root: "vendor.isolution.hardware",  //定义好的 package root name
    //system_ext_specific: true,
    srcs: [
        "IImwManager.hal",
       
    ],
    interfaces: [
        "android.hidl.base@1.0", //编译过程中依赖的接口名称
    ],
    gen_java: true,  //是否编译为 Java 使用的接口
}

IImwManager.hal文件:

package vendor.isolution.hardware.imw@1.0; // 当前package包名
 
import IImwManagerClientCallback;  // 导入其它package包
import IUpdateEngineClientCallback;

interface IImwManager   // 定义一个interface
{
	onCreate();
	onInitStart();
	onInitCompleted();
	onStart();
	onSystemAppStart();
	onBootanimationExit();
	onBootCompleted();
	onReboot();
	onRecovery();
	onSleep();
	onShutdown();

};

HIDL生成的文件路径:

/out/soong/.intermediates/vendor/isolution/hardware/interfaces/imw/1.0/vendor.isolution.hardware.imw@1.0

编译后模块对应的文件:

vendor.isolution.hardware.imw@1.0.so

当 IHelloworld.hal 创建完成就可以创建对应的 HIDL 实现代码(Hidl Interface 和 service):

service.端java代码:

import vendor.isolution.hardware.imw.V1_0.IImwManager; // 导入package包

private IImwManager halManager = null;

halManager.onCreate();
halManager.onInitStart();
halManager.onInitCompleted();
halManager.onStart();
halManager.onSystemAppStart();
halManager.onBootanimationExit();
halManager.onBootCompleted();
halManager.onReboot();
halManager.onRecovery();
halManager.onSleep();
halManager.onShutdown();

实现Hidl Interface:

hardware\interfaces\imw\1.0\default\ImwManager.h

#ifndef VENDOR_ISOLUTION_HARDWARE_IMW_V1_0_IMWMANAGER_H_
#define VENDOR_ISOLUTION_HARDWARE_IMW_V1_0_IMWMANAGER_H_

#include <log/log.h>
#include <android/log.h>
#include <hardware/hardware.h>
#include <hardware/fingerprint.h>
#include <hidl/MQDescriptor.h>
#include <hidl/Status.h>

#include <vendor/isolution/hardware/imw/1.0/IImwManager.h>

using ::vendor::isolution::hardware::imw::V1_0::IImwManager;
using ::android::hardware::Return;
using ::android::hardware::Void;
using ::android::hardware::hidl_vec;
using ::android::hardware::hidl_string;
using ::android::sp;

namespace vendor {
namespace isolution {
namespace hardware {
namespace imw {
namespace V1_0 {
namespace implementation {

struct ImwManager : public IImwManager {

public:
    ImwManager();
    ~ImwManager();
	
    static IImwManager* getInstance();
	Return<void> setNotify(const sp<IImwManagerClientCallback>& clientCallback) override;
	Return<void> setNotifyUpdateEngine(const sp<IUpdateEngineClientCallback>& clientCallback) override;

	Return<void> onCreate() override;
    Return<void> onInitStart() override;
    Return<void> onInitCompleted() override;
    Return<void> onStart() override;
	Return<void> onSystemAppStart() override;
	Return<void> onBootanimationExit() override;
    Return<void> onBootCompleted() override;
	Return<void> onReboot() override;
	Return<void> onRecovery() override;
	Return<void> onSleep() override;
    Return<void> onShutdown() override;
};

}  // namespace implementation
}  // namespace V1_0
}  // namespace imw
}  // namespace hardware
}  // namespace isolution
}  // namespace vendor

hardware\interfaces\imw\1.0\default\ImwManager.cpp

#include <utils/Log.h>

#include <log/log.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <dirent.h>
#include <unistd.h>
#include <string.h>
#include <cutils/atomic.h>
#include <cutils/properties.h> // for property_get
#include <utils/misc.h>
#include <stdio.h>
#include <utils/threads.h>

#include <fcntl.h>
#include <dlfcn.h>
#include <sys/shm.h>
#include <signal.h>

#include "ImwManager.h"

namespace vendor {
namespace isolution {
namespace hardware {
namespace imw {
namespace V1_0 {
namespace implementation {

ImwManager::ImwManager() : mClientCallback(nullptr) {
    sInstance = this; // keep track of the most recent instance
	onCreate();
}


ImwManager::~ImwManager()
{
    ALOGW("~ImwManager\n");
}

IImwManager* ImwManager::getInstance() {
    if (!sInstance) {
      sInstance = new ImwManager();
    }
    return sInstance;
}

Return<void> ImwManager::onCreate()
{
    ALOGW("onCreate\n");
	
	return Void();
}

Return<void> ImwManager::onInitStart()
{
    ALOGW("onInitStart\n");
	return Void();
}

Return<void> ImwManager::onInitCompleted()
{
    ALOGW("onInitCompleted\n");
	return Void();
}

Return<void> ImwManager::onStart()
{
    ALOGW("onStart\n");
	return Void();
}

Return<void> ImwManager::onSystemAppStart()
{
    ALOGW("onSystemAppStart\n");
	return Void();
}

Return<void> ImwManager::onBootanimationExit()
{
    ALOGW("onBootanimationExit\n");
	return Void();
}

Return<void> ImwManager::onBootCompleted()
{
    ALOGW("onBootCompleted\n");
	return Void();
}

Return<void> ImwManager::onReboot()
{
    ALOGW("onReboot\n");
	return Void();
}

Return<void> ImwManager::onRecovery()
{
    ALOGW("onRecovery\n");
	return Void();
}

Return<void> ImwManager::onSleep()
{
    ALOGW("onSleep\n");
	return Void();
}

Return<void> ImwManager::onShutdown()
{
    ALOGW("onShutdown\n");
	return Void();
}

ImwManager *ImwManager::sInstance = nullptr;

}  // namespace implementation
}  // namespace V1_0
}  // namespace imw
}  // namespace hardware
}  // namespace isolution
}  // namespace vendor

添加rc文件:

rc 是 “runcom” 的缩写,这个术语最初来源于 Unix 系统,在早期的系统中使用了一个叫做 “runcom” 的目录,用于存放启动时需要运行的一些脚本和配置文件。

在实现了 serivce 和 impl 代码后需要添加 rc 文件,文件名为 vendor.isolution.hardware.imw@1.0-service.rc

service imw-hal-1-0 /vendor/bin/hw/vendor.isolution.hardware.imw@1.0-service
    class hal
    user root
    group root media system graphics input bluetooth shell drmrpc media_rw audio

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/664722.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

客户文章|难能可贵,非模式生物的功能研究与创新

菜豆&#xff08;Phaseolus vulgaris&#xff09;&#xff0c;又名四季豆、芸豆、油豆角&#xff0c;是全球第一大豆类蔬菜&#xff0c;我国是世界上最主要的菜豆生产国和销售国。在田间生产过程中&#xff0c;菜豆常面临着各种生物和非生物逆境的胁迫&#xff0c;对其产量品质…

FOC - BLDC六步换相驱动原理

文章目录 1 . 前言2 . 电机旋转原理3 . BLDC特点4 . BLDC反电动势投影位置5 . BLDC换相时刻6 . BLDC换相注意事项7 . 小结 【全文大纲】 : https://blog.csdn.net/Engineer_LU/article/details/135149485 1 . 前言 无刷直流电机在这里区分为两种&#xff0c;一是永磁无刷直流电…

【Linux-LCD 驱动】

Linux-LCD 驱动 ■ Framebuffer 简称 fb■ LCD 驱动程序编写■ 1、LCD 屏幕 IO 配置■ 2、LCD 屏幕参数节点信息修改■ 3、LCD 屏幕背光节点信息■ 4、使能 Linux logo 显示 ■ 设置 LCD 作为终端控制台■ 1、设置 uboot 中的 bootargs■ 2、修改/etc/inittab 文件 ■ LCD 背光…

python前端streamlit模型部署

简单介绍使用前端streamlit框架快速部署本地模型&#xff1a; 1、模型训练&#xff1a; import pandas as pd # 流程整合 from sklearn.pipeline import make_pipeline, Pipeline # 数据处理 from sklearn.impute import SimpleImputer from sklearn.preprocessing import Min…

探索 Android Studio 中的 Gemini:加速 Android 开发的新助力

探索 Android Studio 中的 Gemini&#xff1a;加速 Android 开发的新助力 在 Gemini 时代的下一篇章中&#xff0c;Gemini融入了更多产品中&#xff0c;Android Studio 正在使用 Gemini 1.0 Pro 模型&#xff0c;使 Android 开发变得更快、更简单。 Studio Bot 现已更名为 And…

深度学习知识与心得

目录 深度学习简介 传统机器学习 深度学习发展 感知机 前馈神经网络 前馈神经网络&#xff08;BP网络&#xff09; 深度学习框架讲解 深度学习框架 TensorFlow 一个简单的线性函数拟合过程 卷积神经网络CNN&#xff08;计算机视觉&#xff09; 自然语言处理NLP Wo…

C# WinForm —— 23 Timers.Timer 组件介绍与使用

1. 简介 System.Timers.Timer 计时器 轻量 每隔一段时间触发Elapsed事件&#xff0c;执行操作(不是由UI线程执行的)&#xff0c;即使事件中执行了比较耗时的操作&#xff0c;也不会造成 UI 失去响应 如果要获取服务器的计时功能的话&#xff0c;可以使用System.Timers.Timer …

unity2020打包webGL时卡进程问题

我使用的2020.3.0f1c1&#xff0c;打包发布WEB版的时候会一直卡到asm2wasm.exe这个进程里&#xff0c;而且CPU占用率90%以上。 即使是打包一个新建项目的空场景也是同样的问题&#xff0c;我尝试过一直卡在这里会如何&#xff0c;结果还真打包成功了。只是打包一个空场景需要20…

C++(入门基础版本)

1&#xff0c;什么是C C 是一种通用的、面向对象的编程语言&#xff0c;是 C 语言的一个超集&#xff0c;也就是说&#xff0c;任何有效的 C 程序都是有效的 C 程序。C 通过添加诸如类和对象、继承和多态等概念&#xff0c;扩展了 C 语言的功能&#xff0c;使其更适用于大型软…

CSS学习笔记目录

CSS学习笔记之基础教程&#xff08;一&#xff09; CSS学习笔记之基础教程&#xff08;二&#xff09; CSS学习笔记之中级教程&#xff08;一&#xff09; CSS学习笔记之中级教程&#xff08;二&#xff09; CSS学习笔记之中级教程&#xff08;三&#xff09; CSS学习笔记之高级…

国产身份域管架构图集合(信创政策AD域替换必看)

几类典型架构 双机架构 单点单机房 集群架构 多点单机房 两地三中心架构 多点多机房 多地分布式架构 多点多机房 全栈信创方案架构&#xff0c;欢迎探讨交流~

[数据集][目标检测]喝水检测数据集VOC+YOLO格式995张3类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;995 标注数量(xml文件个数)&#xff1a;995 标注数量(txt文件个数)&#xff1a;995 标注类别…

校园导航系统C++

制作一个简单的大学城导航系统&#xff0c;根据用户指定的起点和终点&#xff0c;求出最短路径长度以及具体路径。 项目要求&#xff1a; 1&#xff09;程序与数据相分离&#xff0c;地图中的所有数据都是从文件读入&#xff0c;而不是写在代码中 2&#xff09;最短路径算法…

抖音电商经验分享,揭秘做好抖店的七个关键细节,不容忽视

大家好&#xff0c;我是电商花花。 随着抖音电商和大量商家的不断入驻&#xff0c;大家对于电商的玩法也逐渐变多&#xff0c;拿到结果的商家也是越来越多&#xff0c;更多的做店玩法和步骤被更多人熟知。 现在想要做好抖店&#xff0c;其实也没有想象中那么复杂和困难。 新…

网络安全基础技术扫盲篇名词解释之“证书“

用通俗易懂的话说&#xff1a; 证书就好比是一张身份证&#xff08;类似&#xff0c;但不完全相同&#xff09;&#xff0c;用来证明一个网站的身份是否可信。就像你要确认一个陌生人的身份需要看他的身份证一样&#xff0c;电脑在连接一个网站时&#xff0c;也会查看网站的证…

停车场车位引导系统方案升级实施步骤流程是什么,有什么注意事项

停车场车位引导系统是一种现代化的停车管理系统&#xff0c;它通过实时监测车位占用情况&#xff0c;并向驾驶员提供准确的空闲车位导航信息&#xff0c;从而提高停车场的使用效率和用户体验。随着城市交通的快速发展和车辆数量的不断增加&#xff0c;停车场车位引导系统已成为…

树形结构-CRUD接口

先看一下效果&#xff1a;整体的效果 新增效果 --默认值是 default 修改效果 - 大致效果如上 --------------------------------------------------------------------------------------------------------------------------------- 下面讲解代码如何实现的 根据你使用…

Pytorch中的torch.save()文件保存格式探索以及mmdetection加载预训练模型参数对不齐和收到意外参数报错解决方案

使用mmdetection时遇到的问题比较多&#xff0c;首先要对自己要使用的预训练模型有一定的了解&#xff0c;并且懂得使用各种分类模型时不同的模型不同任务执行阶段需要参数上的对其。&#xff08;比如mask-rcnn和它的三个头之间的参数&#xff09;。 首先&#xff0c;谈谈torc…

一个案例告诉你,MySQL如何查询今天、昨天、近7天、近30天、本月、上个月、本季度、上季度、本年、上一年数据

参考博客 mysql查询当天/昨天/近7天/近30天/本月/上个月/本季度/上季度/本年/上一年 数据 正文内容 创建测试案例&#xff08;也可直接使用附录MySQL脚本生成数据&#xff09; 1、新建测试表 CREATE TABLE example (id INT AUTO_INCREMENT PRIMARY KEY,date_column DATE,d…

深入Kafka消息分区机制:从原理到实践

深入Kafka消息分区机制&#xff1a;从原理到实践 在现代分布式系统中&#xff0c;如何高效地处理海量数据是一个至关重要的问题。Apache Kafka作为一种高吞吐量的分布式消息系统&#xff0c;广泛应用于日志收集、实时分析等场景。为了保证数据的高效处理和系统的高可扩展性&am…