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.bpIImwManager.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 instanceonCreate();
}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-serviceclass haluser rootgroup root media system graphics input bluetooth shell drmrpc media_rw audio

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/19521.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/19521.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/19521.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JVM之【運行時數據區1】

JVM簡圖 運行時數據區簡圖 一、程序計數器&#xff08;Program Counter Register&#xff09; 1.程序計數器是什么&#xff1f; 程序計數器是JVM內存模型中的一部分&#xff0c;它可以看作是一個指針&#xff0c;指向當前線程所執行的字節碼指令的地址。每個線程在執行過程中…

Python魔法之旅-魔法方法(04)

目錄 一、概述 1、定義 2、作用 二、主要應用場景 1、構造和析構 2、操作符重載 3、字符串和表示 4、容器管理 5、可調用對象 6、上下文管理 7、屬性訪問和描述符 8、迭代器和生成器 9、數值類型 10、復制和序列化 11、自定義元類行為 12、自定義類行為 13、類…

Tensorflow入門實戰 P02-彩色圖片分類

目錄 1、序言 2、主要代碼 3、運行結果展示 &#xff08;1&#xff09;展示cifar10里面的20張圖片 &#xff08;2&#xff09;預測的圖片 &#xff08;3&#xff09;模型評估 本文為&#x1f517;365天深度學習訓練營 中的學習記錄博客&#x1f356; 原作者&#xff1a;K…

postgressql——ReadBuffer_common函數(7)

PostgreSQL中ReadBuffer_common函數 數據結構 BufferDesc 共享緩沖區的共享描述符(狀態)數據 typedef struct BufferDesc {//buffer tagBufferTag tag; /* ID of page contained in buffer *///buffer索引編號(0開始)int buf_id; /* buffers i…

大語言模型(一)OLMo

一、簡介 OLMo 是由AI2 發布的大語言模型以及構建框架,與大多數之前的嘗試只發布模型權重和推理代碼不同,OLMo 開源了整個框架,包括訓練數據、訓練代碼以及模型評估代碼。 OLMo框架包括構建和研究語言模型所需的工具和資源。對于訓練和建模,它包括完整的模型權重、訓練代…

SZJG-離線環境成功安裝Python和pip

在離線環境下安裝Python和pip&#xff0c;可以按照以下步驟進行。假設你已經下載了Python的安裝包 (Python-3.10.13.tgz)。 步驟 1&#xff1a;準備安裝包 將 Python-3.10.13.tgz 拷貝到目標機器上的一個目錄中&#xff0c;例如 /home/user/。 步驟 2&#xff1a;解壓安裝包…

4萬字長文讓人看懂ElementUI面試題及參考答案

ElementUI是什么?請簡述其主要特點。 ElementUI是一個基于Vue.js的桌面端組件庫,由餓了么團隊開發并維護。它旨在為開發人員提供一套用于構建網頁應用程序的高質量UI組件。ElementUI遵循Vue.js的設計思想,使得開發者可以快速地構建出風格統一、功能豐富的界面。 主要特點:…

水經微圖PC版4.3.10發布

讓GIS更簡單高效&#xff0c;讓地圖更豐富及時&#xff01; 水經微圖&#xff08;以下簡稱“微圖”&#xff09;新版已上線&#xff0c;在該版本中主要新增了天地圖歷史影像查看功能&#xff0c;以及其它功能的優化。 當前版本 當前版本號為&#xff1a;4.3.10 如果你發現該…

Pytorch反向傳播算法(Back Propagation)

一&#xff1a;revise 我們在最開始提出一個線性模型。 x為我們的輸入&#xff0c;w為權重。相乘的結果是我們對y的預測值。 那我們在訓練時就是對這個權重w進行更新&#xff0c;就需要用到上一章提到的梯度下降算法&#xff0c;不斷更新w。但是此時注意不是用y的預測值對w進…

linux centos nfs掛載兩臺服務器掛載統一磁盤目錄權限問題

查看用戶id id 用戶名另一臺為 修改uid和gid為相同id&#xff0c;添加附加組 usermod -u500 -Gwheel epms groupmod -g500 epms

網絡協議。

一、流程案例 接下來揭秘我要說的大事情&#xff0c;“雙十一”。這和我們要講的網絡協議有什么關系呢&#xff1f; 在經濟學領域&#xff0c;有個倫納德里德&#xff08;Leonard E. Read&#xff09;創作的《鉛筆的故事》。這個故事通過一個鉛筆的誕生過程&#xff0c;來講述…

[代碼復現]Self-Attentive Sequential Recommendation(ing)

參考代碼&#xff1a;SASRec.pytorch 可參考資料&#xff1a;SASRec代碼解析 前言&#xff1a;文中有疑問的地方用?表示了。可以通過ctrlF搜索’?。 環境 conda create -n SASRec python3.9 pip install torch torchvision因為我是mac運行的&#xff0c;所以device是mps 下面…

算法(七)插入排序

文章目錄 插入排序簡介代碼實現 插入排序簡介 插入排序&#xff08;insertion sort)是從第一個元素開始&#xff0c;該元素就認為已經被排序過了。然后取出下一個元素&#xff0c;從該元素的前一個索引下標開始往前掃描&#xff0c;比該值大的元素往后移動。直到遇到比它小的元…

Caliburn.Micro框架學習筆記——Action的參數傳遞機制

據此篇文章&#xff0c;我們繼續來談談Caliburn.Mirco的Action參數傳遞機制。因此程序結構都是默認MVVM的形式。 基本機制 它的機制是—— Caliburn.Micro 的智能對象參數綁定機制通過約定和反射使得視圖和視圖模型之間的交互變得更加直觀和簡潔。通過 cal:Message.Attach 語…

【C語言】探索文件讀寫函數的全貌

&#x1f308;個人主頁&#xff1a;是店小二呀 &#x1f308;C語言筆記專欄&#xff1a;C語言筆記 &#x1f308;C筆記專欄&#xff1a; C筆記 &#x1f308;喜歡的詩句:無人扶我青云志 我自踏雪至山巔 &#x1f525;引言 本章將介紹文件讀取函數的相關知識和展示使用場景&am…

vue中如何進行Markdown文檔展示與解析

vue中如何進行Markdown文檔展示與解析 一、安裝插件二、如何使用 需求&#xff1a;接口返回了一個政策詳情頁面&#xff0c;里面有圖片&#xff0c;用v-html展示的是url&#xff0c;所以改用vue-markdown 一、安裝插件 npm install vue-markdown --save二、如何使用 <vue-…

RabbitMQ 如何保證消息不丟失

開啟消息確認機制&#xff1a; 在發布消息時&#xff0c;可以設置deliveryMode為2&#xff08;持久化&#xff09;&#xff0c;以確保消息不會因為RabbitMQ的崩潰而丟失。 使隊列持久化&#xff1a; 通過設置durable為true&#xff0c;可以確保隊列在RabbitMQ重啟后依然存在。…

Python 實戰:打造智能進銷存系統

想象一下&#xff0c;在繁忙的商店里&#xff0c;每天都有數以百計的商品進進出出&#xff0c;庫存在不斷變化&#xff0c;銷售數據涌入&#xff0c;而你卻能輕松應對一切。是的&#xff0c;Python 可以幫你實現這一切。本文將教你如何使用 Python 構建一個智能的進銷存系統&am…

學習記錄-5.30

學習記錄-5.30 同步在我的博客可以來看看 http://www.zhihuigou.top/ ### Golang為什么比別的語言跟擅長并發: 首先是因為Goroutine&#xff0c;算是go的一個最大的特色 是輕量級的線程,創建一個goroutine的開銷非常小,大約幾KB,且調度開銷很低 并且goroutine的調度,并不…

React組件通信——兄弟組件

兄弟組件通信 方法一&#xff1a;狀態提升 子組件先將數據傳遞到父組件&#xff0c;父組件再把數據傳到另一個子組件中。 import { useState } from "react"; // 定義A組件&#xff0c;向B組件發送數據 function A({ onGetMsg }) {const name "this is A na…