当前位置: 首页 > news >正文

rtt全民互助平台网站开发重庆秀山网站建设报价

rtt全民互助平台网站开发,重庆秀山网站建设报价,企业小程序建设公司,学做网站的软件简述 当你在Android系统中使用不同的硬件设备(例如摄像头、传感器、音频设备等)时,你需要与硬件抽象层(HAL)进行通信。 HAL是一个中间层,它充当了硬件和应用程序之间的桥梁。但是,由于硬件设备…

简述

当你在Android系统中使用不同的硬件设备(例如摄像头、传感器、音频设备等)时,你需要与硬件抽象层(HAL)进行通信。 HAL是一个中间层,它充当了硬件和应用程序之间的桥梁。但是,由于硬件设备的不同,HAL接口在不同的硬件之间也会有所不同。这就是Android HAL接口定义语言(HIDL)的用武之地。

HIDL允许开发人员为每个硬件设备定义自己的接口。这些接口定义了硬件设备的功能和特性,包括输入参数、返回值和异常。使用这些接口,应用程序可以直接与硬件设备通信,而无需了解特定的硬件细节。在Android中,HIDL被广泛用于与HAL进行通信。

Android Project Treble被提出,在android O中被全面的推送,设计 HIDL 这个机制的目的,主要目的是把框架(framework)与 HAL 进行隔离,使得框架部分可以直接被覆盖、更新,而不需要重新对 HAL 进行编译。

HIDL 实际上是用于进行进程间通信(Inter-process Communication,IPC)的。进程间的通信可以称为 Binder 化(Binderized)。对于必须连接到进程的库,也可以使用 passthough 模式(但在Java中不支持)。

官方介绍

编写代码

Aosp代码目录中创建目录 hardware/interfaces/stksensor/1.0(有关1.0版本相关的,可以查看官网的版本管理概念),

1、新建文件IStksensor.hal

package android,hardware.stksensor@1.0;improt IStksensorCallBack;interface IStksensor {setCallBack(IStksensorCallBack callback);write(string data) generates (bool res);init() generates (MyResult result);
};

2、创建UDT(用户自定义类型),types.hal

package android.hardware.stksensor@1.0;enum ResultCode : int32_t {UNKNOWN = -1,ERROR = 0,OK = 1,};struct MyResult{ResultCode resultCode;string msg;
};

3、新建文件回调文件IStksensorCallBack.hal

package android.hardware.stksensor@1.0;interface IStksensorCallBack {passData(uint32_t data) generates (MyResult result);
};

使用hidl-gen生成相关文件

在终端执行以下命令,设置临时变量

PACKAGE=android.hardware.stksensor@1.0
LOC=hardware/interfaces/stksensor/1.0/default

AOSP源码根目录执行hidl-gen生成default目录里的c++文件

hidl-gen -o $LOC -Lc++-impl -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport $PACKAGE

AOSP源码根目录执行hidl-gen生成default目录里的Android.bp文件

hidl-gen -o $LOC -Landroidbp-impl -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport $PACKAGE

AOSP源码根目录执行./hardware/interfaces/update-makefiles.sh会生成hardware/interfaces/stksensor/1.0/目录里的Android.bp文件

实现接口代码

修改hardware/interfaces/stksensor/1.0/default/Stksensor.cpp,这边实现单纯是打印日志

// FIXME: your file license if you have one#include "Stksensor.h"
#include <log/log.h>namespace android::hardware::stksensor::implementation {// Methods from ::android::hardware::stksensor::V1_0::IStksensor follow.
Return<void> Stksensor::setCallBack(const sp<::android::hardware::stksensor::V1_0::IStksensorCallBack>& callback) {// TODO implementALOGE("stksensor service have called the funtion of setCallBack");return Void();
}Return<::android::hardware::stksensor::V1_0::ResultCode> Stksensor::write(const hidl_string& data) {// TODO implementALOGE("stksensor service have called the funtion of write");return ::android::hardware::stksensor::V1_0::ResultCode {};
}Return<void> Stksensor::init(init_cb _hidl_cb) {// TODO implementALOGE("stksensor service have called the funtion of init");return Void();
}// Methods from ::android::hidl::base::V1_0::IBase follow.//IStksensor* HIDL_FETCH_IStksensor(const char* /* name */) {//return new Stksensor();
//}
//
}  // namespace android::hardware::stksensor::implementation

添加启动服务

1、在hardware/interfaces/stksensor/1.0/default/创建service.cpp

#define LOG_TAG "android.hardware.stksensor@1.0-service"
#include <hidl/HidlTransportSupport.h>
#include <log/log.h>using android::hardware::configureRpcThreadpool;
using android::hardware::joinRpcThreadpool;
using android::hardwara::stksensor::V1_0::IStksensor;
using android::hardware::stksensor::V1_0::implementation::Stksensor;
using namespace android;int main() {configureRpcThreadpool(1, true);sp<IStksensor> service = new Stksensor();status_t status = service->registerAsService("stksensor"); if (status != OK) {ALOGE("Error registering stksensor as service: %d", status);return status;}ALOGE("Ok to registering stksensor as service");joinRpcThreadpool();return 1;
}

2、在hardware/interfaces/stksensor/1.0/default/创建android.hardware.stksensor@1.0-service.rc启动脚本

service stksensor-hal-1-0 /vendor/bin/hw/android.hardware.stksensor@1.0-serviceclass haluser systemgroup system

3、在hardware/interfaces/stksensor/1.0/default/创建android.hardware.stksensor@1.0-service.xmlvintf

<manifest version="1.0" type="device"><hal format="hidl"><name>android.hardware.stksensor</name><transport>hwbinder</transport><version>1.0</version><interface><name>IStksensor</name><instance>stksensor</instance></interface></hal>
</manifest>

修改编译脚本

1、再修改hardware/interfaces/stksensor/1.0/default/Android.bp

// FIXME: your file license if you have onecc_library_shared {// FIXME: this should only be -impl for a passthrough hal.// In most cases, to convert this to a binderized implementation, you should:// - change '-impl' to '-service' here and make it a cc_binary instead of a//   cc_library_shared.// - add a *.rc file for this module.// - delete HIDL_FETCH_I* functions.// - call configureRpcThreadpool and registerAsService on the instance.// You may also want to append '-impl/-service' with a specific identifier like// '-vendor' or '-<hardware identifier>' etc to distinguish it.name: "android.hardware.stksensor@1.0-impl",relative_install_path: "hw",// FIXME: this should be 'vendor: true' for modules that will eventually be// on AOSP.proprietary: true,srcs: ["Stksensor.cpp","StksensorCallBack.cpp",],shared_libs: ["libhidlbase","libutils","android.hardware.stksensor@1.0",],
}cc_binary {name: "android.hardware.stksensor@1.0-service",relative_install_path: "hw",defaults: ["hidl_defaults"],proprietary: true,init_rc: ["android.hardware.stksensor@1.0-service.rc"],vintf_fragments: ["android.hardware.stksensor@1.0-service.xml"],srcs: ["SerialPort.cpp","service.cpp",],shared_libs: ["libbase","liblog","libdl","libutils","libhardware","libhidlbase","libhidltransport","android.hardware.stksensor@1.0",],
}

2、在device/$your_company/$SOC/device.mk添加

PRODUCT_PACKAGES += \android.hardware.stksensor@1.0-service \android.hardware.stksensor@1.0-impl

现在stksensor目录结构

stksensor/
└── 1.0├── Android.bp├── default│   ├── Android.bp│   ├── android.hardware.stksensor@1.0-service.rc│   ├── android.hardware.stksensor@1.0-service.xml│   ├── service.cpp│   ├── StksensorCallBack.cpp│   ├── StksensorCallBack.h│   ├── Stksensor.cpp│   └── Stksensor.h├── IStksensorCallBack.hal├── IStksensor.hal└── types.hal

注意:会报一些avc权限 ,需要自己添加

http://www.yayakq.cn/news/538503/

相关文章:

  • 怎么做网站移动端柳江企业网站建设价格
  • 网站开发兼职做网站找外包公司要要搞清楚什么
  • wap网站生成系统上海外贸公司招聘职位
  • 一般上什么网站seo网站是什么意思
  • 果洛wap网站建设公司长沙的科技公司
  • 找单位做网站需要注意什么钦州网站建设公司
  • 辽宁省建设厅网站官网网站模板html5
  • 桂林网站开发公司可视化编辑器wordpress
  • 世界网站排名个人网站该怎么打广告
  • 网站开发工程是待遇如何做网站引流
  • 苏州建设招投标网站ui设计师个人简历
  • 网站平台报价模板下载安装wordpress网站后台要怎么登陆
  • 网站域名价值查询工具在本地怎么做网站
  • 扬中网站优化wordpress persona
  • 网页设计随机点名代码佛山优化推广
  • 莆田企业自助建站桂林网站建设哪家好
  • 云主机上传网站做一个平台app需要多少钱
  • 海城网站建设网站建设课程设计摘要
  • 青岛网站建设运营如何制作网站链接
  • 购物网站cookie做网站设计都需要什么
  • h5网站开发实例教程wordpress侧边栏浮动
  • 网站建设好学么seo精准培训课程
  • 网络推广渠道和方法seo短期培训班
  • 滨州做网站多少钱成都住建局官网平台
  • 招聘网站html模板常州建设局网站
  • 搜索网站定制公司老客外链
  • 阿里巴巴国际站官网用手机域名做网站有多少
  • 如何建立网站河北省邢台市
  • 大良建设网站网站开发的目的意义
  • 龙岗外贸网站建设公司价格广州做网站公司哪家比较好