HMI -> CustomSensorManager -> AIDL -> Пользовательская системная служба -> Binder IPC -> Пользовательская служба JNI -> AIDL -> Пользовательский сервис HAL (поставщик/фреймворк).
Я успешно создал собственный HAL, который считывает данные датчиков. Вот Android.bp для службы HAL:
Код: Выделить всё
cc_binary {
name: "android.hardware.sensors-service",
vendor: true,
relative_install_path: "hw",
init_rc: ["android.hardware.sensors-service.rc"],
vintf_fragments: ["android.hardware.sensors-service.xml"],
srcs: [
"Sensors.cpp",
"service.cpp",
"ConvertUtils.cpp",
],
shared_libs: [
"libbase",
"liblog",
"libhardware",
"libbinder_ndk",
"libbinder",
"libutils",
"android.hardware.vsensors-V1-ndk",
],
}
[img]https://i .sstatic.net/BHl0qGjz.png[/img]
Я также написал интерфейс AIDL для HAL следующим образом:
Код: Выделить всё
aidl_interface {
name: "android.hardware.vsensors",
vendor: true,
srcs: ["android/hardware/vsensors/*.aidl"],
stability: "vintf",
owner: "ABCD",
backend: {
cpp: {
enabled: false,
},
java: {
sdk_version: "module_current",
},
},
}
[img]https://i.sstatic. net/3K3d57fl.png[/img]
Проблема:
Теперь я хочу взаимодействовать с этим сервисом HAL на уровне JNI. Я добавляю код службы JNI:
Код: Выделить всё
frameworks/base/services/core/jni/Android.bp
frameworks/base/services/core/jni/com_android_server_CustomSensorService.cpp
frameworks/base/services/core/jni/onload.cpp
JNI Код (com_android_server_CustomSensorService.cpp):
Код: Выделить всё
static sp getSensorService() {
if (gSensorService == nullptr) {
sp sm = defaultServiceManager();
sp binder = sm->getService(String16("android.hardware.vsensors.ISensor/default"));
if (binder != nullptr) {
gSensorService = android::interface_cast(binder);
LOGI("Successfully connected to ISensors service");
} else {
LOGE("Failed to connect to ISensors service");
}
}
return gSensorService;
}
Я не уверен, как правильно ссылаться или интегрировать helpl_interface для HAL в frameworks/base/services/core/jni/Android .bp-файл. Как правильно сослаться на интерфейс AIDL или добавить его, чтобы уровень JNI мог его найти?
Любые рекомендации или примеры того, как правильно связать AIDL для HAL с уровнем JNI, будут полезны. быть оцененным по достоинству.
Подробнее здесь: https://stackoverflow.com/questions/790 ... android-bp