一.hidl简单介绍
HIDL的全称是HAL interface definition language(硬件抽象层接口定义语言),是Android Framework 与Android HAL实现之间的接口。
二.hidl的实现
本项目是通过不同的APK来实现camera tunning的参数分离。
1. hardware部分
1.1编写.hal文件
在代码目录下新建 hardware/interface/arcore/1.0/
新建Iarcore.hal 文件(主接口)如,
package android.hardware.arcore@1.0;
interface Iarcore {
SetAppFlag(uint32_t appkey); //用与framework下发hal的实现.
GetAppFlag() generates (uint32_t ret);//用于hal获取framerwork的实现。
};
本项目只是需要设置一个变量下去实现,如果要定于新的数据类型可以新建type.hal文件.如,
package android.hardware.arcore@1.0;
struct AppFlag{
int32_t AppKey;
string ApkName;
};
1.2 使用hidl-gen工具生成C++文件与Android.bp文件。
1.2.1 hidl-gen工具的获取。
代码全遍完成后,查看out/host/linux-x86/bin/ 下,如果没有hidl-gen可执行文件,
可以source ,lunch 后,使用make hidl-gen -j4 命令编译后即可生成。
1.2.2 使用hidl-gen工具生成C++文件。
新建hardware/interface/arcore/1.0/default/
使用命令:
out/host/linux-x86/bin/hidl-gen -o hardware/interface/arcore/1.0/default/ -Lc+±impl - randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transportandroid.hardware.arcore@1.0
1.2.3 使用hidl-gen工具生成Android.bp文件
使用命令:
out/host/linux-x86/bin/hidl-gen -o hardware/interface/arcore/1.0/default/ -Landroidbp-impl -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transportandroid.hardware.arcore@1.0
使用update-makefiles.sh生成1.0目录下的Android.bp
./hardware/interfaces/update-makefiles.sh
1.3.cpp文件的实现
#include "arcore.h"
#include <log/log.h>
namespace android {
namespace hardware {
namespace arcore {
namespace V1_0 {
namespace implementation {
static uint32_t AppFlag;
// Methods from ::android::hardware::arcore::V1_0::Iarcore follow.
Return<void> arcore::SetAppFlag(uint32_t appkey) {
// TODO implement
ALOGE("setappflag:%d", appkey);
AppFlag = appkey;
return Void();
}
Return<uint32_t> arcore::GetAppFlag() {
// TODO implement
uint32_t appkey;
appkey = AppFlag;
ALOGE("getappflag:%d", appkey);