rog2: Add vibrator HAL 1.2
* Picked from crosshatch and coral and edited for our device.
* Add manifest from Asus's 60 fw and edited for support 1.2 vibrator effect
Change-Id: I516e36ea5efee5a86b3a142375a61274ba5cdb86
diff --git a/device.mk b/device.mk
index 72738f4..27489ca 100755
--- a/device.mk
+++ b/device.mk
@@ -198,6 +198,13 @@
PRODUCT_PACKAGES_DEBUG += \
update_engine_client
+# Vibrator
+PRODUCT_PACKAGES += \
+ android.hardware.vibrator@1.2-service.rog2
+
+PRODUCT_COPY_FILES += \
+ $(LOCAL_PATH)/vintf/manifest.xml:$(TARGET_COPY_OUT_PRODUCT)/vendor_overlay/29/etc/vintf/manifest.xml
+
# VNDK
PRODUCT_TARGET_VNDK_VERSION := 29
diff --git a/prebuilt/system/etc/init/init.qcom.rc b/prebuilt/system/etc/init/init.qcom.rc
new file mode 100644
index 0000000..19bb201
--- /dev/null
+++ b/prebuilt/system/etc/init/init.qcom.rc
@@ -0,0 +1,2 @@
+service vendor.vibrator-1-0 /system/bin/true
+ disabled
\ No newline at end of file
diff --git a/sepolicy/private/file_contexts b/sepolicy/private/file_contexts
index 4bb3de1..89bf0f3 100644
--- a/sepolicy/private/file_contexts
+++ b/sepolicy/private/file_contexts
@@ -18,3 +18,7 @@
# Vendor overlay
/(product|system/product)/vendor_overlay/[0-9]+/etc(/.*)? u:object_r:vendor_configs_file:s0
/(product|system/product)/vendor_overlay/[0-9]+/lib(64)?/hw u:object_r:vendor_hal_file:s0
+
+# Vibrator
+/sys/class/leds/vibrator(/.*)? u:object_r:sysfs_vibrator:s0
+/system/bin/hw/android\.hardware\.vibrator@1\.2-service\.rog2 u:object_r:hal_omni_vibrator_exec:s0
diff --git a/sepolicy/private/hal_omni_vibrator.te b/sepolicy/private/hal_omni_vibrator.te
new file mode 100644
index 0000000..0281f89
--- /dev/null
+++ b/sepolicy/private/hal_omni_vibrator.te
@@ -0,0 +1,9 @@
+type hal_omni_vibrator, coredomain, domain;
+hal_server_domain(hal_omni_vibrator, hal_vibrator)
+type hal_omni_vibrator_exec, exec_type, file_type;
+init_daemon_domain(hal_omni_vibrator)
+allow hal_omni_vibrator hal_vibrator_hwservice:hwservice_manager find;
+allow hal_omni_vibrator sysfs_vibrator:file rw_file_perms;
+allow hal_omni_vibrator sysfs_vibrator:lnk_file rw_file_perms;
+allow hal_omni_vibrator sysfs:lnk_file rw_file_perms;
+#allow hal_omni_vibrator sysfs_oem:file rw_file_perms;
diff --git a/sepolicy/private/hwservice.te b/sepolicy/private/hwservice.te
new file mode 100644
index 0000000..01eb9e2
--- /dev/null
+++ b/sepolicy/private/hwservice.te
@@ -0,0 +1 @@
+type hal_omni_vibrator_hwservice, hwservice_manager_type;
\ No newline at end of file
diff --git a/vibrator/Android.bp b/vibrator/Android.bp
new file mode 100644
index 0000000..0825b90
--- /dev/null
+++ b/vibrator/Android.bp
@@ -0,0 +1,39 @@
+//
+// Copyright (C) 2019 The LineageOS Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+cc_binary {
+ name: "android.hardware.vibrator@1.2-service.rog2",
+ relative_install_path: "hw",
+ init_rc: ["android.hardware.vibrator@1.2-service.rog2.rc"],
+ srcs: ["service.cpp", "Vibrator.cpp"],
+ cflags: [
+ "-Wall",
+ "-Werror",
+ ],
+ shared_libs: [
+ "libbase",
+ "libhidlbase",
+ "libcutils",
+ "libhidltransport",
+ "liblog",
+ "libhwbinder",
+ "libutils",
+ "libhardware",
+ "android.hardware.vibrator@1.0",
+ "android.hardware.vibrator@1.1",
+ "android.hardware.vibrator@1.2",
+ ],
+ proprietary: false,
+}
diff --git a/vibrator/Vibrator.cpp b/vibrator/Vibrator.cpp
new file mode 100644
index 0000000..c2522ab
--- /dev/null
+++ b/vibrator/Vibrator.cpp
@@ -0,0 +1,181 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define LOG_TAG "VibratorService"
+
+#include <log/log.h>
+
+#include <hardware/hardware.h>
+#include <hardware/vibrator.h>
+#include <cutils/properties.h>
+
+#include "Vibrator.h"
+
+#include <cinttypes>
+#include <cmath>
+#include <iostream>
+#include <fstream>
+
+
+namespace android {
+namespace hardware {
+namespace vibrator {
+namespace V1_2 {
+namespace implementation {
+
+using Status = ::android::hardware::vibrator::V1_0::Status;
+using EffectStrength = ::android::hardware::vibrator::V1_0::EffectStrength;
+
+static constexpr uint32_t WAVEFORM_TICK_EFFECT_INDEX = 2;
+static constexpr uint32_t WAVEFORM_TICK_EFFECT_MS = 15;
+
+static constexpr uint32_t WAVEFORM_CLICK_EFFECT_INDEX = 3;
+static constexpr uint32_t WAVEFORM_CLICK_EFFECT_MS = 11;
+
+static constexpr uint32_t WAVEFORM_HEAVY_CLICK_EFFECT_INDEX = 4;
+static constexpr uint32_t WAVEFORM_HEAVY_CLICK_EFFECT_MS = 15;
+
+static constexpr uint32_t WAVEFORM_DOUBLE_CLICK_EFFECT_INDEX = 7;
+static constexpr uint32_t WAVEFORM_DOUBLE_CLICK_EFFECT_MS = 130;
+
+static constexpr float AMP_ATTENUATE_STEP_SIZE = 0.125f;
+
+static uint8_t amplitudeToScale(uint8_t amplitude, uint8_t maximum) {
+ return std::round((-20 * std::log10(amplitude / static_cast<float>(maximum))) /
+ (AMP_ATTENUATE_STEP_SIZE));
+}
+
+Vibrator::Vibrator(std::ofstream&& activate, std::ofstream&& duration, std::ofstream&& effect,
+ std::ofstream&& scale) :
+ mActivate(std::move(activate)),
+ mDuration(std::move(duration)),
+ mEffectIndex(std::move(effect)),
+ mScale(std::move(scale))
+{}
+
+Return<Status> Vibrator::on(uint32_t timeoutMs, uint32_t effectIndex) {
+ mEffectIndex << effectIndex << std::endl;
+ mDuration << timeoutMs << std::endl;
+ mActivate << 1 << std::endl;
+
+ return Status::OK;
+}
+
+
+// Methods from ::android::hardware::vibrator::V1_1::IVibrator follow.
+Return<Status> Vibrator::on(uint32_t timeoutMs) {
+ return on(timeoutMs, 0);
+}
+
+Return<Status> Vibrator::off() {
+ mActivate << 0 << std::endl;
+ if (!mActivate) {
+ ALOGE("Failed to turn vibrator off (%d): %s", errno, strerror(errno));
+ return Status::UNKNOWN_ERROR;
+ }
+ return Status::OK;
+}
+
+Return<bool> Vibrator::supportsAmplitudeControl() {
+ return (mScale ? true : false);
+}
+
+Return<Status> Vibrator::setAmplitude(uint8_t amplitude) {
+ if (!amplitude) {
+ return Status::BAD_VALUE;
+ }
+
+ int32_t scale = amplitudeToScale(amplitude, UINT8_MAX);
+
+ mScale << scale << std::endl;
+ if (!mScale) {
+ ALOGE("Failed to set amplitude (%d): %s", errno, strerror(errno));
+ return Status::UNKNOWN_ERROR;
+ }
+
+ return Status::OK;
+}
+
+Return<void> Vibrator::perform(V1_0::Effect effect, EffectStrength strength,
+ perform_cb _hidl_cb) {
+ return performEffect(static_cast<Effect>(effect), strength, _hidl_cb);
+}
+
+Return<void> Vibrator::perform_1_1(V1_1::Effect_1_1 effect, EffectStrength strength,
+ perform_cb _hidl_cb) {
+ return performEffect(static_cast<Effect>(effect), strength, _hidl_cb);
+}
+
+Return<void> Vibrator::perform_1_2(Effect effect, EffectStrength strength,
+ perform_cb _hidl_cb) {
+ return performEffect(effect, strength, _hidl_cb);
+}
+
+Return<void> Vibrator::performEffect(Effect effect, EffectStrength strength,
+ perform_cb _hidl_cb) {
+ Status status = Status::OK;
+ uint32_t timeMs;
+ uint32_t effectIndex;
+
+ switch (effect) {
+ case Effect::TICK:
+ effectIndex = WAVEFORM_TICK_EFFECT_INDEX;
+ timeMs = WAVEFORM_TICK_EFFECT_MS;
+ break;
+ case Effect::CLICK:
+ effectIndex = WAVEFORM_CLICK_EFFECT_INDEX;
+ timeMs = WAVEFORM_CLICK_EFFECT_MS;
+ break;
+ case Effect::HEAVY_CLICK:
+ effectIndex = WAVEFORM_HEAVY_CLICK_EFFECT_INDEX;
+ timeMs = WAVEFORM_HEAVY_CLICK_EFFECT_MS;
+ break;
+ case Effect::DOUBLE_CLICK:
+ effectIndex = WAVEFORM_DOUBLE_CLICK_EFFECT_INDEX;
+ timeMs = WAVEFORM_DOUBLE_CLICK_EFFECT_MS;
+ break;
+ default:
+ _hidl_cb(Status::UNSUPPORTED_OPERATION, 0);
+ return Void();
+ }
+
+ switch (strength) {
+ case EffectStrength::LIGHT:
+ effectIndex -= 1;
+ break;
+ case EffectStrength::MEDIUM:
+ break;
+ case EffectStrength::STRONG:
+ effectIndex += 1;
+ break;
+ default:
+ _hidl_cb(Status::UNSUPPORTED_OPERATION, 0);
+ return Void();
+ }
+
+ setAmplitude(UINT8_MAX); // Always set full-scale for non-ringtone constants
+ on(timeMs, effectIndex);
+ _hidl_cb(status, timeMs);
+
+ return Void();
+}
+
+
+} // namespace implementation
+} // namespace V1_2
+} // namespace vibrator
+} // namespace hardware
+} // namespace android
\ No newline at end of file
diff --git a/vibrator/Vibrator.h b/vibrator/Vibrator.h
new file mode 100644
index 0000000..4cdbc43
--- /dev/null
+++ b/vibrator/Vibrator.h
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef ANDROID_HARDWARE_VIBRATOR_V1_2_VIBRATOR_H
+#define ANDROID_HARDWARE_VIBRATOR_V1_2_VIBRATOR_H
+
+#include <android/hardware/vibrator/1.2/IVibrator.h>
+#include <hidl/Status.h>
+
+#include <fstream>
+
+namespace android {
+namespace hardware {
+namespace vibrator {
+namespace V1_2 {
+namespace implementation {
+
+class Vibrator : public IVibrator {
+public:
+ Vibrator(std::ofstream&& activate, std::ofstream&& duration, std::ofstream&& effect,
+ std::ofstream&& scale);
+
+ // Methods from ::android::hardware::vibrator::V1_0::IVibrator follow.
+ using Status = ::android::hardware::vibrator::V1_0::Status;
+ Return<Status> on(uint32_t timeoutMs) override;
+ Return<Status> off() override;
+ Return<bool> supportsAmplitudeControl() override;
+ Return<Status> setAmplitude(uint8_t amplitude) override;
+
+ using EffectStrength = ::android::hardware::vibrator::V1_0::EffectStrength;
+ Return<void> perform(V1_0::Effect effect, EffectStrength strength, perform_cb _hidl_cb)
+ override;
+ Return<void> perform_1_1(V1_1::Effect_1_1 effect, EffectStrength strength, perform_cb _hidl_cb)
+ override;
+ Return<void> perform_1_2(Effect effect, EffectStrength strength, perform_cb _hidl_cb) override;
+
+private:
+ Return<Status> on(uint32_t timeoutMs, uint32_t effectIndex);
+ Return<void> performEffect(Effect effect, EffectStrength strength, perform_cb _hidl_cb);
+ std::ofstream mActivate;
+ std::ofstream mDuration;
+ std::ofstream mEffectIndex;
+ std::ofstream mScale;
+};
+} // namespace implementation
+} // namespace V1_1
+} // namespace vibrator
+} // namespace hardware
+} // namespace android
+
+#endif // ANDROID_HARDWARE_VIBRATOR_V1_2_VIBRATOR_H
\ No newline at end of file
diff --git a/vibrator/android.hardware.vibrator@1.2-service.rog2.rc b/vibrator/android.hardware.vibrator@1.2-service.rog2.rc
new file mode 100644
index 0000000..b59ac86
--- /dev/null
+++ b/vibrator/android.hardware.vibrator@1.2-service.rog2.rc
@@ -0,0 +1,11 @@
+on early-boot
+ chown system system /sys/class/leds/vibrator/activate
+ chown system system /sys/class/leds/vibrator/duration
+ chown system system /sys/class/leds/vibrator/lp_trigger_effect
+ chown system system /sys/class/leds/vibrator/state
+ chown system system /sys/class/leds/vibrator/scale
+
+service system.vibrator-1-2 /system/bin/hw/android.hardware.vibrator@1.2-service.rog2
+ class hal
+ user system
+ group system
diff --git a/vibrator/service.cpp b/vibrator/service.cpp
new file mode 100644
index 0000000..d996530
--- /dev/null
+++ b/vibrator/service.cpp
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#define LOG_TAG "android.hardware.vibrator@1.2-service.rog2"
+
+#include <android/hardware/vibrator/1.2/IVibrator.h>
+#include <hidl/HidlSupport.h>
+#include <hidl/HidlTransportSupport.h>
+#include <utils/Errors.h>
+#include <utils/StrongPointer.h>
+
+#include "Vibrator.h"
+
+using android::hardware::configureRpcThreadpool;
+using android::hardware::joinRpcThreadpool;
+using android::hardware::vibrator::V1_2::IVibrator;
+using android::hardware::vibrator::V1_2::implementation::Vibrator;
+using namespace android;
+
+static constexpr char ACTIVATE_PATH[] = "/sys/class/leds/vibrator/activate";
+static constexpr char DURATION_PATH[] = "/sys/class/leds/vibrator/duration";
+static constexpr char STATE_PATH[] = "/sys/class/leds/vibrator/state";
+static constexpr char EFFECT_INDEX_PATH[] = "/sys/class/leds/vibrator/lp_trigger_effect";
+static constexpr char SCALE_PATH[] = "/sys/class/leds/vibrator/scale";
+
+status_t registerVibratorService() {
+ // ostreams below are required
+ std::ofstream activate{ACTIVATE_PATH};
+ if (!activate) {
+ ALOGE("Failed to open %s (%d): %s", ACTIVATE_PATH, errno, strerror(errno));
+ }
+
+ std::ofstream duration{DURATION_PATH};
+ if (!duration) {
+ ALOGE("Failed to open %s (%d): %s", DURATION_PATH, errno, strerror(errno));
+ }
+
+ std::ofstream state{STATE_PATH};
+ if (!state) {
+ ALOGE("Failed to open %s (%d): %s", STATE_PATH, errno, strerror(errno));
+ }
+
+ std::ofstream effect{EFFECT_INDEX_PATH};
+ if (!state) {
+ ALOGE("Failed to open %s (%d): %s", EFFECT_INDEX_PATH, errno, strerror(errno));
+ }
+
+ std::ofstream scale{SCALE_PATH};
+ if (!scale) {
+ ALOGE("Failed to open %s (%d): %s", SCALE_PATH, errno, strerror(errno));
+ }
+
+ state << 1 << std::endl;
+ if (!state) {
+ ALOGE("Failed to set state (%d): %s", errno, strerror(errno));
+ }
+
+ sp<IVibrator> vibrator = new Vibrator(std::move(activate), std::move(duration),
+ std::move(effect), std::move(scale));
+
+ return vibrator->registerAsService();
+}
+
+int main() {
+ configureRpcThreadpool(1, true);
+ status_t status = registerVibratorService();
+
+ if (status != OK) {
+ return status;
+ }
+
+ joinRpcThreadpool();
+}
\ No newline at end of file
diff --git a/vintf/manifest.xml b/vintf/manifest.xml
new file mode 100644
index 0000000..15aeb23
--- /dev/null
+++ b/vintf/manifest.xml
@@ -0,0 +1,1028 @@
+<!--
+ Input:
+ manifest.xml
+ manifest.xml
+ c2_manifest.xml
+ airtrigger.xml
+ glovemode.xml
+ zenmotion.xml
+ wifiantennamode.xml
+ colortemp.xml
+ twinviewdock.xml
+-->
+<manifest version="1.0" type="device" target-level="4">
+ <hal format="hidl">
+ <name>android.hardware.audio</name>
+ <transport>hwbinder</transport>
+ <version>5.0</version>
+ <interface>
+ <name>IDevicesFactory</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@5.0::IDevicesFactory/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>android.hardware.audio.effect</name>
+ <transport>hwbinder</transport>
+ <version>5.0</version>
+ <interface>
+ <name>IEffectsFactory</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@5.0::IEffectsFactory/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>android.hardware.biometrics.fingerprint</name>
+ <transport>hwbinder</transport>
+ <version>2.1</version>
+ <interface>
+ <name>IBiometricsFingerprint</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@2.1::IBiometricsFingerprint/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>android.hardware.bluetooth</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>IBluetoothHci</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.0::IBluetoothHci/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>android.hardware.bluetooth.audio</name>
+ <transport>hwbinder</transport>
+ <version>2.0</version>
+ <interface>
+ <name>IBluetoothAudioProvidersFactory</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@2.0::IBluetoothAudioProvidersFactory/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>android.hardware.boot</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>IBootControl</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.0::IBootControl/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>android.hardware.camera.provider</name>
+ <transport>hwbinder</transport>
+ <version>2.4</version>
+ <interface>
+ <name>ICameraProvider</name>
+ <instance>legacy/0</instance>
+ </interface>
+ <fqname>@2.4::ICameraProvider/legacy/0</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>android.hardware.configstore</name>
+ <transport>hwbinder</transport>
+ <version>1.1</version>
+ <interface>
+ <name>ISurfaceFlingerConfigs</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.1::ISurfaceFlingerConfigs/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>android.hardware.contexthub</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>IContexthub</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.0::IContexthub/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>android.hardware.drm</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>ICryptoFactory</name>
+ <instance>default</instance>
+ </interface>
+ <interface>
+ <name>IDrmFactory</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.0::ICryptoFactory/default</fqname>
+ <fqname>@1.0::IDrmFactory/default</fqname>
+ <fqname>@1.1::ICryptoFactory/wfdhdcp</fqname>
+ <fqname>@1.1::IDrmFactory/wfdhdcp</fqname>
+ <fqname>@1.2::ICryptoFactory/clearkey</fqname>
+ <fqname>@1.2::ICryptoFactory/widevine</fqname>
+ <fqname>@1.2::IDrmFactory/clearkey</fqname>
+ <fqname>@1.2::IDrmFactory/widevine</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>android.hardware.gatekeeper</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>IGatekeeper</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.0::IGatekeeper/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>android.hardware.gnss</name>
+ <transport>hwbinder</transport>
+ <version>1.1</version>
+ <interface>
+ <name>IGnss</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.0::IGnss/gnss_vendor</fqname>
+ <fqname>@1.1::IGnss/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>android.hardware.gnss</name>
+ <transport>hwbinder</transport>
+ <version>2.0</version>
+ <interface>
+ <name>IGnss</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.0::IGnss/gnss_vendor</fqname>
+ <fqname>@2.0::IGnss/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>android.hardware.graphics.allocator</name>
+ <transport>hwbinder</transport>
+ <version>2.0</version>
+ <interface>
+ <name>IAllocator</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@2.0::IAllocator/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>android.hardware.graphics.composer</name>
+ <transport>hwbinder</transport>
+ <version>2.3</version>
+ <interface>
+ <name>IComposer</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@2.3::IComposer/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>android.hardware.graphics.mapper</name>
+ <transport arch="32+64">passthrough</transport>
+ <version>2.1</version>
+ <interface>
+ <name>IMapper</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@2.1::IMapper/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>android.hardware.health</name>
+ <transport>hwbinder</transport>
+ <version>2.0</version>
+ <interface>
+ <name>IHealth</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@2.0::IHealth/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>android.hardware.keymaster</name>
+ <transport>hwbinder</transport>
+ <version>4.0</version>
+ <interface>
+ <name>IKeymasterDevice</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@4.0::IKeymasterDevice/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>android.hardware.light</name>
+ <transport>hwbinder</transport>
+ <version>2.0</version>
+ <interface>
+ <name>ILight</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@2.0::ILight/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>android.hardware.media.c2</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>IComponentStore</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.0::IComponentStore/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>android.hardware.media.omx</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>IOmx</name>
+ <instance>default</instance>
+ </interface>
+ <interface>
+ <name>IOmxStore</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.0::IOmx/default</fqname>
+ <fqname>@1.0::IOmxStore/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>android.hardware.memtrack</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>IMemtrack</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.0::IMemtrack/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>android.hardware.neuralnetworks</name>
+ <transport>hwbinder</transport>
+ <version>1.2</version>
+ <interface>
+ <name>IDevice</name>
+ <instance>qti-default</instance>
+ <instance>qti-dsp</instance>
+ <instance>qti-gpu</instance>
+ <instance>qti-hta</instance>
+ </interface>
+ <fqname>@1.2::IDevice/qti-default</fqname>
+ <fqname>@1.2::IDevice/qti-dsp</fqname>
+ <fqname>@1.2::IDevice/qti-gpu</fqname>
+ <fqname>@1.2::IDevice/qti-hta</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>android.hardware.nfc</name>
+ <transport>hwbinder</transport>
+ <version>1.2</version>
+ <interface>
+ <name>INfc</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.2::INfc/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>android.hardware.power</name>
+ <transport>hwbinder</transport>
+ <version>1.2</version>
+ <interface>
+ <name>IPower</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.2::IPower/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>android.hardware.radio</name>
+ <transport>hwbinder</transport>
+ <fqname>@1.2::ISap/slot1</fqname>
+ <fqname>@1.2::ISap/slot2</fqname>
+ <fqname>@1.4::IRadio/slot1</fqname>
+ <fqname>@1.4::IRadio/slot2</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>android.hardware.radio.config</name>
+ <transport>hwbinder</transport>
+ <version>1.1</version>
+ <interface>
+ <name>IRadioConfig</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.1::IRadioConfig/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>android.hardware.renderscript</name>
+ <transport arch="32+64">passthrough</transport>
+ <version>1.0</version>
+ <interface>
+ <name>IDevice</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.0::IDevice/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>android.hardware.secure_element</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>ISecureElement</name>
+ <instance>SIM1</instance>
+ <instance>SIM2</instance>
+ </interface>
+ <fqname>@1.0::ISecureElement/SIM1</fqname>
+ <fqname>@1.0::ISecureElement/SIM2</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>android.hardware.sensors</name>
+ <transport>hwbinder</transport>
+ <version>2.0</version>
+ <interface>
+ <name>ISensors</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@2.0::ISensors/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>android.hardware.soundtrigger</name>
+ <transport>hwbinder</transport>
+ <version>2.1</version>
+ <interface>
+ <name>ISoundTriggerHw</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@2.1::ISoundTriggerHw/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>android.hardware.tetheroffload.config</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>IOffloadConfig</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.0::IOffloadConfig/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>android.hardware.tetheroffload.control</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>IOffloadControl</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.0::IOffloadControl/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>android.hardware.thermal</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>IThermal</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.0::IThermal/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>android.hardware.usb</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>IUsb</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.0::IUsb/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>android.hardware.vibrator</name>
+ <transport>hwbinder</transport>
+ <version>1.2</version>
+ <interface>
+ <name>IVibrator</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.2::IVibrator/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>android.hardware.wifi</name>
+ <transport>hwbinder</transport>
+ <version>1.3</version>
+ <interface>
+ <name>IWifi</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.3::IWifi/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>android.hardware.wifi.hostapd</name>
+ <transport>hwbinder</transport>
+ <version>1.1</version>
+ <interface>
+ <name>IHostapd</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.1::IHostapd/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>android.hardware.wifi.supplicant</name>
+ <transport>hwbinder</transport>
+ <version>1.2</version>
+ <interface>
+ <name>ISupplicant</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.2::ISupplicant/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>com.qualcomm.qti.uceservice</name>
+ <transport>hwbinder</transport>
+ <version>2.1</version>
+ <interface>
+ <name>IUceService</name>
+ <instance>com.qualcomm.qti.uceservice</instance>
+ </interface>
+ <fqname>@2.1::IUceService/com.qualcomm.qti.uceservice</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.asus.hardware.vibratorcontrol</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>IVibratorcontrol</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.0::IVibratorcontrol/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.asus.motor</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>IRotateCameraInterface</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.0::IRotateCameraInterface/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.display.color</name>
+ <transport>hwbinder</transport>
+ <version>1.3</version>
+ <interface>
+ <name>IDisplayColor</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.3::IDisplayColor/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.display.config</name>
+ <transport>hwbinder</transport>
+ <version>1.10</version>
+ <interface>
+ <name>IDisplayConfig</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.10::IDisplayConfig/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.display.postproc</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>IDisplayPostproc</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.0::IDisplayPostproc/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.goodix.hardware.biometrics.fingerprint</name>
+ <transport>hwbinder</transport>
+ <version>2.1</version>
+ <interface>
+ <name>IGoodixFingerprintDaemon</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@2.1::IGoodixFingerprintDaemon/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.ims.airtrigger</name>
+ <transport>hwbinder</transport>
+ <version>1.1</version>
+ <interface>
+ <name>IAirTrigger</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.1::IAirTrigger/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.ims.colortemp</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>IColorTemp</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.0::IColorTemp/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.ims.glovemode</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>IGloveMode</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.0::IGloveMode/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.ims.twinviewdock</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>ITwinViewDock</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.0::ITwinViewDock/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.ims.wifiantennamode</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>IWifiantennamode</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.0::IWifiantennamode/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.ims.zenmotion</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>IZenMotion</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.0::IZenMotion/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.nxp.hardware.nfc</name>
+ <transport>hwbinder</transport>
+ <version>1.1</version>
+ <interface>
+ <name>INqNfc</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.1::INqNfc/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.pixelworks.hardware.display</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>IIris</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.0::IIris/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.qti.data.factory</name>
+ <transport>hwbinder</transport>
+ <version>2.0</version>
+ <interface>
+ <name>IFactory</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@2.0::IFactory/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.qti.esepowermanager</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>IEsePowerManager</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.0::IEsePowerManager/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.qti.gnss</name>
+ <transport>hwbinder</transport>
+ <version>1.2</version>
+ <interface>
+ <name>ILocHidlGnss</name>
+ <instance>gnss_vendor</instance>
+ </interface>
+ <fqname>@1.2::ILocHidlGnss/gnss_vendor</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.qti.gnss</name>
+ <transport>hwbinder</transport>
+ <version>2.1</version>
+ <interface>
+ <name>ILocHidlGnss</name>
+ <instance>gnss_vendor</instance>
+ </interface>
+ <fqname>@2.1::ILocHidlGnss/gnss_vendor</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.qti.gnss</name>
+ <transport>hwbinder</transport>
+ <version>3.0</version>
+ <interface>
+ <name>ILocHidlGnss</name>
+ <instance>gnss_vendor</instance>
+ </interface>
+ <fqname>@3.0::ILocHidlGnss/gnss_vendor</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.qti.hardware.alarm</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>IAlarm</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.0::IAlarm/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.qti.hardware.audiohalext</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>IAudioHalExt</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.0::IAudioHalExt/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.qti.hardware.auralight</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>IAuraLight</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.0::IAuraLight/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.qti.hardware.bluetooth_sar</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>IBluetoothSar</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.0::IBluetoothSar/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.qti.hardware.cacert</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>IService</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.0::IService/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.qti.hardware.capabilityconfigstore</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>ICapabilityConfigStore</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.0::ICapabilityConfigStore/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.qti.hardware.cryptfshw</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>ICryptfsHw</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.0::ICryptfsHw/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.qti.hardware.cvp</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>ICvp</name>
+ <instance>cvphalservice</instance>
+ </interface>
+ <fqname>@1.0::ICvp/cvphalservice</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.qti.hardware.data.connection</name>
+ <transport>hwbinder</transport>
+ <version>1.1</version>
+ <interface>
+ <name>IDataConnection</name>
+ <instance>slot1</instance>
+ <instance>slot2</instance>
+ </interface>
+ <fqname>@1.1::IDataConnection/slot1</fqname>
+ <fqname>@1.1::IDataConnection/slot2</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.qti.hardware.data.iwlan</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>IIWlan</name>
+ <instance>slot1</instance>
+ <instance>slot2</instance>
+ </interface>
+ <fqname>@1.0::IIWlan/slot1</fqname>
+ <fqname>@1.0::IIWlan/slot2</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.qti.hardware.display.allocator</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>IQtiAllocator</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.0::IQtiAllocator/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.qti.hardware.display.mapper</name>
+ <transport arch="32+64">passthrough</transport>
+ <version>2.0</version>
+ <interface>
+ <name>IQtiMapper</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@2.0::IQtiMapper/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.qti.hardware.iop</name>
+ <transport>hwbinder</transport>
+ <version>2.0</version>
+ <interface>
+ <name>IIop</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@2.0::IIop/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.qti.hardware.perf</name>
+ <transport>hwbinder</transport>
+ <version>2.0</version>
+ <interface>
+ <name>IPerf</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@2.0::IPerf/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.qti.hardware.qdutils_disp</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>IQdutilsDisp</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.0::IQdutilsDisp/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.qti.hardware.qseecom</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>IQSEECom</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.0::IQSEECom/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.qti.hardware.qteeconnector</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>IAppConnector</name>
+ <instance>default</instance>
+ </interface>
+ <interface>
+ <name>IGPAppConnector</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.0::IAppConnector/default</fqname>
+ <fqname>@1.0::IGPAppConnector/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.qti.hardware.radio.am</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>IQcRilAudio</name>
+ <instance>slot1</instance>
+ <instance>slot2</instance>
+ </interface>
+ <fqname>@1.0::IQcRilAudio/slot1</fqname>
+ <fqname>@1.0::IQcRilAudio/slot2</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.qti.hardware.radio.ims</name>
+ <transport>hwbinder</transport>
+ <version>1.5</version>
+ <interface>
+ <name>IImsRadio</name>
+ <instance>imsradio0</instance>
+ <instance>imsradio1</instance>
+ </interface>
+ <fqname>@1.5::IImsRadio/imsradio0</fqname>
+ <fqname>@1.5::IImsRadio/imsradio1</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.qti.hardware.radio.lpa</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>IUimLpa</name>
+ <instance>UimLpa0</instance>
+ <instance>UimLpa1</instance>
+ </interface>
+ <fqname>@1.0::IUimLpa/UimLpa0</fqname>
+ <fqname>@1.0::IUimLpa/UimLpa1</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.qti.hardware.radio.qcrilhook</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>IQtiOemHook</name>
+ <instance>oemhook0</instance>
+ <instance>oemhook1</instance>
+ </interface>
+ <fqname>@1.0::IQtiOemHook/oemhook0</fqname>
+ <fqname>@1.0::IQtiOemHook/oemhook1</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.qti.hardware.radio.qtiradio</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>IQtiRadio</name>
+ <instance>slot1</instance>
+ <instance>slot2</instance>
+ </interface>
+ <fqname>@1.0::IQtiRadio/slot1</fqname>
+ <fqname>@1.0::IQtiRadio/slot2</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.qti.hardware.radio.qtiradio</name>
+ <transport>hwbinder</transport>
+ <version>2.3</version>
+ <interface>
+ <name>IQtiRadio</name>
+ <instance>slot1</instance>
+ <instance>slot2</instance>
+ </interface>
+ <fqname>@2.3::IQtiRadio/slot1</fqname>
+ <fqname>@2.3::IQtiRadio/slot2</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.qti.hardware.radio.uim</name>
+ <transport>hwbinder</transport>
+ <version>1.2</version>
+ <interface>
+ <name>IUim</name>
+ <instance>Uim0</instance>
+ <instance>Uim1</instance>
+ </interface>
+ <fqname>@1.2::IUim/Uim0</fqname>
+ <fqname>@1.2::IUim/Uim1</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.qti.hardware.radio.uim_remote_client</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>IUimRemoteServiceClient</name>
+ <instance>uimRemoteClient0</instance>
+ <instance>uimRemoteClient1</instance>
+ </interface>
+ <fqname>@1.0::IUimRemoteServiceClient/uimRemoteClient0</fqname>
+ <fqname>@1.0::IUimRemoteServiceClient/uimRemoteClient1</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.qti.hardware.radio.uim_remote_server</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>IUimRemoteServiceServer</name>
+ <instance>uimRemoteServer0</instance>
+ <instance>uimRemoteServer1</instance>
+ </interface>
+ <fqname>@1.0::IUimRemoteServiceServer/uimRemoteServer0</fqname>
+ <fqname>@1.0::IUimRemoteServiceServer/uimRemoteServer1</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.qti.hardware.sensorscalibrate</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>ISensorsCalibrate</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.0::ISensorsCalibrate/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.qti.hardware.soter</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>ISoter</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.0::ISoter/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.qti.hardware.tui_comm</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>ITuiComm</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.0::ITuiComm/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.qti.hardware.vpp</name>
+ <transport>hwbinder</transport>
+ <version>1.3</version>
+ <interface>
+ <name>IHidlVppService</name>
+ <instance>vppService</instance>
+ </interface>
+ <fqname>@1.3::IHidlVppService/vppService</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.qti.hardware.wifi.hostapd</name>
+ <transport>hwbinder</transport>
+ <version>1.1</version>
+ <interface>
+ <name>IHostapdVendor</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.1::IHostapdVendor/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.qti.hardware.wifi.supplicant</name>
+ <transport>hwbinder</transport>
+ <version>2.0</version>
+ <interface>
+ <name>ISupplicantVendor</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@2.0::ISupplicantVendor/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.qti.hardware.wifi.wifilearner</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>IWifiStats</name>
+ <instance>wifiStats</instance>
+ </interface>
+ <fqname>@1.0::IWifiStats/wifiStats</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.qti.hardware.wigig.netperftuner</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>INetPerfTuner</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.0::INetPerfTuner/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.qti.hardware.wigig.supptunnel</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>ISuppTunnelProvider</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.0::ISuppTunnelProvider/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.qti.ims.callinfo</name>
+ <transport>hwbinder</transport>
+ <version>1.0</version>
+ <interface>
+ <name>IService</name>
+ <instance>default</instance>
+ </interface>
+ <fqname>@1.0::IService/default</fqname>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.qti.imsrtpservice</name>
+ <transport>hwbinder</transport>
+ <version>2.1</version>
+ <interface>
+ <name>IRTPService</name>
+ <instance>imsrtpservice</instance>
+ </interface>
+ <fqname>@2.1::IRTPService/imsrtpservice</fqname>
+ </hal>
+ <sepolicy>
+ <version>29.0</version>
+ </sepolicy>
+</manifest>