diff --git a/AndroidProducts.mk b/AndroidProducts.mk
index a7404dc..59a741e 100644
--- a/AndroidProducts.mk
+++ b/AndroidProducts.mk
@@ -5,9 +5,4 @@
#
PRODUCT_MAKEFILES := \
- $(LOCAL_DIR)/lineage_spaced.mk
-
-COMMON_LUNCH_CHOICES := \
- lineage_spaced-user \
- lineage_spaced-userdebug \
- lineage_spaced-eng
\ No newline at end of file
+ $(LOCAL_DIR)/aosp_spaced.mk
diff --git a/BoardConfig.mk b/BoardConfig.mk
index 78ab61e..d5266fe 100644
--- a/BoardConfig.mk
+++ b/BoardConfig.mk
@@ -20,7 +20,7 @@ TARGET_ARCH_VARIANT := armv8-2a-dotprod
TARGET_CPU_ABI := arm64-v8a
TARGET_CPU_ABI2 :=
TARGET_CPU_VARIANT := generic
-TARGET_2ND_CPU_VARIANT_RUNTIME := cortex-a76
+TARGET_CPU_VARIANT_RUNTIME := cortex-a76
TARGET_2ND_ARCH := arm
TARGET_2ND_ARCH_VARIANT := armv8-2a
@@ -29,6 +29,12 @@ TARGET_2ND_CPU_ABI2 := armeabi
TARGET_2ND_CPU_VARIANT := generic
TARGET_2ND_CPU_VARIANT_RUNTIME := cortex-a55
+# ART
+ART_BUILD_TARGET_NDEBUG := true
+ART_BUILD_TARGET_DEBUG := false
+ART_BUILD_HOST_NDEBUG := true
+ART_BUILD_HOST_DEBUG := false
+
# Assert
TARGET_OTA_ASSERT_DEVICE := RMX3151L1,RMX3286,spaced
@@ -47,7 +53,6 @@ BOARD_DTB_OFFSET := 0x0bc08000
BOARD_BOOTIMG_HEADER_VERSION := 2
BOARD_INCLUDE_DTB_IN_BOOTIMG := true
-BOARD_KERNEL_CMDLINE += androidboot.selinux=permissive
BOARD_KERNEL_CMDLINE := bootopt=64S3,32N2,64N2
BOARD_KERNEL_CMDLINE += androidboot.init_fatal_reboot_target=recovery
@@ -91,10 +96,11 @@ BOARD_SUPER_PARTITION_GROUPS := main
BOARD_MAIN_SIZE := 10196353024
BOARD_MAIN_PARTITION_LIST := system system_ext vendor product odm
-BOARD_SYSTEMIMAGE_PARTITION_RESERVED_SIZE := 2147483648
-BOARD_SYSTEM_EXTIMAGE_PARTITION_RESERVED_SIZE := 1610612736
-BOARD_PRODUCTIMAGE_PARTITION_RESERVED_SIZE := 2147483648
+# BOARD_SYSTEMIMAGE_PARTITION_RESERVED_SIZE := 2147483648
+# BOARD_SYSTEM_EXTIMAGE_PARTITION_RESERVED_SIZE := 1610612736
+# BOARD_PRODUCTIMAGE_PARTITION_RESERVED_SIZE := 2147483648
+BOARD_EROFS_COMPRESSOR := lz4
BOARD_EROFS_PCLUSTER_SIZE := 262144
BOARD_SYSTEMIMAGE_FILE_SYSTEM_TYPE := ext4
@@ -108,16 +114,10 @@ TARGET_COPY_OUT_VENDOR := vendor
TARGET_COPY_OUT_PRODUCT := product
TARGET_COPY_OUT_SYSTEM_EXT := system_ext
-# Lineage Health
-TARGET_HEALTH_CHARGING_CONTROL_CHARGING_PATH := /sys/class/oplus_chg/battery/mmi_charging_enable
-
# Platform
TARGET_BOARD_PLATFORM := mt6781
BOARD_HAS_MTK_HARDWARE := true
-# Power
-TARGET_TAP_TO_WAKE_NODE := "/proc/touchpanel/double_tap_enable"
-
# Recovery
TARGET_RECOVERY_PIXEL_FORMAT := "RGBX_8888"
TARGET_RECOVERY_FSTAB := $(DEVICE_PATH)/rootdir/etc/fstab.mt6781
@@ -144,6 +144,9 @@ SOONG_CONFIG_NAMESPACES += OPLUS_LINEAGE_TOUCH_HAL
SOONG_CONFIG_OPLUS_LINEAGE_TOUCH_HAL := INCLUDE_DIR
SOONG_CONFIG_OPLUS_LINEAGE_TOUCH_HAL_INCLUDE_DIR := $(DEVICE_PATH)/touch/include
+# Vibrator
+TARGET_VIBRATOR_SUPPORTS_EFFECTS := true
+
# Verified Boot
BOARD_AVB_ENABLE := true
BOARD_AVB_MAKE_VBMETA_IMAGE_ARGS += --flags 3
@@ -167,10 +170,7 @@ BOARD_AVB_VBMETA_VENDOR_ROLLBACK_INDEX_LOCATION := 3
# VINTF
DEVICE_MANIFEST_FILE += $(DEVICE_PATH)/manifest.xml
DEVICE_MATRIX_FILE += $(DEVICE_PATH)/compatibility_matrix.xml
-DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE := \
- $(DEVICE_PATH)/framework_compatibility_matrix.xml \
- vendor/lineage/config/device_framework_matrix.xml
-ODM_MANIFEST_FILES := $(DEVICE_PATH)/manifest_odm.xml
+DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE := $(DEVICE_PATH)/framework_compatibility_matrix.xml
ODM_MANIFEST_SKUS += nfc
ODM_MANIFEST_NFC_FILES := $(DEVICE_PATH)/manifest_nfc.xml
@@ -183,14 +183,11 @@ TARGET_VENDOR_PROP += $(DEVICE_PATH)/vendor.prop
BOARD_VNDK_VERSION := current
# Wi-Fi
-BOARD_WLAN_DEVICE := MediaTek
WPA_SUPPLICANT_VERSION := VER_0_8_X
BOARD_WPA_SUPPLICANT_DRIVER := NL80211
-BOARD_WPA_SUPPLICANT_PRIVATE_LIB := lib_driver_cmd_mt66xx
BOARD_HOSTAPD_DRIVER := NL80211
-BOARD_HOSTAPD_PRIVATE_LIB := lib_driver_cmd_mt66xx
WIFI_DRIVER_FW_PATH_PARAM := "/dev/wmtWifi"
-WIFI_DRIVER_FW_PATH_STA:= "STA"
+WIFI_DRIVER_FW_PATH_STA := "STA"
WIFI_DRIVER_FW_PATH_AP := "AP"
WIFI_DRIVER_FW_PATH_P2P := "P2P"
WIFI_DRIVER_STATE_CTRL_PARAM := "/dev/wmtWifi"
diff --git a/aidl/health/android.hardware.health-service.mediatek.xml b/aidl/health/android.hardware.health-service.mediatek.xml
index 1fe9b8d..2acaaba 100644
--- a/aidl/health/android.hardware.health-service.mediatek.xml
+++ b/aidl/health/android.hardware.health-service.mediatek.xml
@@ -1,7 +1,7 @@
android.hardware.health
- 2
+ 3
IHealth/default
diff --git a/aidl/power-libperfmgr/Android.bp b/aidl/power-libperfmgr/Android.bp
new file mode 100644
index 0000000..6456777
--- /dev/null
+++ b/aidl/power-libperfmgr/Android.bp
@@ -0,0 +1,45 @@
+//
+// Copyright (C) 2021 The LineageOS Project
+//
+// SPDX-License-Identifier: Apache-2.0
+//
+
+soong_namespace {
+ imports: [
+ "hardware/google/interfaces",
+ "hardware/google/pixel",
+ ],
+}
+
+cc_binary {
+ name: "android.hardware.power-service.spaced-libperfmgr",
+ relative_install_path: "hw",
+ init_rc: ["android.hardware.power-service.spaced-libperfmgr.rc"],
+ vintf_fragments: ["android.hardware.power-service.spaced.xml"],
+ vendor: true,
+ cflags: [
+ "-Wno-unused-variable",
+ "-Wno-unused-parameter",
+ ],
+ shared_libs: [
+ "android.hardware.power-V4-ndk",
+ "libbase",
+ "libbinder_ndk",
+ "libcutils",
+ "libdl",
+ "liblog",
+ "libperfmgr",
+ "libprocessgroup",
+ "libutils",
+ "pixel-power-ext-V1-ndk",
+ ],
+ srcs: [
+ "service.cpp",
+ "InteractionHandler.cpp",
+ "Power.cpp",
+ "PowerExt.cpp",
+ "PowerHintSession.cpp",
+ "PowerSessionManager.cpp",
+ ],
+}
+
diff --git a/aidl/power-libperfmgr/InteractionHandler.cpp b/aidl/power-libperfmgr/InteractionHandler.cpp
new file mode 100644
index 0000000..a9f908b
--- /dev/null
+++ b/aidl/power-libperfmgr/InteractionHandler.cpp
@@ -0,0 +1,283 @@
+/*
+ * Copyright (C) 2018 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 ATRACE_TAG (ATRACE_TAG_POWER | ATRACE_TAG_HAL)
+#define LOG_TAG "powerhal-libperfmgr"
+
+#include "InteractionHandler.h"
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+#include
+
+#define MAX_LENGTH 64
+
+#define MSINSEC 1000L
+#define NSINMS 1000000L
+
+namespace aidl {
+namespace google {
+namespace hardware {
+namespace power {
+namespace impl {
+namespace pixel {
+
+namespace {
+
+static const bool kDisplayIdleSupport =
+ ::android::base::GetBoolProperty("vendor.powerhal.disp.idle_support", true);
+static const std::array kDispIdlePath = {"/sys/class/drm/card0/device/idle_state",
+ "/sys/class/graphics/fb0/idle_state"};
+static const uint32_t kWaitMs =
+ ::android::base::GetUintProperty("vendor.powerhal.disp.idle_wait", /*default*/ 100U);
+static const uint32_t kMinDurationMs =
+ ::android::base::GetUintProperty("vendor.powerhal.interaction.min", /*default*/ 1400U);
+static const uint32_t kMaxDurationMs =
+ ::android::base::GetUintProperty("vendor.powerhal.interaction.max", /*default*/ 5650U);
+static const uint32_t kDurationOffsetMs =
+ ::android::base::GetUintProperty("vendor.powerhal.interaction.offset", /*default*/ 650U);
+
+static size_t CalcTimespecDiffMs(struct timespec start, struct timespec end) {
+ size_t diff_in_ms = 0;
+ diff_in_ms += (end.tv_sec - start.tv_sec) * MSINSEC;
+ diff_in_ms += (end.tv_nsec - start.tv_nsec) / NSINMS;
+ return diff_in_ms;
+}
+
+static int FbIdleOpen(void) {
+ int fd;
+ for (const auto &path : kDispIdlePath) {
+ fd = open(path, O_RDONLY);
+ if (fd >= 0)
+ return fd;
+ }
+ ALOGE("Unable to open fb idle state path (%d)", errno);
+ return -1;
+}
+
+} // namespace
+
+using ::android::perfmgr::HintManager;
+
+InteractionHandler::InteractionHandler()
+ : mState(INTERACTION_STATE_UNINITIALIZED), mDurationMs(0) {}
+
+InteractionHandler::~InteractionHandler() {
+ Exit();
+}
+
+bool InteractionHandler::Init() {
+ std::lock_guard lk(mLock);
+
+ if (mState != INTERACTION_STATE_UNINITIALIZED)
+ return true;
+
+ int fd = FbIdleOpen();
+ if (fd < 0)
+ return false;
+ mIdleFd = fd;
+
+ mEventFd = eventfd(0, EFD_NONBLOCK);
+ if (mEventFd < 0) {
+ ALOGE("Unable to create event fd (%d)", errno);
+ close(mIdleFd);
+ return false;
+ }
+
+ mState = INTERACTION_STATE_IDLE;
+ mThread = std::unique_ptr(new std::thread(&InteractionHandler::Routine, this));
+
+ return true;
+}
+
+void InteractionHandler::Exit() {
+ std::unique_lock lk(mLock);
+ if (mState == INTERACTION_STATE_UNINITIALIZED)
+ return;
+
+ AbortWaitLocked();
+ mState = INTERACTION_STATE_UNINITIALIZED;
+ lk.unlock();
+
+ mCond.notify_all();
+ mThread->join();
+
+ close(mEventFd);
+ close(mIdleFd);
+}
+
+void InteractionHandler::PerfLock() {
+ ALOGV("%s: acquiring perf lock", __func__);
+ if (!HintManager::GetInstance()->DoHint("INTERACTION")) {
+ ALOGE("%s: do hint INTERACTION failed", __func__);
+ }
+}
+
+void InteractionHandler::PerfRel() {
+ ALOGV("%s: releasing perf lock", __func__);
+ if (!HintManager::GetInstance()->EndHint("INTERACTION")) {
+ ALOGE("%s: end hint INTERACTION failed", __func__);
+ }
+}
+
+void InteractionHandler::Acquire(int32_t duration) {
+ ATRACE_CALL();
+
+ std::lock_guard lk(mLock);
+
+ int inputDuration = duration + kDurationOffsetMs;
+ int finalDuration;
+ if (inputDuration > kMaxDurationMs)
+ finalDuration = kMaxDurationMs;
+ else if (inputDuration > kMinDurationMs)
+ finalDuration = inputDuration;
+ else
+ finalDuration = kMinDurationMs;
+
+ // Fallback to do boost directly
+ // 1) override property is set OR
+ // 2) InteractionHandler not initialized
+ if (!kDisplayIdleSupport || mState == INTERACTION_STATE_UNINITIALIZED) {
+ HintManager::GetInstance()->DoHint("INTERACTION", std::chrono::milliseconds(finalDuration));
+ return;
+ }
+
+ struct timespec cur_timespec;
+ clock_gettime(CLOCK_MONOTONIC, &cur_timespec);
+ if (mState != INTERACTION_STATE_IDLE && finalDuration <= mDurationMs) {
+ size_t elapsed_time = CalcTimespecDiffMs(mLastTimespec, cur_timespec);
+ // don't hint if previous hint's duration covers this hint's duration
+ if (elapsed_time <= (mDurationMs - finalDuration)) {
+ ALOGV("%s: Previous duration (%d) cover this (%d) elapsed: %lld", __func__,
+ static_cast(mDurationMs), static_cast(finalDuration),
+ static_cast(elapsed_time));
+ return;
+ }
+ }
+ mLastTimespec = cur_timespec;
+ mDurationMs = finalDuration;
+
+ ALOGV("%s: input: %d final duration: %d", __func__, duration, finalDuration);
+
+ if (mState == INTERACTION_STATE_WAITING)
+ AbortWaitLocked();
+ else if (mState == INTERACTION_STATE_IDLE)
+ PerfLock();
+
+ mState = INTERACTION_STATE_INTERACTION;
+ mCond.notify_one();
+}
+
+void InteractionHandler::Release() {
+ std::lock_guard lk(mLock);
+ if (mState == INTERACTION_STATE_WAITING) {
+ ATRACE_CALL();
+ PerfRel();
+ mState = INTERACTION_STATE_IDLE;
+ } else {
+ // clear any wait aborts pending in event fd
+ uint64_t val;
+ ssize_t ret = read(mEventFd, &val, sizeof(val));
+
+ ALOGW_IF(ret < 0, "%s: failed to clear eventfd (%zd, %d)", __func__, ret, errno);
+ }
+}
+
+// should be called while locked
+void InteractionHandler::AbortWaitLocked() {
+ uint64_t val = 1;
+ ssize_t ret = write(mEventFd, &val, sizeof(val));
+ if (ret != sizeof(val))
+ ALOGW("Unable to write to event fd (%zd)", ret);
+}
+
+void InteractionHandler::WaitForIdle(int32_t wait_ms, int32_t timeout_ms) {
+ char data[MAX_LENGTH];
+ ssize_t ret;
+ struct pollfd pfd[2];
+
+ ATRACE_CALL();
+
+ ALOGV("%s: wait:%d timeout:%d", __func__, wait_ms, timeout_ms);
+
+ pfd[0].fd = mEventFd;
+ pfd[0].events = POLLIN;
+ pfd[1].fd = mIdleFd;
+ pfd[1].events = POLLPRI | POLLERR;
+
+ ret = poll(pfd, 1, wait_ms);
+ if (ret > 0) {
+ ALOGV("%s: wait aborted", __func__);
+ return;
+ } else if (ret < 0) {
+ ALOGE("%s: error in poll while waiting", __func__);
+ return;
+ }
+
+ ret = pread(mIdleFd, data, sizeof(data), 0);
+ if (!ret) {
+ ALOGE("%s: Unexpected EOF!", __func__);
+ return;
+ }
+
+ if (!strncmp(data, "idle", 4)) {
+ ALOGV("%s: already idle", __func__);
+ return;
+ }
+
+ ret = poll(pfd, 2, timeout_ms);
+ if (ret < 0)
+ ALOGE("%s: Error on waiting for idle (%zd)", __func__, ret);
+ else if (ret == 0)
+ ALOGV("%s: timed out waiting for idle", __func__);
+ else if (pfd[0].revents)
+ ALOGV("%s: wait for idle aborted", __func__);
+ else if (pfd[1].revents)
+ ALOGV("%s: idle detected", __func__);
+}
+
+void InteractionHandler::Routine() {
+ pthread_setname_np(pthread_self(), "DispIdle");
+ std::unique_lock lk(mLock, std::defer_lock);
+
+ while (true) {
+ lk.lock();
+ mCond.wait(lk, [&] { return mState != INTERACTION_STATE_IDLE; });
+ if (mState == INTERACTION_STATE_UNINITIALIZED)
+ return;
+ mState = INTERACTION_STATE_WAITING;
+ lk.unlock();
+
+ WaitForIdle(kWaitMs, mDurationMs);
+ Release();
+ }
+}
+
+} // namespace pixel
+} // namespace impl
+} // namespace power
+} // namespace hardware
+} // namespace google
+} // namespace aidl
diff --git a/aidl/power-libperfmgr/InteractionHandler.h b/aidl/power-libperfmgr/InteractionHandler.h
new file mode 100644
index 0000000..c88f7d4
--- /dev/null
+++ b/aidl/power-libperfmgr/InteractionHandler.h
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+
+#pragma once
+
+#include
+#include
+#include
+#include
+#include
+
+namespace aidl {
+namespace google {
+namespace hardware {
+namespace power {
+namespace impl {
+namespace pixel {
+
+enum InteractionState {
+ INTERACTION_STATE_UNINITIALIZED,
+ INTERACTION_STATE_IDLE,
+ INTERACTION_STATE_INTERACTION,
+ INTERACTION_STATE_WAITING,
+};
+
+class InteractionHandler {
+ public:
+ InteractionHandler();
+ ~InteractionHandler();
+ bool Init();
+ void Exit();
+ void Acquire(int32_t duration);
+
+ private:
+ void Release();
+ void WaitForIdle(int32_t wait_ms, int32_t timeout_ms);
+ void AbortWaitLocked();
+ void Routine();
+
+ void PerfLock();
+ void PerfRel();
+
+ enum InteractionState mState;
+ int mIdleFd;
+ int mEventFd;
+ int32_t mDurationMs;
+ struct timespec mLastTimespec;
+ std::unique_ptr mThread;
+ std::mutex mLock;
+ std::condition_variable mCond;
+};
+
+} // namespace pixel
+} // namespace impl
+} // namespace power
+} // namespace hardware
+} // namespace google
+} // namespace aidl
diff --git a/aidl/power-libperfmgr/Power.cpp b/aidl/power-libperfmgr/Power.cpp
new file mode 100644
index 0000000..a25ec94
--- /dev/null
+++ b/aidl/power-libperfmgr/Power.cpp
@@ -0,0 +1,231 @@
+/*
+ * Copyright (C) 2020 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 "powerhal-libperfmgr"
+
+#include "Power.h"
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+
+#include "PowerHintSession.h"
+#include "PowerSessionManager.h"
+
+namespace aidl {
+namespace google {
+namespace hardware {
+namespace power {
+namespace impl {
+namespace pixel {
+
+using ::aidl::google::hardware::power::impl::pixel::PowerHintSession;
+using ::android::perfmgr::HintManager;
+
+constexpr char kPowerHalStateProp[] = "vendor.powerhal.state";
+constexpr char kPowerHalAudioProp[] = "vendor.powerhal.audio";
+constexpr char kPowerHalRenderingProp[] = "vendor.powerhal.rendering";
+
+Power::Power()
+ : mInteractionHandler(nullptr),
+ mSustainedPerfModeOn(false) {
+ mInteractionHandler = std::make_unique();
+ mInteractionHandler->Init();
+
+ std::string state = ::android::base::GetProperty(kPowerHalStateProp, "");
+ if (state == "SUSTAINED_PERFORMANCE") {
+ LOG(INFO) << "Initialize with SUSTAINED_PERFORMANCE on";
+ HintManager::GetInstance()->DoHint("SUSTAINED_PERFORMANCE");
+ mSustainedPerfModeOn = true;
+ } else {
+ LOG(INFO) << "Initialize PowerHAL";
+ }
+
+ state = ::android::base::GetProperty(kPowerHalAudioProp, "");
+ if (state == "AUDIO_STREAMING_LOW_LATENCY") {
+ LOG(INFO) << "Initialize with AUDIO_LOW_LATENCY on";
+ HintManager::GetInstance()->DoHint(state);
+ }
+
+ state = ::android::base::GetProperty(kPowerHalRenderingProp, "");
+ if (state == "EXPENSIVE_RENDERING") {
+ LOG(INFO) << "Initialize with EXPENSIVE_RENDERING on";
+ HintManager::GetInstance()->DoHint("EXPENSIVE_RENDERING");
+ }
+}
+
+ndk::ScopedAStatus Power::setMode(Mode type, bool enabled) {
+ LOG(DEBUG) << "Power setMode: " << toString(type) << " to: " << enabled;
+ if (HintManager::GetInstance()->GetAdpfProfile() &&
+ HintManager::GetInstance()->GetAdpfProfile()->mReportingRateLimitNs > 0) {
+ PowerSessionManager::getInstance()->updateHintMode(toString(type), enabled);
+ }
+
+ switch (type) {
+ case Mode::SUSTAINED_PERFORMANCE:
+ if (enabled) {
+ HintManager::GetInstance()->DoHint("SUSTAINED_PERFORMANCE");
+ }
+ mSustainedPerfModeOn = true;
+ break;
+ case Mode::LAUNCH:
+ if (mSustainedPerfModeOn) {
+ break;
+ }
+ [[fallthrough]];
+ case Mode::DOUBLE_TAP_TO_WAKE:
+ [[fallthrough]];
+ case Mode::FIXED_PERFORMANCE:
+ [[fallthrough]];
+ case Mode::EXPENSIVE_RENDERING:
+ [[fallthrough]];
+ case Mode::INTERACTIVE:
+ [[fallthrough]];
+ case Mode::DEVICE_IDLE:
+ [[fallthrough]];
+ case Mode::DISPLAY_INACTIVE:
+ [[fallthrough]];
+ case Mode::AUDIO_STREAMING_LOW_LATENCY:
+ [[fallthrough]];
+ case Mode::GAME_LOADING:
+ [[fallthrough]];
+ default:
+ if (enabled) {
+ HintManager::GetInstance()->DoHint(toString(type));
+ } else {
+ HintManager::GetInstance()->EndHint(toString(type));
+ }
+ break;
+ }
+
+ return ndk::ScopedAStatus::ok();
+}
+
+ndk::ScopedAStatus Power::isModeSupported(Mode type, bool *_aidl_return) {
+
+ bool supported = HintManager::GetInstance()->IsHintSupported(toString(type));
+ LOG(INFO) << "Power mode " << toString(type) << " isModeSupported: " << supported;
+ *_aidl_return = supported;
+ return ndk::ScopedAStatus::ok();
+}
+
+ndk::ScopedAStatus Power::setBoost(Boost type, int32_t durationMs) {
+ LOG(DEBUG) << "Power setBoost: " << toString(type) << " duration: " << durationMs;
+ if (HintManager::GetInstance()->GetAdpfProfile() &&
+ HintManager::GetInstance()->GetAdpfProfile()->mReportingRateLimitNs > 0) {
+ PowerSessionManager::getInstance()->updateHintBoost(toString(type), durationMs);
+ }
+ switch (type) {
+ case Boost::INTERACTION:
+ if (mSustainedPerfModeOn) {
+ break;
+ }
+ mInteractionHandler->Acquire(durationMs);
+ break;
+ case Boost::DISPLAY_UPDATE_IMMINENT:
+ [[fallthrough]];
+ case Boost::ML_ACC:
+ [[fallthrough]];
+ case Boost::AUDIO_LAUNCH:
+ [[fallthrough]];
+ default:
+ if (mSustainedPerfModeOn) {
+ break;
+ }
+ if (durationMs > 0) {
+ HintManager::GetInstance()->DoHint(toString(type),
+ std::chrono::milliseconds(durationMs));
+ } else if (durationMs == 0) {
+ HintManager::GetInstance()->DoHint(toString(type));
+ } else {
+ HintManager::GetInstance()->EndHint(toString(type));
+ }
+ break;
+ }
+
+ return ndk::ScopedAStatus::ok();
+}
+
+ndk::ScopedAStatus Power::isBoostSupported(Boost type, bool *_aidl_return) {
+ bool supported = HintManager::GetInstance()->IsHintSupported(toString(type));
+ LOG(INFO) << "Power boost " << toString(type) << " isBoostSupported: " << supported;
+ *_aidl_return = supported;
+ return ndk::ScopedAStatus::ok();
+}
+
+constexpr const char *boolToString(bool b) {
+ return b ? "true" : "false";
+}
+
+binder_status_t Power::dump(int fd, const char **, uint32_t) {
+ std::string buf(::android::base::StringPrintf(
+ "HintManager Running: %s\n"
+ "SustainedPerformanceMode: %s\n",
+ boolToString(HintManager::GetInstance()->IsRunning()),
+ boolToString(mSustainedPerfModeOn)));
+ // Dump nodes through libperfmgr
+ HintManager::GetInstance()->DumpToFd(fd);
+ PowerSessionManager::getInstance()->dumpToFd(fd);
+ if (!::android::base::WriteStringToFd(buf, fd)) {
+ PLOG(ERROR) << "Failed to dump state to fd";
+ }
+ fsync(fd);
+ return STATUS_OK;
+}
+
+ndk::ScopedAStatus Power::createHintSession(int32_t tgid, int32_t uid,
+ const std::vector &threadIds,
+ int64_t durationNanos,
+ std::shared_ptr *_aidl_return) {
+ if (!HintManager::GetInstance()->GetAdpfProfile() ||
+ HintManager::GetInstance()->GetAdpfProfile()->mReportingRateLimitNs <= 0) {
+ *_aidl_return = nullptr;
+ return ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION);
+ }
+ if (threadIds.size() == 0) {
+ LOG(ERROR) << "Error: threadIds.size() shouldn't be " << threadIds.size();
+ *_aidl_return = nullptr;
+ return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
+ }
+ std::shared_ptr session = ndk::SharedRefBase::make(
+ tgid, uid, threadIds, durationNanos);
+ *_aidl_return = session;
+ return ndk::ScopedAStatus::ok();
+}
+
+ndk::ScopedAStatus Power::getHintSessionPreferredRate(int64_t *outNanoseconds) {
+ *outNanoseconds = HintManager::GetInstance()->GetAdpfProfile()
+ ? HintManager::GetInstance()->GetAdpfProfile()->mReportingRateLimitNs
+ : 0;
+ if (*outNanoseconds <= 0) {
+ return ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION);
+ }
+
+ return ndk::ScopedAStatus::ok();
+}
+
+} // namespace pixel
+} // namespace impl
+} // namespace power
+} // namespace hardware
+} // namespace google
+} // namespace aidl
diff --git a/aidl/power-libperfmgr/Power.h b/aidl/power-libperfmgr/Power.h
new file mode 100644
index 0000000..c5bb2a8
--- /dev/null
+++ b/aidl/power-libperfmgr/Power.h
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2020 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.
+ */
+
+#pragma once
+
+#include
+
+#include
+#include
+#include
+
+#include "InteractionHandler.h"
+
+namespace aidl {
+namespace google {
+namespace hardware {
+namespace power {
+namespace impl {
+namespace pixel {
+
+using ::aidl::android::hardware::power::Boost;
+using ::aidl::android::hardware::power::IPowerHintSession;
+using ::aidl::android::hardware::power::Mode;
+
+class Power : public ::aidl::android::hardware::power::BnPower {
+ public:
+ Power();
+ ndk::ScopedAStatus setMode(Mode type, bool enabled) override;
+ ndk::ScopedAStatus isModeSupported(Mode type, bool *_aidl_return) override;
+ ndk::ScopedAStatus setBoost(Boost type, int32_t durationMs) override;
+ ndk::ScopedAStatus isBoostSupported(Boost type, bool *_aidl_return) override;
+ ndk::ScopedAStatus createHintSession(int32_t tgid, int32_t uid,
+ const std::vector &threadIds,
+ int64_t durationNanos,
+ std::shared_ptr *_aidl_return) override;
+ ndk::ScopedAStatus getHintSessionPreferredRate(int64_t *outNanoseconds) override;
+ binder_status_t dump(int fd, const char **args, uint32_t numArgs) override;
+
+ private:
+ std::unique_ptr mInteractionHandler;
+ std::atomic mSustainedPerfModeOn;
+};
+
+} // namespace pixel
+} // namespace impl
+} // namespace power
+} // namespace hardware
+} // namespace google
+} // namespace aidl
diff --git a/aidl/power-libperfmgr/PowerExt.cpp b/aidl/power-libperfmgr/PowerExt.cpp
new file mode 100644
index 0000000..56ad291
--- /dev/null
+++ b/aidl/power-libperfmgr/PowerExt.cpp
@@ -0,0 +1,95 @@
+/*
+ * Copyright (C) 2020 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.power-service.spaced.ext-libperfmgr"
+
+#include "PowerExt.h"
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+
+#include "PowerSessionManager.h"
+
+namespace aidl {
+namespace google {
+namespace hardware {
+namespace power {
+namespace impl {
+namespace pixel {
+
+using ::android::perfmgr::HintManager;
+
+ndk::ScopedAStatus PowerExt::setMode(const std::string &mode, bool enabled) {
+ LOG(DEBUG) << "PowerExt setMode: " << mode << " to: " << enabled;
+
+ if (enabled) {
+ HintManager::GetInstance()->DoHint(mode);
+ } else {
+ HintManager::GetInstance()->EndHint(mode);
+ }
+ if (HintManager::GetInstance()->GetAdpfProfile() &&
+ HintManager::GetInstance()->GetAdpfProfile()->mReportingRateLimitNs > 0) {
+ PowerSessionManager::getInstance()->updateHintMode(mode, enabled);
+ }
+
+ return ndk::ScopedAStatus::ok();
+}
+
+ndk::ScopedAStatus PowerExt::isModeSupported(const std::string &mode, bool *_aidl_return) {
+ bool supported = HintManager::GetInstance()->IsHintSupported(mode);
+ LOG(INFO) << "PowerExt mode " << mode << " isModeSupported: " << supported;
+ *_aidl_return = supported;
+ return ndk::ScopedAStatus::ok();
+}
+
+ndk::ScopedAStatus PowerExt::setBoost(const std::string &boost, int32_t durationMs) {
+ LOG(DEBUG) << "PowerExt setBoost: " << boost << " duration: " << durationMs;
+ if (HintManager::GetInstance()->GetAdpfProfile() &&
+ HintManager::GetInstance()->GetAdpfProfile()->mReportingRateLimitNs > 0) {
+ PowerSessionManager::getInstance()->updateHintBoost(boost, durationMs);
+ }
+
+ if (durationMs > 0) {
+ HintManager::GetInstance()->DoHint(boost, std::chrono::milliseconds(durationMs));
+ } else if (durationMs == 0) {
+ HintManager::GetInstance()->DoHint(boost);
+ } else {
+ HintManager::GetInstance()->EndHint(boost);
+ }
+
+ return ndk::ScopedAStatus::ok();
+}
+
+ndk::ScopedAStatus PowerExt::isBoostSupported(const std::string &boost, bool *_aidl_return) {
+ bool supported = HintManager::GetInstance()->IsHintSupported(boost);
+ LOG(INFO) << "PowerExt boost " << boost << " isBoostSupported: " << supported;
+ *_aidl_return = supported;
+ return ndk::ScopedAStatus::ok();
+}
+
+} // namespace pixel
+} // namespace impl
+} // namespace power
+} // namespace hardware
+} // namespace google
+} // namespace aidl
diff --git a/aidl/power-libperfmgr/PowerExt.h b/aidl/power-libperfmgr/PowerExt.h
new file mode 100644
index 0000000..bed12b5
--- /dev/null
+++ b/aidl/power-libperfmgr/PowerExt.h
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2020 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.
+ */
+
+#pragma once
+
+#include
+#include
+#include
+
+#include
+#include
+
+namespace aidl {
+namespace google {
+namespace hardware {
+namespace power {
+namespace impl {
+namespace pixel {
+
+class PowerExt : public ::aidl::google::hardware::power::extension::pixel::BnPowerExt {
+ public:
+ PowerExt() {}
+ ndk::ScopedAStatus setMode(const std::string &mode, bool enabled) override;
+ ndk::ScopedAStatus isModeSupported(const std::string &mode, bool *_aidl_return) override;
+ ndk::ScopedAStatus setBoost(const std::string &boost, int32_t durationMs) override;
+ ndk::ScopedAStatus isBoostSupported(const std::string &boost, bool *_aidl_return) override;
+
+ private:
+};
+
+} // namespace pixel
+} // namespace impl
+} // namespace power
+} // namespace hardware
+} // namespace google
+} // namespace aidl
diff --git a/aidl/power-libperfmgr/PowerHintSession.cpp b/aidl/power-libperfmgr/PowerHintSession.cpp
new file mode 100644
index 0000000..eadc4cf
--- /dev/null
+++ b/aidl/power-libperfmgr/PowerHintSession.cpp
@@ -0,0 +1,529 @@
+/*
+ * Copyright 2021 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 "powerhal-libperfmgr"
+#define ATRACE_TAG (ATRACE_TAG_POWER | ATRACE_TAG_HAL)
+
+#include "PowerHintSession.h"
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+
+#include "PowerSessionManager.h"
+
+namespace aidl {
+namespace google {
+namespace hardware {
+namespace power {
+namespace impl {
+namespace pixel {
+
+using ::android::base::StringPrintf;
+using ::android::perfmgr::AdpfConfig;
+using ::android::perfmgr::HintManager;
+using std::chrono::duration_cast;
+using std::chrono::nanoseconds;
+
+namespace {
+
+static inline int64_t ns_to_100us(int64_t ns) {
+ return ns / 100000;
+}
+
+} // namespace
+
+int64_t PowerHintSession::convertWorkDurationToBoostByPid(
+ const std::vector &actualDurations) {
+ std::shared_ptr adpfConfig = HintManager::GetInstance()->GetAdpfProfile();
+ const nanoseconds &targetDuration = mDescriptor->duration;
+ int64_t &integral_error = mDescriptor->integral_error;
+ int64_t &previous_error = mDescriptor->previous_error;
+ uint64_t samplingWindowP = adpfConfig->mSamplingWindowP;
+ uint64_t samplingWindowI = adpfConfig->mSamplingWindowI;
+ uint64_t samplingWindowD = adpfConfig->mSamplingWindowD;
+ int64_t targetDurationNanos = (int64_t)targetDuration.count();
+ int64_t length = actualDurations.size();
+ int64_t p_start =
+ samplingWindowP == 0 || samplingWindowP > length ? 0 : length - samplingWindowP;
+ int64_t i_start =
+ samplingWindowI == 0 || samplingWindowI > length ? 0 : length - samplingWindowI;
+ int64_t d_start =
+ samplingWindowD == 0 || samplingWindowD > length ? 0 : length - samplingWindowD;
+ int64_t dt = ns_to_100us(targetDurationNanos);
+ int64_t err_sum = 0;
+ int64_t derivative_sum = 0;
+ for (int64_t i = std::min({p_start, i_start, d_start}); i < length; i++) {
+ int64_t actualDurationNanos = actualDurations[i].durationNanos;
+ if (std::abs(actualDurationNanos) > targetDurationNanos * 20) {
+ ALOGW("The actual duration is way far from the target (%" PRId64 " >> %" PRId64 ")",
+ actualDurationNanos, targetDurationNanos);
+ }
+ // PID control algorithm
+ int64_t error = ns_to_100us(actualDurationNanos - targetDurationNanos);
+ if (i >= d_start) {
+ derivative_sum += error - previous_error;
+ }
+ if (i >= p_start) {
+ err_sum += error;
+ }
+ if (i >= i_start) {
+ integral_error += error * dt;
+ integral_error = std::min(adpfConfig->getPidIHighDivI(), integral_error);
+ integral_error = std::max(adpfConfig->getPidILowDivI(), integral_error);
+ }
+ previous_error = error;
+ }
+ int64_t pOut = static_cast((err_sum > 0 ? adpfConfig->mPidPo : adpfConfig->mPidPu) *
+ err_sum / (length - p_start));
+ int64_t iOut = static_cast(adpfConfig->mPidI * integral_error);
+ int64_t dOut =
+ static_cast((derivative_sum > 0 ? adpfConfig->mPidDo : adpfConfig->mPidDu) *
+ derivative_sum / dt / (length - d_start));
+
+ int64_t output = pOut + iOut + dOut;
+ if (ATRACE_ENABLED()) {
+ traceSessionVal("pid.err", err_sum / (length - p_start));
+ traceSessionVal("pid.integral", integral_error);
+ traceSessionVal("pid.derivative", derivative_sum / dt / (length - d_start));
+ traceSessionVal("pid.pOut", pOut);
+ traceSessionVal("pid.iOut", iOut);
+ traceSessionVal("pid.dOut", dOut);
+ traceSessionVal("pid.output", output);
+ }
+ return output;
+}
+
+PowerHintSession::PowerHintSession(int32_t tgid, int32_t uid, const std::vector &threadIds,
+ int64_t durationNanos)
+ : mStaleTimerHandler(sp::make(this)),
+ mBoostTimerHandler(sp::make(this)) {
+ mDescriptor = new AppHintDesc(tgid, uid, threadIds);
+ mDescriptor->duration = std::chrono::nanoseconds(durationNanos);
+ mIdString = StringPrintf("%" PRId32 "-%" PRId32 "-%" PRIxPTR, mDescriptor->tgid,
+ mDescriptor->uid, reinterpret_cast(this) & 0xffff);
+
+ mPowerManagerHandler = PowerSessionManager::getInstance();
+ mLastUpdatedTime.store(std::chrono::steady_clock::now());
+ if (ATRACE_ENABLED()) {
+ traceSessionVal("target", mDescriptor->duration.count());
+ traceSessionVal("active", mDescriptor->is_active.load());
+ }
+ PowerSessionManager::getInstance()->addPowerSession(this);
+ // init boost
+ sendHint(SessionHint::CPU_LOAD_RESET);
+ ALOGV("PowerHintSession created: %s", mDescriptor->toString().c_str());
+}
+
+PowerHintSession::~PowerHintSession() {
+ close();
+ ALOGV("PowerHintSession deleted: %s", mDescriptor->toString().c_str());
+ if (ATRACE_ENABLED()) {
+ traceSessionVal("target", 0);
+ traceSessionVal("actl_last", 0);
+ traceSessionVal("active", 0);
+ }
+ delete mDescriptor;
+}
+
+void PowerHintSession::traceSessionVal(char const *identifier, int64_t val) const {
+ ATRACE_INT(StringPrintf("adpf.%s-%s", mIdString.c_str(), identifier).c_str(), val);
+}
+
+bool PowerHintSession::isAppSession() {
+ // Check if uid is in range reserved for applications
+ return mDescriptor->uid >= AID_APP_START;
+}
+
+void PowerHintSession::updateUniveralBoostMode() {
+ if (!isAppSession()) {
+ return;
+ }
+ if (ATRACE_ENABLED()) {
+ const std::string tag = StringPrintf("%s:updateUniveralBoostMode()", mIdString.c_str());
+ ATRACE_BEGIN(tag.c_str());
+ }
+ PowerHintMonitor::getInstance()->getLooper()->sendMessage(mPowerManagerHandler, NULL);
+ if (ATRACE_ENABLED()) {
+ ATRACE_END();
+ }
+}
+
+void PowerHintSession::tryToSendPowerHint(std::string hint) {
+ if (!mSupportedHints[hint].has_value()) {
+ mSupportedHints[hint] = HintManager::GetInstance()->IsHintSupported(hint);
+ }
+ if (mSupportedHints[hint].value()) {
+ HintManager::GetInstance()->DoHint(hint);
+ }
+}
+
+int PowerHintSession::setSessionUclampMin(int32_t min, bool resetStale) {
+ {
+ std::lock_guard guard(mSessionLock);
+ mDescriptor->current_min = min;
+ }
+ if (min != 0 && resetStale) {
+ mStaleTimerHandler->updateTimer();
+ }
+ PowerSessionManager::getInstance()->setUclampMin(this, min);
+
+ if (ATRACE_ENABLED()) {
+ traceSessionVal("min", min);
+ }
+ return 0;
+}
+
+int PowerHintSession::getUclampMin() {
+ return mDescriptor->current_min;
+}
+
+void PowerHintSession::dumpToStream(std::ostream &stream) {
+ stream << "ID.Min.Act.Timeout(" << mIdString;
+ stream << ", " << mDescriptor->current_min;
+ stream << ", " << mDescriptor->is_active.load();
+ stream << ", " << isTimeout() << ")";
+}
+
+ndk::ScopedAStatus PowerHintSession::pause() {
+ if (mSessionClosed) {
+ ALOGE("Error: session is dead");
+ return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_STATE);
+ }
+ if (!mDescriptor->is_active.load())
+ return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_STATE);
+ // Reset to default uclamp value.
+ mDescriptor->is_active.store(false);
+ setStale();
+ if (ATRACE_ENABLED()) {
+ traceSessionVal("active", mDescriptor->is_active.load());
+ }
+ updateUniveralBoostMode();
+ PowerSessionManager::getInstance()->removeThreadsFromPowerSession(this);
+ return ndk::ScopedAStatus::ok();
+}
+
+ndk::ScopedAStatus PowerHintSession::resume() {
+ if (mSessionClosed) {
+ ALOGE("Error: session is dead");
+ return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_STATE);
+ }
+ if (mDescriptor->is_active.load())
+ return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_STATE);
+ mDescriptor->is_active.store(true);
+ PowerSessionManager::getInstance()->addThreadsFromPowerSession(this);
+ // resume boost
+ setSessionUclampMin(mDescriptor->current_min);
+ if (ATRACE_ENABLED()) {
+ traceSessionVal("active", mDescriptor->is_active.load());
+ }
+ updateUniveralBoostMode();
+ return ndk::ScopedAStatus::ok();
+}
+
+ndk::ScopedAStatus PowerHintSession::close() {
+ bool sessionClosedExpectedToBe = false;
+ if (!mSessionClosed.compare_exchange_strong(sessionClosedExpectedToBe, true)) {
+ return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_STATE);
+ }
+ // Remove the session from PowerSessionManager first to avoid racing.
+ PowerSessionManager::getInstance()->removePowerSession(this);
+ mStaleTimerHandler->setSessionDead();
+ mBoostTimerHandler->setSessionDead();
+ setSessionUclampMin(0);
+ mDescriptor->is_active.store(false);
+ updateUniveralBoostMode();
+ return ndk::ScopedAStatus::ok();
+}
+
+ndk::ScopedAStatus PowerHintSession::updateTargetWorkDuration(int64_t targetDurationNanos) {
+ if (mSessionClosed) {
+ ALOGE("Error: session is dead");
+ return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_STATE);
+ }
+ if (targetDurationNanos <= 0) {
+ ALOGE("Error: targetDurationNanos(%" PRId64 ") should bigger than 0", targetDurationNanos);
+ return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
+ }
+ targetDurationNanos =
+ targetDurationNanos * HintManager::GetInstance()->GetAdpfProfile()->mTargetTimeFactor;
+ ALOGV("update target duration: %" PRId64 " ns", targetDurationNanos);
+
+ mDescriptor->duration = std::chrono::nanoseconds(targetDurationNanos);
+ if (ATRACE_ENABLED()) {
+ traceSessionVal("target", mDescriptor->duration.count());
+ }
+
+ return ndk::ScopedAStatus::ok();
+}
+
+ndk::ScopedAStatus PowerHintSession::reportActualWorkDuration(
+ const std::vector &actualDurations) {
+ if (mSessionClosed) {
+ ALOGE("Error: session is dead");
+ return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_STATE);
+ }
+ if (mDescriptor->duration.count() == 0LL) {
+ ALOGE("Expect to call updateTargetWorkDuration() first.");
+ return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_STATE);
+ }
+ if (actualDurations.size() == 0) {
+ ALOGE("Error: duration.size() shouldn't be %zu.", actualDurations.size());
+ return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
+ }
+ if (!mDescriptor->is_active.load()) {
+ ALOGE("Error: shouldn't report duration during pause state.");
+ return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_STATE);
+ }
+ std::shared_ptr adpfConfig = HintManager::GetInstance()->GetAdpfProfile();
+ mDescriptor->update_count++;
+ bool isFirstFrame = isTimeout();
+ if (ATRACE_ENABLED()) {
+ traceSessionVal("batch_size", actualDurations.size());
+ traceSessionVal("actl_last", actualDurations.back().durationNanos);
+ traceSessionVal("target", mDescriptor->duration.count());
+ traceSessionVal("hint.count", mDescriptor->update_count);
+ traceSessionVal("hint.overtime",
+ actualDurations.back().durationNanos - mDescriptor->duration.count() > 0);
+ }
+
+ mLastUpdatedTime.store(std::chrono::steady_clock::now());
+ if (isFirstFrame) {
+ if (isAppSession()) {
+ tryToSendPowerHint("ADPF_FIRST_FRAME");
+ }
+ updateUniveralBoostMode();
+ }
+
+ disableTemporaryBoost();
+
+ if (!adpfConfig->mPidOn) {
+ setSessionUclampMin(adpfConfig->mUclampMinHigh);
+ return ndk::ScopedAStatus::ok();
+ }
+
+ int64_t output = convertWorkDurationToBoostByPid(actualDurations);
+
+ /* apply to all the threads in the group */
+ int next_min = std::min(static_cast(adpfConfig->mUclampMinHigh),
+ mDescriptor->current_min + static_cast(output));
+ next_min = std::max(static_cast(adpfConfig->mUclampMinLow), next_min);
+ setSessionUclampMin(next_min);
+
+ return ndk::ScopedAStatus::ok();
+}
+
+ndk::ScopedAStatus PowerHintSession::sendHint(SessionHint hint) {
+ if (mSessionClosed) {
+ ALOGE("Error: session is dead");
+ return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_STATE);
+ }
+ disableTemporaryBoost();
+ std::shared_ptr adpfConfig = HintManager::GetInstance()->GetAdpfProfile();
+ switch (hint) {
+ case SessionHint::CPU_LOAD_UP:
+ mNextUclampMin.store(mDescriptor->current_min);
+ mBoostTimerHandler->updateTimer(mDescriptor->duration * 2);
+ setSessionUclampMin(adpfConfig->mUclampMinHigh);
+ break;
+ case SessionHint::CPU_LOAD_DOWN:
+ setSessionUclampMin(adpfConfig->mUclampMinLow);
+ break;
+ case SessionHint::CPU_LOAD_RESET:
+ mNextUclampMin.store(std::max(adpfConfig->mUclampMinInit,
+ static_cast(mDescriptor->current_min)));
+ mBoostTimerHandler->updateTimer(duration_cast(
+ mDescriptor->duration * adpfConfig->mStaleTimeFactor / 2.0));
+ setSessionUclampMin(adpfConfig->mUclampMinHigh);
+ break;
+ case SessionHint::CPU_LOAD_RESUME:
+ setSessionUclampMin(mDescriptor->current_min);
+ break;
+ default:
+ ALOGE("Error: hint is invalid");
+ return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
+ }
+ tryToSendPowerHint(toString(hint));
+ mLastUpdatedTime.store(std::chrono::steady_clock::now());
+ if (ATRACE_ENABLED()) {
+ mLastHintSent = static_cast(hint);
+ traceSessionVal("session_hint", static_cast(hint));
+ }
+ return ndk::ScopedAStatus::ok();
+}
+
+ndk::ScopedAStatus PowerHintSession::setThreads(const std::vector &threadIds) {
+ if (mSessionClosed) {
+ ALOGE("Error: session is dead");
+ return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_STATE);
+ }
+ if (threadIds.size() == 0) {
+ LOG(ERROR) << "Error: threadIds.size() shouldn't be " << threadIds.size();
+ return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
+ }
+
+ PowerSessionManager::getInstance()->removeThreadsFromPowerSession(this);
+ mDescriptor->threadIds.resize(threadIds.size());
+ std::copy(threadIds.begin(), threadIds.end(), back_inserter(mDescriptor->threadIds));
+ PowerSessionManager::getInstance()->addThreadsFromPowerSession(this);
+ // init boost
+ setSessionUclampMin(HintManager::GetInstance()->GetAdpfProfile()->mUclampMinInit);
+ return ndk::ScopedAStatus::ok();
+}
+
+std::string AppHintDesc::toString() const {
+ std::string out =
+ StringPrintf("session %" PRIxPTR "\n", reinterpret_cast(this) & 0xffff);
+ const int64_t durationNanos = duration.count();
+ out.append(StringPrintf(" duration: %" PRId64 " ns\n", durationNanos));
+ out.append(StringPrintf(" uclamp.min: %d \n", current_min));
+ out.append(StringPrintf(" uid: %d, tgid: %d\n", uid, tgid));
+
+ out.append(" threadIds: [");
+ bool first = true;
+ for (int tid : threadIds) {
+ if (!first) {
+ out.append(", ");
+ }
+ out.append(std::to_string(tid));
+ first = false;
+ }
+ out.append("]\n");
+ return out;
+}
+
+bool PowerHintSession::isActive() {
+ return mDescriptor->is_active.load();
+}
+
+bool PowerHintSession::isTimeout() {
+ auto now = std::chrono::steady_clock::now();
+ time_point staleTime =
+ mLastUpdatedTime.load() +
+ nanoseconds(static_cast(
+ mDescriptor->duration.count() *
+ HintManager::GetInstance()->GetAdpfProfile()->mStaleTimeFactor));
+ return now >= staleTime;
+}
+
+const std::vector &PowerHintSession::getTidList() const {
+ return mDescriptor->threadIds;
+}
+
+bool PowerHintSession::disableTemporaryBoost() {
+ if (ATRACE_ENABLED()) {
+ if (mLastHintSent != -1) {
+ mLastHintSent = -1;
+ traceSessionVal("session_hint", -1);
+ }
+ }
+
+ // replace temporary uclamp_min value with true min
+ std::optional trueMin = mNextUclampMin.load();
+ if (trueMin.has_value()) {
+ std::lock_guard guard(mSessionLock);
+ mDescriptor->current_min = *trueMin;
+ mNextUclampMin.store(std::nullopt);
+ return true;
+ }
+
+ return false;
+}
+
+void PowerHintSession::setStale() {
+ // Make sure any temporary boost is disabled
+ disableTemporaryBoost();
+ // Reset to default uclamp value.
+ PowerSessionManager::getInstance()->setUclampMin(this, 0);
+ // Deliver a task to check if all sessions are inactive.
+ updateUniveralBoostMode();
+ if (ATRACE_ENABLED()) {
+ traceSessionVal("min", 0);
+ }
+}
+
+void PowerHintSession::SessionTimerHandler::updateTimer(nanoseconds delay) {
+ mTimeout.store(steady_clock::now() + delay);
+ {
+ std::lock_guard guard(mMessageLock);
+ sp selfPtr = sp::fromExisting(this);
+ PowerHintMonitor::getInstance()->getLooper()->removeMessages(selfPtr);
+ PowerHintMonitor::getInstance()->getLooper()->sendMessageDelayed(delay.count(), selfPtr,
+ NULL);
+ }
+ if (ATRACE_ENABLED()) {
+ mSession->traceSessionVal(("timer." + mName).c_str(), 0);
+ }
+}
+
+void PowerHintSession::SessionTimerHandler::handleMessage(const Message &) {
+ std::lock_guard guard(mClosedLock);
+ if (mIsSessionDead) {
+ return;
+ }
+ time_point now = steady_clock::now();
+ int64_t next = (mTimeout.load() - now).count();
+ if (next > 0) {
+ // Schedule for the stale timeout check.
+ std::lock_guard guard(mMessageLock);
+ sp selfPtr = sp::fromExisting(this);
+ PowerHintMonitor::getInstance()->getLooper()->removeMessages(selfPtr);
+ PowerHintMonitor::getInstance()->getLooper()->sendMessageDelayed(next, selfPtr, NULL);
+ } else {
+ onTimeout();
+ }
+ if (ATRACE_ENABLED()) {
+ mSession->traceSessionVal(("timer." + mName).c_str(), next > 0 ? 0 : 1);
+ }
+}
+
+void PowerHintSession::SessionTimerHandler::setSessionDead() {
+ std::lock_guard guard(mClosedLock);
+ mIsSessionDead = true;
+ PowerHintMonitor::getInstance()->getLooper()->removeMessages(
+ sp::fromExisting(this));
+}
+
+void PowerHintSession::StaleTimerHandler::updateTimer() {
+ SessionTimerHandler::updateTimer(duration_cast(
+ mSession->mDescriptor->duration *
+ HintManager::GetInstance()->GetAdpfProfile()->mStaleTimeFactor));
+}
+
+void PowerHintSession::StaleTimerHandler::onTimeout() {
+ mSession->setStale();
+}
+
+void PowerHintSession::BoostTimerHandler::onTimeout() {
+ if (mSession->disableTemporaryBoost()) {
+ mSession->setSessionUclampMin(mSession->getUclampMin(), false);
+ }
+}
+
+} // namespace pixel
+} // namespace impl
+} // namespace power
+} // namespace hardware
+} // namespace google
+} // namespace aidl
diff --git a/aidl/power-libperfmgr/PowerHintSession.h b/aidl/power-libperfmgr/PowerHintSession.h
new file mode 100644
index 0000000..e1c2523
--- /dev/null
+++ b/aidl/power-libperfmgr/PowerHintSession.h
@@ -0,0 +1,157 @@
+/*
+ * Copyright 2021 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.
+ */
+
+#pragma once
+
+#include
+#include
+#include
+#include
+#include
+
+#include
+#include
+
+namespace aidl {
+namespace google {
+namespace hardware {
+namespace power {
+namespace impl {
+namespace pixel {
+
+using aidl::android::hardware::power::BnPowerHintSession;
+using aidl::android::hardware::power::SessionHint;
+using aidl::android::hardware::power::WorkDuration;
+using ::android::Message;
+using ::android::MessageHandler;
+using ::android::sp;
+using std::chrono::milliseconds;
+using std::chrono::nanoseconds;
+using std::chrono::steady_clock;
+using std::chrono::time_point;
+
+struct AppHintDesc {
+ AppHintDesc(int32_t tgid, int32_t uid, std::vector threadIds)
+ : tgid(tgid),
+ uid(uid),
+ threadIds(std::move(threadIds)),
+ duration(0LL),
+ current_min(0),
+ is_active(true),
+ update_count(0),
+ integral_error(0),
+ previous_error(0) {}
+ std::string toString() const;
+ const int32_t tgid;
+ const int32_t uid;
+ std::vector threadIds;
+ nanoseconds duration;
+ int current_min;
+ // status
+ std::atomic is_active;
+ // pid
+ uint64_t update_count;
+ int64_t integral_error;
+ int64_t previous_error;
+};
+
+class PowerHintSession : public BnPowerHintSession {
+ public:
+ explicit PowerHintSession(int32_t tgid, int32_t uid, const std::vector &threadIds,
+ int64_t durationNanos);
+ ~PowerHintSession();
+ ndk::ScopedAStatus close() override;
+ ndk::ScopedAStatus pause() override;
+ ndk::ScopedAStatus resume() override;
+ ndk::ScopedAStatus updateTargetWorkDuration(int64_t targetDurationNanos) override;
+ ndk::ScopedAStatus reportActualWorkDuration(
+ const std::vector &actualDurations) override;
+ ndk::ScopedAStatus sendHint(SessionHint hint) override;
+ ndk::ScopedAStatus setThreads(const std::vector &threadIds) override;
+ bool isActive();
+ bool isTimeout();
+ void setStale();
+ // Is this hint session for a user application
+ bool isAppSession();
+ const std::vector &getTidList() const;
+ int getUclampMin();
+ void dumpToStream(std::ostream &stream);
+
+ // Disable any temporary boost and return to normal operation. It does not
+ // reset the actual uclamp value, and relies on the caller to do so, to
+ // prevent double-setting. Returns true if it actually disabled an active boost
+ bool disableTemporaryBoost();
+
+ private:
+ class SessionTimerHandler : public MessageHandler {
+ public:
+ SessionTimerHandler(PowerHintSession *session, std::string name)
+ : mSession(session), mIsSessionDead(false), mName(name) {}
+ void updateTimer(nanoseconds delay);
+ void handleMessage(const Message &message) override;
+ void setSessionDead();
+ virtual void onTimeout() = 0;
+
+ protected:
+ PowerHintSession *mSession;
+ std::mutex mClosedLock;
+ std::mutex mMessageLock;
+ std::atomic> mTimeout;
+ bool mIsSessionDead;
+ const std::string mName;
+ };
+
+ class StaleTimerHandler : public SessionTimerHandler {
+ public:
+ StaleTimerHandler(PowerHintSession *session) : SessionTimerHandler(session, "stale") {}
+ void updateTimer();
+ void onTimeout() override;
+ };
+
+ class BoostTimerHandler : public SessionTimerHandler {
+ public:
+ BoostTimerHandler(PowerHintSession *session) : SessionTimerHandler(session, "boost") {}
+ void onTimeout() override;
+ };
+
+ private:
+ void updateUniveralBoostMode();
+ int setSessionUclampMin(int32_t min, bool resetStale = true);
+ void tryToSendPowerHint(std::string hint);
+ int64_t convertWorkDurationToBoostByPid(const std::vector &actualDurations);
+ void traceSessionVal(char const *identifier, int64_t val) const;
+ AppHintDesc *mDescriptor = nullptr;
+ sp mStaleTimerHandler;
+ sp mBoostTimerHandler;
+ std::atomic> mLastUpdatedTime;
+ sp mPowerManagerHandler;
+ std::mutex mSessionLock;
+ std::atomic mSessionClosed = false;
+ std::string mIdString;
+ // Used when setting a temporary boost value to hold the true boost
+ std::atomic> mNextUclampMin;
+ // To cache the status of whether ADPF hints are supported.
+ std::unordered_map> mSupportedHints;
+ // Last session hint sent, used for logging
+ int mLastHintSent = -1;
+};
+
+} // namespace pixel
+} // namespace impl
+} // namespace power
+} // namespace hardware
+} // namespace google
+} // namespace aidl
diff --git a/aidl/power-libperfmgr/PowerModeExtension.cpp b/aidl/power-libperfmgr/PowerModeExtension.cpp
new file mode 100644
index 0000000..50c5a70
--- /dev/null
+++ b/aidl/power-libperfmgr/PowerModeExtension.cpp
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2020 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.
+ */
+
+#include
+
+namespace aidl {
+namespace google {
+namespace hardware {
+namespace power {
+namespace impl {
+namespace pixel {
+
+using ::aidl::android::hardware::power::Mode;
+
+bool isDeviceSpecificModeSupported(Mode type, bool* _aidl_return) {
+ (void) type;
+ (void) _aidl_return;
+ return false;
+}
+
+bool setDeviceSpecificMode(Mode type, bool enabled) {
+ (void) type;
+ (void) enabled;
+ return false;
+}
+
+} // namespace pixel
+} // namespace impl
+} // namespace power
+} // namespace hardware
+} // namespace google
+} // namespace aidl
diff --git a/aidl/power-libperfmgr/PowerSessionManager.cpp b/aidl/power-libperfmgr/PowerSessionManager.cpp
new file mode 100644
index 0000000..2d2aad2
--- /dev/null
+++ b/aidl/power-libperfmgr/PowerSessionManager.cpp
@@ -0,0 +1,262 @@
+/*
+ * Copyright 2021 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 "powerhal-libperfmgr"
+#define ATRACE_TAG (ATRACE_TAG_POWER | ATRACE_TAG_HAL)
+
+#include "PowerSessionManager.h"
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+namespace aidl {
+namespace google {
+namespace hardware {
+namespace power {
+namespace impl {
+namespace pixel {
+
+using ::android::perfmgr::AdpfConfig;
+using ::android::perfmgr::HintManager;
+
+namespace {
+/* there is no glibc or bionic wrapper */
+struct sched_attr {
+ __u32 size;
+ __u32 sched_policy;
+ __u64 sched_flags;
+ __s32 sched_nice;
+ __u32 sched_priority;
+ __u64 sched_runtime;
+ __u64 sched_deadline;
+ __u64 sched_period;
+ __u32 sched_util_min;
+ __u32 sched_util_max;
+};
+
+static int sched_setattr(int pid, struct sched_attr *attr, unsigned int flags) {
+ if (!HintManager::GetInstance()->GetAdpfProfile()->mUclampMinOn) {
+ ALOGV("PowerSessionManager:%s: skip", __func__);
+ return 0;
+ }
+ return syscall(__NR_sched_setattr, pid, attr, flags);
+}
+
+static void set_uclamp_min(int tid, int min) {
+ static constexpr int32_t kMaxUclampValue = 1024;
+ min = std::max(0, min);
+ min = std::min(min, kMaxUclampValue);
+
+ sched_attr attr = {};
+ attr.size = sizeof(attr);
+
+ attr.sched_flags = (SCHED_FLAG_KEEP_ALL | SCHED_FLAG_UTIL_CLAMP_MIN);
+ attr.sched_util_min = min;
+
+ int ret = sched_setattr(tid, &attr, 0);
+ if (ret) {
+ if (errno == ESRCH) {
+ ALOGV("sched_setattr failed for thread %d, err=%d", tid, errno);
+ } else {
+ ALOGW("sched_setattr failed for thread %d, err=%d", tid, errno);
+ }
+ }
+}
+} // namespace
+
+void PowerSessionManager::updateHintMode(const std::string &mode, bool enabled) {
+ ALOGV("PowerSessionManager::updateHintMode: mode: %s, enabled: %d", mode.c_str(), enabled);
+ if (enabled && mode.compare(0, 8, "REFRESH_") == 0) {
+ if (mode.compare("REFRESH_120FPS") == 0) {
+ mDisplayRefreshRate = 120;
+ } else if (mode.compare("REFRESH_90FPS") == 0) {
+ mDisplayRefreshRate = 90;
+ } else if (mode.compare("REFRESH_60FPS") == 0) {
+ mDisplayRefreshRate = 60;
+ }
+ }
+ if (HintManager::GetInstance()->GetAdpfProfile()) {
+ HintManager::GetInstance()->SetAdpfProfile(mode);
+ }
+}
+
+void PowerSessionManager::updateHintBoost(const std::string &boost, int32_t durationMs) {
+ ATRACE_CALL();
+ ALOGV("PowerSessionManager::updateHintBoost: boost: %s, durationMs: %d", boost.c_str(),
+ durationMs);
+}
+
+int PowerSessionManager::getDisplayRefreshRate() {
+ return mDisplayRefreshRate;
+}
+
+void PowerSessionManager::addPowerSession(PowerHintSession *session) {
+ std::lock_guard guard(mLock);
+ mSessions.insert(session);
+ addThreadsFromPowerSessionLocked(session);
+}
+
+void PowerSessionManager::removePowerSession(PowerHintSession *session) {
+ std::lock_guard guard(mLock);
+ mSessions.erase(session);
+ removeThreadsFromPowerSessionLocked(session);
+}
+
+void PowerSessionManager::addThreadsFromPowerSession(PowerHintSession *session) {
+ std::lock_guard guard(mLock);
+ addThreadsFromPowerSessionLocked(session);
+}
+
+void PowerSessionManager::addThreadsFromPowerSessionLocked(PowerHintSession *session) {
+ for (auto t : session->getTidList()) {
+ if (mTidSessionListMap[t].empty()) {
+ if (!SetTaskProfiles(t, {"ResetUclampGrp"})) {
+ ALOGW("Failed to set ResetUclampGrp task profile for tid:%d", t);
+ }
+ }
+ mTidSessionListMap[t].insert(session);
+ }
+}
+
+void PowerSessionManager::removeThreadsFromPowerSession(PowerHintSession *session) {
+ std::lock_guard guard(mLock);
+ removeThreadsFromPowerSessionLocked(session);
+}
+
+void PowerSessionManager::removeThreadsFromPowerSessionLocked(PowerHintSession *session) {
+ for (auto t : session->getTidList()) {
+ size_t cnt = mTidSessionListMap[t].erase(session);
+ if (cnt != 0 && mTidSessionListMap[t].empty()) {
+ if (!SetTaskProfiles(t, {"NoResetUclampGrp"})) {
+ ALOGW("Failed to set NoResetUclampGrp task profile for tid:%d", t);
+ }
+ }
+ }
+}
+
+void PowerSessionManager::setUclampMin(PowerHintSession *session, int val) {
+ std::lock_guard guard(mLock);
+ setUclampMinLocked(session, val);
+}
+
+void PowerSessionManager::setUclampMinLocked(PowerHintSession *session, int val) {
+ for (auto t : session->getTidList()) {
+ // Get thex max uclamp.min across sessions which include the tid.
+ int tidMax = 0;
+ for (PowerHintSession *s : mTidSessionListMap[t]) {
+ if (!s->isActive() || s->isTimeout())
+ continue;
+ tidMax = std::max(tidMax, s->getUclampMin());
+ }
+ set_uclamp_min(t, std::max(val, tidMax));
+ }
+}
+
+std::optional PowerSessionManager::isAnyAppSessionActive() {
+ std::lock_guard guard(mLock);
+ bool active = false;
+ for (PowerHintSession *s : mSessions) {
+ // session active and not stale is actually active.
+ if (s->isActive() && !s->isTimeout() && s->isAppSession()) {
+ active = true;
+ break;
+ }
+ }
+ if (active == mActive) {
+ return std::nullopt;
+ } else {
+ mActive = active;
+ }
+
+ return active;
+}
+
+void PowerSessionManager::handleMessage(const Message &) {
+ auto active = isAnyAppSessionActive();
+ if (!active.has_value()) {
+ return;
+ }
+ if (active.value()) {
+ disableSystemTopAppBoost();
+ } else {
+ enableSystemTopAppBoost();
+ }
+}
+
+void PowerSessionManager::dumpToFd(int fd) {
+ std::ostringstream dump_buf;
+ std::lock_guard guard(mLock);
+ dump_buf << "========== Begin PowerSessionManager ADPF list ==========\n";
+ for (PowerHintSession *s : mSessions) {
+ s->dumpToStream(dump_buf);
+ dump_buf << " Tid:Ref[";
+ for (size_t i = 0, len = s->getTidList().size(); i < len; i++) {
+ int t = s->getTidList()[i];
+ dump_buf << t << ":" << mTidSessionListMap[t].size();
+ if (i < len - 1) {
+ dump_buf << ", ";
+ }
+ }
+ dump_buf << "]\n";
+ }
+ dump_buf << "========== End PowerSessionManager ADPF list ==========\n";
+ if (!::android::base::WriteStringToFd(dump_buf.str(), fd)) {
+ ALOGE("Failed to dump one of session list to fd:%d", fd);
+ }
+}
+
+void PowerSessionManager::enableSystemTopAppBoost() {
+ if (HintManager::GetInstance()->IsHintSupported(kDisableBoostHintName)) {
+ ALOGV("PowerSessionManager::enableSystemTopAppBoost!!");
+ HintManager::GetInstance()->EndHint(kDisableBoostHintName);
+ }
+}
+
+void PowerSessionManager::disableSystemTopAppBoost() {
+ if (HintManager::GetInstance()->IsHintSupported(kDisableBoostHintName)) {
+ ALOGV("PowerSessionManager::disableSystemTopAppBoost!!");
+ HintManager::GetInstance()->DoHint(kDisableBoostHintName);
+ }
+}
+
+// =========== PowerHintMonitor implementation start from here ===========
+void PowerHintMonitor::start() {
+ if (!isRunning()) {
+ run("PowerHintMonitor", ::android::PRIORITY_HIGHEST);
+ }
+}
+
+bool PowerHintMonitor::threadLoop() {
+ while (true) {
+ mLooper->pollOnce(-1);
+ }
+ return true;
+}
+
+sp PowerHintMonitor::getLooper() {
+ return mLooper;
+}
+
+} // namespace pixel
+} // namespace impl
+} // namespace power
+} // namespace hardware
+} // namespace google
+} // namespace aidl
diff --git a/aidl/power-libperfmgr/PowerSessionManager.h b/aidl/power-libperfmgr/PowerSessionManager.h
new file mode 100644
index 0000000..7c74039
--- /dev/null
+++ b/aidl/power-libperfmgr/PowerSessionManager.h
@@ -0,0 +1,116 @@
+/*
+ * Copyright 2021 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.
+ */
+
+#pragma once
+
+#include
+#include
+#include
+
+#include
+#include
+#include
+
+#include "PowerHintSession.h"
+
+namespace aidl {
+namespace google {
+namespace hardware {
+namespace power {
+namespace impl {
+namespace pixel {
+
+using ::android::Looper;
+using ::android::Message;
+using ::android::MessageHandler;
+using ::android::Thread;
+using ::android::perfmgr::HintManager;
+
+constexpr char kPowerHalAdpfDisableTopAppBoost[] = "vendor.powerhal.adpf.disable.hint";
+
+class PowerSessionManager : public MessageHandler {
+ public:
+ // current hint info
+ void updateHintMode(const std::string &mode, bool enabled);
+ void updateHintBoost(const std::string &boost, int32_t durationMs);
+ int getDisplayRefreshRate();
+ // monitoring session status
+ void addPowerSession(PowerHintSession *session);
+ void removePowerSession(PowerHintSession *session);
+ void addThreadsFromPowerSession(PowerHintSession *session);
+ void addThreadsFromPowerSessionLocked(PowerHintSession *session);
+ void removeThreadsFromPowerSession(PowerHintSession *session);
+ void removeThreadsFromPowerSessionLocked(PowerHintSession *session);
+ void setUclampMin(PowerHintSession *session, int min);
+ void setUclampMinLocked(PowerHintSession *session, int min);
+ void handleMessage(const Message &message) override;
+ void dumpToFd(int fd);
+
+ // Singleton
+ static sp getInstance() {
+ static sp instance = new PowerSessionManager();
+ return instance;
+ }
+
+ private:
+ std::optional isAnyAppSessionActive();
+ void disableSystemTopAppBoost();
+ void enableSystemTopAppBoost();
+ const std::string kDisableBoostHintName;
+
+ std::unordered_set mSessions; // protected by mLock
+ std::unordered_map> mTidSessionListMap;
+ bool mActive; // protected by mLock
+ /**
+ * mLock to pretect the above data objects opertions.
+ **/
+ std::mutex mLock;
+ int mDisplayRefreshRate;
+ // Singleton
+ PowerSessionManager()
+ : kDisableBoostHintName(::android::base::GetProperty(kPowerHalAdpfDisableTopAppBoost,
+ "ADPF_DISABLE_TA_BOOST")),
+ mActive(false),
+ mDisplayRefreshRate(60) {}
+ PowerSessionManager(PowerSessionManager const &) = delete;
+ void operator=(PowerSessionManager const &) = delete;
+};
+
+class PowerHintMonitor : public Thread {
+ public:
+ void start();
+ bool threadLoop() override;
+ sp getLooper();
+ // Singleton
+ static sp getInstance() {
+ static sp instance = new PowerHintMonitor();
+ return instance;
+ }
+ PowerHintMonitor(PowerHintMonitor const &) = delete;
+ void operator=(PowerHintMonitor const &) = delete;
+
+ private:
+ sp mLooper;
+ // Singleton
+ PowerHintMonitor() : Thread(false), mLooper(new Looper(true)) {}
+};
+
+} // namespace pixel
+} // namespace impl
+} // namespace power
+} // namespace hardware
+} // namespace google
+} // namespace aidl
diff --git a/aidl/power-libperfmgr/android.hardware.power-service.spaced-libperfmgr.rc b/aidl/power-libperfmgr/android.hardware.power-service.spaced-libperfmgr.rc
new file mode 100644
index 0000000..5eaae37
--- /dev/null
+++ b/aidl/power-libperfmgr/android.hardware.power-service.spaced-libperfmgr.rc
@@ -0,0 +1,32 @@
+service vendor.power-hal-aidl /vendor/bin/hw/android.hardware.power-service.spaced-libperfmgr
+ class hal
+ user root
+ group system
+ priority -20
+
+on late-fs
+ start vendor.power-hal-aidl
+
+# Restart powerHAL when framework died
+on property:init.svc.zygote=restarting && property:vendor.powerhal.state=*
+ setprop vendor.powerhal.state ""
+ setprop vendor.powerhal.audio ""
+ setprop vendor.powerhal.rendering ""
+ restart vendor.power-hal-aidl
+
+# Clean up after b/163539793 resolved
+on property:vendor.powerhal.dalvik.vm.dex2oat-threads=*
+ setprop dalvik.vm.dex2oat-threads ${vendor.powerhal.dalvik.vm.dex2oat-threads}
+ setprop dalvik.vm.restore-dex2oat-threads ${vendor.powerhal.dalvik.vm.dex2oat-threads}
+
+on property:vendor.powerhal.dalvik.vm.dex2oat-cpu-set=*
+ setprop dalvik.vm.dex2oat-cpu-set ${vendor.powerhal.dalvik.vm.dex2oat-cpu-set}
+ setprop dalvik.vm.restore-dex2oat-cpu-set ${vendor.powerhal.dalvik.vm.dex2oat-cpu-set}
+
+# Restart powerHAL when debug property set
+on property:ro.debuggable=1 && property:vendor.powerhal.config.debug=*
+ restart vendor.power-hal-aidl
+
+on property:persist.vendor.powerhal.config.debug=*
+ setprop vendor.powerhal.config.debug ${persist.vendor.powerhal.config.debug}
+
diff --git a/aidl/power-libperfmgr/android.hardware.power-service.spaced.xml b/aidl/power-libperfmgr/android.hardware.power-service.spaced.xml
new file mode 100644
index 0000000..f5dd6b9
--- /dev/null
+++ b/aidl/power-libperfmgr/android.hardware.power-service.spaced.xml
@@ -0,0 +1,7 @@
+
+
+ android.hardware.power
+ 4
+ IPower/default
+
+
diff --git a/aidl/power-libperfmgr/service.cpp b/aidl/power-libperfmgr/service.cpp
new file mode 100644
index 0000000..3babb06
--- /dev/null
+++ b/aidl/power-libperfmgr/service.cpp
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2020 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 "powerhal-libperfmgr"
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+
+#include "Power.h"
+#include "PowerExt.h"
+#include "PowerSessionManager.h"
+
+using aidl::google::hardware::power::impl::pixel::Power;
+using aidl::google::hardware::power::impl::pixel::PowerExt;
+using aidl::google::hardware::power::impl::pixel::PowerHintMonitor;
+using aidl::google::hardware::power::impl::pixel::PowerSessionManager;
+using ::android::perfmgr::HintManager;
+
+constexpr std::string_view kPowerHalInitProp("vendor.powerhal.init");
+
+int main() {
+ // Parse config but do not start the looper
+ std::shared_ptr hm = HintManager::GetInstance();
+ if (!hm) {
+ LOG(FATAL) << "HintManager Init failed";
+ }
+
+ // single thread
+ ABinderProcess_setThreadPoolMaxThreadCount(0);
+
+ // core service
+ std::shared_ptr pw = ndk::SharedRefBase::make();
+ ndk::SpAIBinder pwBinder = pw->asBinder();
+ AIBinder_setMinSchedulerPolicy(pwBinder.get(), SCHED_NORMAL, -20);
+
+ // extension service
+ std::shared_ptr pwExt = ndk::SharedRefBase::make();
+ auto pwExtBinder = pwExt->asBinder();
+ AIBinder_setMinSchedulerPolicy(pwExtBinder.get(), SCHED_NORMAL, -20);
+
+ // attach the extension to the same binder we will be registering
+ CHECK(STATUS_OK == AIBinder_setExtension(pwBinder.get(), pwExt->asBinder().get()));
+
+ const std::string instance = std::string() + Power::descriptor + "/default";
+ binder_status_t status = AServiceManager_addService(pw->asBinder().get(), instance.c_str());
+ CHECK(status == STATUS_OK);
+ LOG(INFO) << "spaced Power HAL AIDL Service with Extension is started.";
+
+ if (HintManager::GetInstance()->GetAdpfProfile()) {
+ PowerHintMonitor::getInstance()->start();
+ }
+
+ std::thread initThread([&]() {
+ ::android::base::WaitForProperty(kPowerHalInitProp.data(), "1");
+ HintManager::GetInstance()->Start();
+ });
+ initThread.detach();
+
+ ABinderProcess_joinThreadPool();
+
+ // should not reach
+ LOG(ERROR) << "spaced Power HAL AIDL Service with Extension just died.";
+ return EXIT_FAILURE;
+}
diff --git a/lineage_spaced.mk b/aosp_spaced.mk
similarity index 78%
rename from lineage_spaced.mk
rename to aosp_spaced.mk
index e90938c..3f89f92 100644
--- a/lineage_spaced.mk
+++ b/aosp_spaced.mk
@@ -5,16 +5,18 @@
#
# Inherit from those products. Most specific first.
-$(call inherit-product, $(SRC_TARGET_DIR)/product/core_64_bit.mk)
+$(call inherit-product, $(SRC_TARGET_DIR)/product/core_64_bit_only.mk)
$(call inherit-product, $(SRC_TARGET_DIR)/product/full_base_telephony.mk)
# Inherit from device makefile.
$(call inherit-product, device/realme/spaced/device.mk)
-# Inherit some common LineageOS stuff.
-$(call inherit-product, vendor/lineage/config/common_full_phone.mk)
+# Inherit some common PixelOS stuff.
+$(call inherit-product, vendor/aosp/config/common_full_phone.mk)
-PRODUCT_NAME := lineage_spaced
+
+
+PRODUCT_NAME := aosp_spaced
PRODUCT_DEVICE := spaced
PRODUCT_MANUFACTURER := Realme
PRODUCT_BRAND := Realme
diff --git a/com.android.vndk.current.on_vendor.apex b/com.android.vndk.current.on_vendor.apex
new file mode 100644
index 0000000..5161b40
Binary files /dev/null and b/com.android.vndk.current.on_vendor.apex differ
diff --git a/configs/perf/power_app_cfg.xml b/configs/perf/power_app_cfg.xml
deleted file mode 100644
index b2fad18..0000000
--- a/configs/perf/power_app_cfg.xml
+++ /dev/null
@@ -1,627 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/configs/perf/powercontable.xml b/configs/perf/powercontable.xml
deleted file mode 100644
index 55a3526..0000000
--- a/configs/perf/powercontable.xml
+++ /dev/null
@@ -1,763 +0,0 @@
-
-
-
-
- more
- 100
- -100
-
-
-
- more
- 100
- 0
- 0
-
-
-
- more
- 100
- -100
- 0
-
-
-
- more
- 100
- -100
-
-
-
- less
- 20
- 1
-
-
-
- more
- 20
- 1
-
-
-
- less
- 100
- 0
- 40
-
-
-
- less
- 2
- 0
- -1
-
-
-
- more
- 1
- 0
- 0
- 3^
-
-
-
- more
- 1
- 0
- 0
- 1^
-
-
-
- more
- 15
- 0
- 0
-
-
-
- more
- 100
- 0
- 0
-
-
-
- more
- 2
- 0
-
-
-
- less
- 10000000
- 0
- 200000
-
-
-
- more
- 1
- 0
- 0
-
-
-
- more
- 100
- 0
-
-
-
- more
- 100
- 0
-
-
-
- more
- 100
- 0
-
-
-
- more
- 100
- 0
-
-
-
- more
- 15
- 0
- 0
-
-
-
- more
- 101
- -1
- 0
-
-
-
- more
- 1
- 0
- 0
-
-
-
- more
- 100000000
- 0
- -1
-
-
-
- less
- 1
- 0
- -1
-
-
-
- more
- 6553599
- 1
- 130
-
-
-
- more
- 60
- 0
-
-
-
- more
- 100
- 0
-
-
-
- more
- 2
- 0
- 2
-
-
-
- more
- 100
- 0
-
-
-
- more
- 100
- 0
-
-
-
- more
- 1
- 0
-
-
-
- more
- 15
- 0
-
-
-
- more
- 1
- 0
-
-
-
- more
- 10
- 0
-
-
-
- more
- 1
- 0
-
-
-
- more
- 1000000
- 33
-
-
-
- more
- 1
- 0
- 1
- cm_mgr_perf_enable^
- 1
-
-
-
- more
- 1
- 0
- 0
- cm_mgr_camera_enable^
-
-
-
- more
- 100
- 0
- 0
- cpu_power_ratio_up_x^3^
-
-
-
- more
- 100
- 0
- 0
- cpu_power_ratio_up_x^4^
-
-
-
- more
- 1
- 0
- CAM^
- 1
-
-
-
- less
- 15
- 0
- 2
- touch_opp^
-
-
-
- less
- 15
- -2
- -1
- cluster_opp^0^
-
-
-
- less
- 15
- -2
- -1
- cluster_opp^1^
-
-
-
- more
- 2000000000
- 10000000
- 200000000
- duration^
-
-
-
- more
- 1000000
- 0
- 100000
- active_time^
-
-
-
- more
- 100
- 0
- 80
- eas_boost^
-
-
-
- less
- 6000000
- 0
- 600000
- time_to_last_touch^
-
-
-
- more
- 1
- 0
- 1
- deboost_when_render^
-
-
-
- less
- 4000000
- 0
- -1
-
-
-
- more
- 2000000000
- 0
-
-
-
- more
- 100
- 0
-
-
-
- more
- 2000000000
- -1
- 798
-
-
-
- more
- 25855
- 0
- 4
-
-
-
- more
- 32767
- 1
-
-
-
- more
- 32767
- 1
-
-
-
- less
- 1
- 0
-
-
-
- more
- 32767
- 8
-
-
-
- more
- 32768
- 1
-
-
-
- more
- 32768
- 1
-
-
-
- more
- 15
- 0
-
-
-
- more
- 15
- 0
-
-
-
- more
- 1
- 0
-
-
-
- more
- 32767
- 0
-
-
-
- more
- 32767
- 0
-
-
-
- more
- 16000000
- 0
-
-
-
- more
- 100
- 0
-
-
-
- more
- 2
- 0
-
-
-
- more
- 100
- 0
- 0
-
-
-
- more
- 2
- 0
-
-
-
- more
- 100
- 0
- 0
-
-
-
- more
- 2
- 0
- 0
-
-
-
- more
- 20
- 2
- 10
-
-
-
- more
- 50
- 0
- 0
-
-
-
- more
- 1
- 0
- 0
-
-
-
- more
- 1000000000
- 0
- 1000000000
-
-
-
- more
- 1
- 0
- 0
-
-
-
- more
- 9
- 1
- 5
-
-
-
- more
- 1
- 0
-
-
-
- more
- 1
- 0
-
-
-
- more
- 10000
- 500
-
-
-
- more
- 15
- 1
-
-
-
- more
- 100
- 0
-
-
-
- more
- 100
- 0
-
-
-
- more
- 500
- 10
-
-
-
- more
- 1
- 0
- 1
-
-
-
- more
- 100
- 0
-
-
-
- more
- 50000000
- -50000000
-
-
-
- less
- 3000000
- 0
- -1
-
-
-
- less
- 1
- 0
- 0
-
-
-
- more
- 1
- 0
- 0
- 1
-
-
-
- more
- 1
- 0
-
-
-
- more
- 1
- 0
-
-
-
- more
- 2
- 0
- 2
-
-
-
- less
- 1
- 0
-
-
-
- less
- 1
- 0
-
-
-
- less
- 100
- -100
-
-
-
- more
- 100
- 0
-
-
-
- more
- 200
- 0
-
-
-
- less
- 100
- -100
-
-
-
- more
- 100
- 0
-
-
-
- more
- 200
- 0
-
-
-
- less
- 100
- -100
-
-
-
- more
- 100
- 0
-
-
-
- more
- 200
- 0
-
-
-
- more
- 200
- 0
-
-
-
- more
- 200
- 0
-
-
-
- more
- 200
- 0
-
-
-
- more
- 200
- 0
-
-
-
- more
- 6000
- -6000
-
-
-
- more
- 100
- 0
-
-
-
- more
- 100
- 0
-
-
-
- more
- 100
- 0
-
-
-
- more
- 100
- 0
-
-
-
- more
- 100
- 0
-
-
-
- more
- 65535
- 0
-
-
\ No newline at end of file
diff --git a/configs/perf/powerscntbl.xml b/configs/perf/powerscntbl.xml
deleted file mode 100644
index f9ebaf2..0000000
--- a/configs/perf/powerscntbl.xml
+++ /dev/null
@@ -1,116 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/configs/power/powerhint.json b/configs/power/powerhint.json
new file mode 100644
index 0000000..e53c900
--- /dev/null
+++ b/configs/power/powerhint.json
@@ -0,0 +1,522 @@
+{
+ "Nodes": [
+ {
+ "Name": "CPULittleClusterMaxFreq",
+ "Path": "/sys/devices/system/cpu/cpufreq/policy0/scaling_max_freq",
+ "Values": [
+ "9999999",
+ "2000000",
+ "1933000",
+ "1866000",
+ "1800000",
+ "1733000",
+ "1666000",
+ "1618000",
+ "1500000",
+ "1375000",
+ "1275000",
+ "1175000",
+ "1075000",
+ "975000",
+ "875000",
+ "774000",
+ "500000"
+ ],
+ "DefaultIndex": 0,
+ "ResetOnInit": true
+ },
+ {
+ "Name": "CPULittleClusterMinFreq",
+ "Path": "/sys/devices/system/cpu/cpufreq/policy0/scaling_min_freq",
+ "Values": [
+ "2000000",
+ "1933000",
+ "1866000",
+ "1800000",
+ "1733000",
+ "1666000",
+ "1618000",
+ "1500000",
+ "1375000",
+ "1275000",
+ "1175000",
+ "1075000",
+ "975000",
+ "875000",
+ "774000",
+ "500000",
+ ],
+ "ResetOnInit": true
+ },
+ {
+ "Name": "CPUBigClusterMaxFreq",
+ "Path": "/sys/devices/system/cpu/cpufreq/policy6/scaling_max_freq",
+ "Values": [
+ "9999999",
+ "2050000",
+ "1986000",
+ "1923000",
+ "1860000",
+ "1796000",
+ "1733000",
+ "1670000",
+ "1530000",
+ "1419000",
+ "1308000",
+ "1169000",
+ "1085000",
+ "1002000",
+ "919000",
+ "835000",
+ "774000"
+ ],
+ "DefaultIndex": 0,
+ "ResetOnInit": true
+ },
+ {
+ "Name": "CPUBigClusterMinFreq",
+ "Path": "/sys/devices/system/cpu/cpufreq/policy6/scaling_min_freq",
+ "Values": [
+ "2050000",
+ "1986000",
+ "1923000",
+ "1860000",
+ "1796000",
+ "1733000",
+ "1670000",
+ "1530000",
+ "1419000",
+ "1308000",
+ "1169000",
+ "1085000",
+ "1002000",
+ "919000",
+ "835000",
+ "774000",
+ ],
+ "ResetOnInit": true
+ },
+ {
+ "Name": "GPUMinFreq",
+ "Path": "/sys/kernel/gpu/gpu_min_clock",
+ "Values": [
+ "950000",
+ "940000",
+ "930000",
+ "920000",
+ "910000",
+ "900000",
+ "890000",
+ "880000",
+ "870000",
+ "860000",
+ "850000",
+ "840000",
+ "830000",
+ "820000",
+ "810000",
+ "800000",
+ "790000",
+ "775000",
+ "761000",
+ "746000",
+ "732000",
+ "718000",
+ "703000",
+ "689000",
+ "675000",
+ "660000",
+ "646000",
+ "631000",
+ "617000",
+ "603000",
+ "588000",
+ "574000",
+ "560000",
+ "543000",
+ "527000",
+ "511000",
+ "495000",
+ "478000",
+ "462000",
+ "446000",
+ "430000",
+ "413000",
+ "397000",
+ "381000",
+ "365000",
+ "348000",
+ "332000",
+ "316000",
+ "300000"
+ ],
+ "ResetOnInit": true
+ },
+ {
+ "Name": "GPUMaxFreq",
+ "Path": "/sys/kernel/gpu/gpu_max_clock",
+ "Values": [
+ "950000",
+ "940000",
+ "930000",
+ "920000",
+ "910000",
+ "900000",
+ "890000",
+ "880000",
+ "870000",
+ "860000",
+ "850000",
+ "840000",
+ "830000",
+ "820000",
+ "810000",
+ "800000",
+ "790000",
+ "775000",
+ "761000",
+ "746000",
+ "732000",
+ "718000",
+ "703000",
+ "689000",
+ "675000",
+ "660000",
+ "646000",
+ "631000",
+ "617000",
+ "603000",
+ "588000",
+ "574000",
+ "560000",
+ "543000",
+ "527000",
+ "511000",
+ "495000",
+ "478000",
+ "462000",
+ "446000",
+ "430000",
+ "413000",
+ "397000",
+ "381000",
+ "365000",
+ "348000",
+ "332000",
+ "316000",
+ "300000"
+ ],
+ "DefaultIndex": 0,
+ "ResetOnInit": true
+ },
+ {
+ "Name": "GPUSchedMode",
+ "Path": "/sys/devices/platform/13000000.mali/js_ctx_scheduling_mode",
+ "Values": [
+ "0",
+ "1"
+ ],
+ "DefaultIndex": 0,
+ "ResetOnInit": true
+ },
+ {
+ "Name": "GPUSchedPeriod",
+ "Path": "/sys/devices/platform/13000000.mali/js_scheduling_period",
+ "Values": [
+ "100",
+ "75",
+ "50",
+ "0"
+ ],
+ "ResetOnInit": true,
+ "DefaultIndex": 0
+ },
+ {
+ "Name": "GPUDVFSInterval",
+ "Path": "/sys/devices/platform/13000000.mali/dvfs_period",
+ "Values": [
+ "100",
+ "75",
+ "50"
+ ],
+ "ResetOnInit": true,
+ "DefaultIndex": 0
+ },
+ {
+ "Name": "FGUclampMin",
+ "Path": "/dev/cpuctl/foreground/cpu.uclamp.min",
+ "Values": [
+ "100",
+ "0"
+ ],
+ "ResetOnInit": true
+ },
+ {
+ "Name": "TAUclampMin",
+ "Path": "/dev/cpuctl/top-app/cpu.uclamp.min",
+ "Values": [
+ "100",
+ "50",
+ "10"
+ ],
+ "ResetOnInit": true
+ },
+ {
+ "Name": "TAUclampLatency",
+ "Path": "/dev/cpuctl/top-app/cpu.uclamp.latency_sensitive",
+ "Values": [
+ "1",
+ "0"
+ ],
+ "ResetOnInit": true
+ },
+ {
+ "Name": "CDUclampMin",
+ "Path": "/dev/cpuctl/camera-daemon/cpu.uclamp.min",
+ "Values": [
+ "100",
+ "0"
+ ],
+ "ResetOnInit": true
+ },
+ {
+ "Name": "DRAMOppMin",
+ "Path": "/proc/perfmgr/boost_ctrl/dram_ctrl/ddr",
+ "Values": [
+ "1",
+ "-1"
+ ],
+ "ResetOnInit": true
+ },
+ {
+ "Name": "CCIFreqMode",
+ "Path": "/proc/cpufreq/cpufreq_cci_mode",
+ "Values": [
+ "0",
+ "1"
+ ],
+ "ResetOnInit": true,
+ "DefaultIndex": 0
+ },
+ {
+ "Name": "PowerHALMainState",
+ "Path": "vendor.powerhal.state",
+ "Values": ["SUSTAINED_PERFORMANCE", ""],
+ "Type": "Property"
+ },
+ {
+ "Name": "PowerHALAudioState",
+ "Path": "vendor.powerhal.audio",
+ "Values": ["AUDIO_STREAMING_LOW_LATENCY", ""],
+ "Type": "Property"
+ },
+ {
+ "Name": "PowerHALRenderingState",
+ "Path": "vendor.powerhal.rendering",
+ "Values": ["EXPENSIVE_RENDERING", ""],
+ "Type": "Property"
+ },
+ {
+ "Name": "DoubleTapToWakeEnable",
+ "Path": "/proc/touchpanel/double_tap_enable",
+ "Values": [
+ "1",
+ "0"
+ ]
+ }
+ ],
+ "Actions": [
+ {
+ "PowerHint": "SUSTAINED_PERFORMANCE",
+ "Node": "PowerHALMainState",
+ "Duration": 0,
+ "Value": "SUSTAINED_PERFORMANCE"
+ },
+ {
+ "PowerHint": "SUSTAINED_PERFORMANCE",
+ "Node": "CPUBigClusterMaxFreq",
+ "Duration": 0,
+ "Value": "2050000"
+ },
+ {
+ "PowerHint": "SUSTAINED_PERFORMANCE",
+ "Node": "CPULittleClusterMaxFreq",
+ "Duration": 0,
+ "Value": "2000000"
+ },
+ {
+ "PowerHint": "SUSTAINED_PERFORMANCE",
+ "Node": "GPUSchedMode",
+ "Duration": 0,
+ "Value": "1"
+ },
+ {
+ "PowerHint": "AUDIO_STREAMING_LOW_LATENCY",
+ "Node": "PowerHALAudioState",
+ "Duration": 0,
+ "Value": "AUDIO_STREAMING_LOW_LATENCY"
+ },
+ {
+ "PowerHint": "AUDIO_STREAMING_LOW_LATENCY",
+ "Node": "CPULittleClusterMinFreq",
+ "Duration": 0,
+ "Value": "875000"
+ },
+ {
+ "PowerHint": "AUDIO_STREAMING_LOW_LATENCY",
+ "Node": "CPUBigClusterMinFreq",
+ "Duration": 0,
+ "Value": "835000"
+ },
+ {
+ "PowerHint": "INTERACTION",
+ "Node": "CPULittleClusterMaxFreq",
+ "Duration": 0,
+ "Value": "9999999"
+ },
+ {
+ "PowerHint": "INTERACTION",
+ "Node": "CPULittleClusterMinFreq",
+ "Duration": 0,
+ "Value": "1375000"
+ },
+ {
+ "PowerHint": "INTERACTION",
+ "Node": "CPUBigClusterMaxFreq",
+ "Duration": 0,
+ "Value": "9999999"
+ },
+ {
+ "PowerHint": "INTERACTION",
+ "Node": "CPUBigClusterMinFreq",
+ "Duration": 0,
+ "Value": "1419000"
+ },
+ {
+ "PowerHint": "INTERACTION",
+ "Node": "TAUclampMin",
+ "Duration": 0,
+ "Value": "50"
+ },
+ {
+ "PowerHint": "INTERACTION",
+ "Node": "CCIFreqMode",
+ "Duration": 0,
+ "Value": "1"
+ },
+ {
+ "PowerHint": "INTERACTION",
+ "Node": "TAUclampLatency",
+ "Duration": 0,
+ "Value": "1"
+ },
+ {
+ "PowerHint": "LAUNCH",
+ "Node": "CPUBigClusterMaxFreq",
+ "Duration": 3000,
+ "Value": "9999999"
+ },
+ {
+ "PowerHint": "LAUNCH",
+ "Node": "CPUBigClusterMinFreq",
+ "Duration": 3000,
+ "Value": "2050000"
+ },
+ {
+ "PowerHint": "LAUNCH",
+ "Node": "CPULittleClusterMaxFreq",
+ "Duration": 3000,
+ "Value": "9999999"
+ },
+ {
+ "PowerHint": "LAUNCH",
+ "Node": "CPULittleClusterMinFreq",
+ "Duration": 3000,
+ "Value": "2000000"
+ },
+ {
+ "PowerHint": "LAUNCH",
+ "Node": "FGUclampMin",
+ "Duration": 3000,
+ "Value": "100"
+ },
+ {
+ "PowerHint": "LAUNCH",
+ "Node": "TAUclampMin",
+ "Duration": 3000,
+ "Value": "100"
+ },
+ {
+ "PowerHint": "LAUNCH",
+ "Node": "DRAMOppMin",
+ "Duration": 3000,
+ "Value": "1"
+ },
+ {
+ "PowerHint": "CAMERA_LAUNCH",
+ "Node": "CDUclampMin",
+ "Duration": 1000,
+ "Value": "100"
+ },
+ {
+ "PowerHint": "EXPENSIVE_RENDERING",
+ "Node": "PowerHALRenderingState",
+ "Duration": 0,
+ "Value": "EXPENSIVE_RENDERING"
+ },
+ {
+ "PowerHint": "EXPENSIVE_RENDERING",
+ "Node": "GPUMinFreq",
+ "Duration": 0,
+ "Value": "920000000"
+ },
+ {
+ "PowerHint": "EXPENSIVE_RENDERING",
+ "Node": "GPUMaxFreq",
+ "Duration": 0,
+ "Value": "950000000"
+ },
+ {
+ "PowerHint": "EXPENSIVE_RENDERING",
+ "Node": "GPUSchedPeriod",
+ "Duration": 0,
+ "Value": "100"
+ },
+ {
+ "PowerHint": "EXPENSIVE_RENDERING",
+ "Node": "GPUDVFSInterval",
+ "Duration": 0,
+ "Value": "75"
+ },
+ {
+ "PowerHint": "EXPENSIVE_RENDERING",
+ "Node": "GPUSchedMode",
+ "Duration": 0,
+ "Value": "1"
+ },
+ {
+ "PowerHint": "DOUBLE_TAP_TO_WAKE",
+ "Node": "DoubleTapToWakeEnable",
+ "Duration": 0,
+ "Value": "1"
+ }
+ {
+ "PowerHint": "Flipendo",
+ "Node": "CPULittleClusterMaxFreq",
+ "Duration": 0,
+ "Value": "1500000"
+ },
+ {
+ "PowerHint": "Flipendo",
+ "Node": "CPUBigClusterMaxFreq",
+ "Duration": 0,
+ "Value": "1670000"
+ },
+ {
+ "PowerHint": "DISPLAY_INACTIVE",
+ "Node": "TAUclampMin",
+ "Duration": 0,
+ "Value": "0"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/device.mk b/device.mk
index 183f40b..e268204 100644
--- a/device.mk
+++ b/device.mk
@@ -7,9 +7,6 @@
# Installs gsi keys into ramdisk, to boot a developer GSI with verified boot.
$(call inherit-product, $(SRC_TARGET_DIR)/product/developer_gsi_keys.mk)
-# Enable updating of APEXes
-$(call inherit-product, $(SRC_TARGET_DIR)/product/updatable_apex.mk)
-
# Dalvik VM Configuration
$(call inherit-product, frameworks/native/build/phone-xhdpi-4096-dalvik-heap.mk)
@@ -67,6 +64,10 @@ PRODUCT_COPY_FILES += \
frameworks/av/services/audiopolicy/config/usb_audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/usb_audio_policy_configuration.xml \
frameworks/av/services/audiopolicy/config/default_volume_tables.xml:$(TARGET_COPY_OUT_VENDOR)/etc/default_volume_tables.xml
+# Apex
+PRODUCT_COPY_FILES += \
+ $(LOCAL_PATH)/com.android.vndk.current.on_vendor.apex:$(TARGET_COPY_OUT_VENDOR)/apex/com.android.vndk.current.on_vendor.apex
+
# Biometrics
PRODUCT_PACKAGES += \
android.hardware.biometrics.fingerprint@2.3-service.oplus
@@ -89,16 +90,28 @@ PRODUCT_PACKAGES += \
android.hardware.camera.provider@2.4.vendor \
android.hardware.camera.provider@2.5.vendor \
android.hardware.camera.provider@2.6.vendor \
- libcamera2ndk_vendor
+ libcamera2ndk_vendor \
+ libexpat.vendor:64 \
+ libpng.vendor:64
PRODUCT_PACKAGES += \
- libcamera_metadata_shim
+ libshim_camera_metadata
# Cgroup
PRODUCT_COPY_FILES += \
system/core/libprocessgroup/profiles/cgroups_30.json:$(TARGET_COPY_OUT_VENDOR)/etc/cgroups.json \
$(LOCAL_PATH)/configs/task_profiles.json:$(TARGET_COPY_OUT_VENDOR)/etc/task_profiles.json
+# Dex/ART optimization
+PRODUCT_ART_TARGET_INCLUDE_DEBUG_BUILD := false
+PRODUCT_DEX_PREOPT_DEFAULT_COMPILER_FILTER := everything
+PRODUCT_MINIMIZE_JAVA_DEBUG_INFO := true
+USE_DEX2OAT_DEBUG := false
+DONT_DEXPREOPT_PREBUILTS := true
+# Enable whole-program R8 Java optimizations for SystemUI and system_server
+SYSTEM_OPTIMIZE_JAVA := true
+SYSTEMUI_OPTIMIZE_JAVA := true
+
# Display
PRODUCT_PACKAGES += \
android.hardware.graphics.allocator@2.0.vendor \
@@ -111,7 +124,9 @@ PRODUCT_PACKAGES += \
android.hardware.graphics.composer@2.3-service \
android.hardware.memtrack-service.mediatek-mali \
libdrm.vendor \
- libdrm
+ libdrm \
+ libion.vendor \
+ libui.vendor
# Doze
PRODUCT_PACKAGES += \
@@ -143,7 +158,8 @@ PRODUCT_PACKAGES += \
# Gatekeeper
PRODUCT_PACKAGES += \
android.hardware.gatekeeper@1.0-service \
- android.hardware.gatekeeper@1.0-impl
+ android.hardware.gatekeeper@1.0-impl \
+ libgatekeeper.vendor:64
# GNSS
PRODUCT_PACKAGES += \
@@ -153,7 +169,8 @@ PRODUCT_PACKAGES += \
android.hardware.gnss@1.0.vendor \
android.hardware.gnss@1.1.vendor \
android.hardware.gnss@2.0.vendor \
- android.hardware.gnss@2.1.vendor
+ android.hardware.gnss@2.1.vendor \
+ libcurl.vendor
PRODUCT_PACKAGES += \
android.hardware.gnss-service.mediatek
@@ -161,7 +178,9 @@ PRODUCT_PACKAGES += \
# Health
PRODUCT_PACKAGES += \
android.hardware.health-service.mediatek \
- android.hardware.health-service.mediatek-recovery
+ android.hardware.health-service.mediatek-recovery \
+ libhwbinder.vendor \
+ libhidlmemory.vendor:64
# HIDL
PRODUCT_PACKAGES += \
@@ -182,6 +201,9 @@ PRODUCT_BOOT_JARS += \
mediatek-telephony-base \
mediatek-telephony-common
+PRODUCT_PACKAGES += \
+ libshim_sink
+
PRODUCT_COPY_FILES += \
$(LOCAL_PATH)/configs/permissions/privapp-permissions-mediatek.xml:$(TARGET_COPY_OUT_SYSTEM)/etc/permissions/privapp-permissions-mediatek.xml
@@ -204,20 +226,13 @@ PRODUCT_PACKAGES += \
libpuresoftkeymasterdevice.vendor:64 \
libsoft_attestation_cert.vendor:64 \
libkeystore-wifi-hidl \
- libkeystore-engine-wifi-hidl
+ libkeystore-engine-wifi-hidl \
+ libnetutils.vendor:64
# Lights
PRODUCT_PACKAGES += \
android.hardware.light-service.spaced
-# Lineage Health
-PRODUCT_PACKAGES += \
- vendor.lineage.health-service.default
-
-# LiveDisplay
-PRODUCT_PACKAGES += \
- vendor.lineage.livedisplay@2.1-service-spaced
-
# Vendor Log Tag
include $(LOCAL_PATH)/vendor_logtag.mk
@@ -225,7 +240,7 @@ include $(LOCAL_PATH)/vendor_logtag.mk
PRODUCT_PACKAGES += \
libcodec2_hidl@1.1.vendor \
libcodec2_hidl@1.2.vendor \
- libavservices_minijail_vendor \
+ libavservices_minijail.vendor \
libstagefright_softomx_plugin.vendor \
libsfplugin_ccodec_utils.vendor \
libcodec2_soft_common.vendor
@@ -281,13 +296,15 @@ PRODUCT_COPY_FILES += \
# Overlays
PRODUCT_ENFORCE_RRO_TARGETS := *
-DEVICE_PACKAGE_OVERLAYS += \
- $(LOCAL_PATH)/overlay
-
PRODUCT_PACKAGES += \
- WifiOverlay \
- TetheringConfigOverlay \
- CarrierConfigOverlay
+ FrameworksResOverlaySpaced \
+ SettingsOverlaySpaced \
+ SystemUIOverlaySpaced \
+ TelephonyOverlaySpaced \
+ WifiResOverlaySpaced \
+ TetheringResOverlaySpaced \
+ CarrierConfigOverlaySpaced \
+ OplusDozeOverlaySpaced
# Permissions
PRODUCT_COPY_FILES += \
@@ -339,19 +356,22 @@ PRODUCT_PACKAGES += \
# Power
PRODUCT_PACKAGES += \
- android.hardware.power-service-mediatek \
- android.hardware.power@1.0.vendor \
- android.hardware.power@1.1.vendor \
+ android.hardware.power-service.spaced-libperfmgr \
android.hardware.power@1.2.vendor \
- android.hardware.power-V2-ndk_platform.vendor \
+ vendor.mediatek.hardware.mtkpower@1.2-service.stub
+
+PRODUCT_PACKAGES += \
vendor.mediatek.hardware.mtkpower@1.0.vendor \
vendor.mediatek.hardware.mtkpower@1.1.vendor \
vendor.mediatek.hardware.mtkpower@1.2.vendor
+PRODUCT_PACKAGES += \
+ libmtkperf_client_vendor \
+ libmtkperf_client
+
PRODUCT_COPY_FILES += \
- $(LOCAL_PATH)/configs/perf/power_app_cfg.xml:$(TARGET_COPY_OUT_VENDOR)/etc/power_app_cfg.xml \
- $(LOCAL_PATH)/configs/perf/powercontable.xml:$(TARGET_COPY_OUT_VENDOR)/etc/powercontable.xml \
- $(LOCAL_PATH)/configs/perf/powerscntbl.xml:$(TARGET_COPY_OUT_VENDOR)/etc/powerscntbl.xml
+ $(LOCAL_PATH)/configs/power/powerhint.json:$(TARGET_COPY_OUT_VENDOR)/etc/powerhint.json
+
# Public libraries
PRODUCT_COPY_FILES += \
$(LOCAL_PATH)/configs/public.libraries.txt:$(TARGET_COPY_OUT_VENDOR)/etc/public.libraries.txt
@@ -370,20 +390,14 @@ PRODUCT_PACKAGES += \
android.hardware.radio@1.5.vendor \
android.hardware.radio@1.6.vendor
-# RCS
-PRODUCT_PACKAGES += \
- com.android.ims.rcsmanager \
- RcsService \
- PresencePolling
-
# Rootdir
PRODUCT_PACKAGES += \
fstab.mt6781 \
fstab.mt6781_ramdisk \
- init.cgroup.rc \
init.connectivity.rc \
init.modem.rc \
init.mt6781.rc \
+ init.mt6781.power.rc \
init.mt6781.usb.rc \
init.project.rc \
init.sensor_1_0.rc \
@@ -408,6 +422,8 @@ PRODUCT_PACKAGES += \
android.frameworks.sensorservice@1.0 \
android.frameworks.sensorservice@1.0.vendor \
android.hardware.sensors@2.0-service-multihal.spaced \
+ libdumpstateutil.vendor \
+ libpower.vendor:64 \
libsensorndkbridge
PRODUCT_COPY_FILES += \
@@ -421,19 +437,21 @@ PRODUCT_PACKAGES += \
PRODUCT_SOONG_NAMESPACES += \
$(LOCAL_PATH) \
hardware/mediatek \
+ hardware/oplus
# Thermal
PRODUCT_PACKAGES += \
android.hardware.thermal@2.0.vendor \
android.hardware.thermal@1.0-impl
-# Touch
-PRODUCT_PACKAGES += \
- vendor.lineage.touch@1.0-service.oplus
-
# USB
PRODUCT_PACKAGES += \
- android.hardware.usb@1.3-service-mediatekv2
+ android.hardware.usb@1.0.vendor \
+ android.hardware.usb@1.1.vendor \
+ android.hardware.usb@1.2.vendor \
+ android.hardware.usb@1.3.vendor \
+ android.hardware.usb.gadget@1.0.vendor \
+ android.hardware.usb.gadget@1.1.vendor
# Vendor service manager
PRODUCT_PACKAGES += \
@@ -453,15 +471,22 @@ PRODUCT_COPY_FILES += \
prebuilts/vndk/v33/arm64/arch-arm-armv8-a/shared/vndk-core/libstagefright_foundation.so:$(TARGET_COPY_OUT_VENDOR)/lib/libstagefright_foundation-v33.so \
prebuilts/vndk/v33/arm64/arch-arm64-armv8-a/shared/vndk-core/libstagefright_foundation.so:$(TARGET_COPY_OUT_VENDOR)/lib64/libstagefright_foundation-v33.so
+PRODUCT_PACKAGES += \
+ libunwindstack.vendor \
+ libutilscallstack.vendor
+
+PRODUCT_PACKAGES += \
+ libshim_ui
+
# Wi-Fi
PRODUCT_PACKAGES += \
android.hardware.tetheroffload.config@1.0.vendor \
android.hardware.tetheroffload.control@1.0.vendor \
android.hardware.tetheroffload.control@1.1.vendor \
- android.hardware.wifi-service-lazy \
+ android.hardware.wifi-service \
wpa_supplicant \
hostapd \
- libwifi-hal-mt66xx
+ libwifi-hal-wrapper
PRODUCT_COPY_FILES += \
$(LOCAL_PATH)/configs/wifi/p2p_supplicant_overlay.conf:$(TARGET_COPY_OUT_VENDOR)/etc/wifi/p2p_supplicant_overlay.conf \
diff --git a/extract-files.sh b/extract-files.sh
index 3d0c8cb..1aeae28 100755
--- a/extract-files.sh
+++ b/extract-files.sh
@@ -52,7 +52,7 @@ done
function blob_fixup {
case "$1" in
vendor/lib64/hw/android.hardware.camera.provider@2.6-impl-mediatek.so)
- grep -q "libcamera_metadata_shim.so" "${2}" || "${PATCHELF}" --add-needed "libcamera_metadata_shim.so" "${2}"
+ grep -q libshim_camera_metadata.so "$2" || "$PATCHELF" --add-needed libshim_camera_metadata.so "$2"
;;
vendor/lib/hw/vendor.mediatek.hardware.pq@2.15-impl.so)
;&
@@ -64,7 +64,7 @@ function blob_fixup {
"${PATCHELF}" --replace-needed "libssl.so" "libssl-v32.so" "${2}"
;;
vendor/lib*/libmtkcam_stdutils.so)
- "${PATCHELF}" --replace-needed "libutils.so" "libutils-v32.so" "$2"
+ "${PATCHELF}" --replace-needed "libutils.so" "libutils-v32.so" "${2}"
;;
vendor/etc/init/android.hardware.bluetooth@1.1-service-mediatek.rc)
sed -i '/vts/Q' "$2"
@@ -82,10 +82,23 @@ function blob_fixup {
;;
vendor/bin/hw/android.hardware.media.c2@1.2-mediatek|vendor/bin/hw/android.hardware.media.c2@1.2-mediatek-64b)
"${PATCHELF}" --add-needed "libstagefright_foundation-v33.so" "${2}"
+ "${PATCHELF}" --replace-needed libavservices_minijail_vendor.so libavservices_minijail.so "${2}"
;;
lib64/libem_support_jni.so)
"${PATCHELF}" --add-needed "libjni_shim.so" "${2}"
;;
+ vendor/lib64/libwifi-hal-mtk.so)
+ "${PATCHELF}" --set-soname "libwifi-hal-mtk.so" "${2}"
+ ;;
+ vendor/lib64/hw/android.hardware.thermal@2.0-impl.so)
+ "${PATCHELF}" --replace-needed "libutils.so" "libutils-v32.so" "${2}"
+ ;;
+ system_ext/lib64/libsource.so)
+ grep -q libshim_ui.so "$2" || "$PATCHELF" --add-needed libshim_ui.so "$2"
+ ;;
+ system/lib64/libsink.so)
+ "${PATCHELF}" --add-needed "libshim_sink.so" "$2"
+ ;;
esac
}
@@ -98,4 +111,4 @@ setup_vendor "${DEVICE}" "${VENDOR}" "${ANDROID_ROOT}" false "${CLEAN_VENDOR}"
extract "${MY_DIR}/proprietary-files.txt" "${SRC}" "${KANG}" --section "${SECTION}"
-"${MY_DIR}/setup-makefiles.sh"
\ No newline at end of file
+"${MY_DIR}/setup-makefiles.sh"
diff --git a/framework_compatibility_matrix.xml b/framework_compatibility_matrix.xml
index baffbe0..d81e709 100644
--- a/framework_compatibility_matrix.xml
+++ b/framework_compatibility_matrix.xml
@@ -144,15 +144,6 @@
default
-
- vendor.mediatek.hardware.aee
- 1.0-1
-
- IAee
- AEE
- default
-
-
vendor.mediatek.hardware.apmonitor
2.0
diff --git a/libmtkperf_client/Android.bp b/libmtkperf_client/Android.bp
new file mode 100644
index 0000000..86bfcb5
--- /dev/null
+++ b/libmtkperf_client/Android.bp
@@ -0,0 +1,22 @@
+//
+// Copyright (C) 2022 The LineageOS Project
+//
+// SPDX-License-Identifier: Apache-2.0
+//
+
+cc_defaults {
+ name: "libmtkperf_client_defaults",
+ srcs: ["client.c"],
+ shared_libs: ["liblog"],
+}
+
+cc_library_shared {
+ name: "libmtkperf_client_vendor",
+ vendor: true,
+ defaults: ["libmtkperf_client_defaults"],
+}
+
+cc_library_shared {
+ name: "libmtkperf_client",
+ defaults: ["libmtkperf_client_defaults"],
+}
diff --git a/libmtkperf_client/client.c b/libmtkperf_client/client.c
new file mode 100644
index 0000000..8bf820a
--- /dev/null
+++ b/libmtkperf_client/client.c
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2022 The LineageOS Project
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+#define LOG_TAG "libmtkperf_client"
+
+#include
+
+int perf_lock_acq(int hdl, int dur, long num, unsigned int tid) {
+ ALOGI("[%s] hdl: %d, dur: %d, num: %ld, tid: %u",
+ __func__, hdl, dur, num, tid);
+ if (hdl > 0)
+ return hdl;
+
+ return 233;
+}
+
+int perf_lock_rel(int hdl) {
+ ALOGI("[%s] hdl: %d", __func__, hdl);
+ return 0;
+}
+
+int perf_cus_lock_hint(int hint, int dur) {
+ ALOGI("[%s], hint: %d, dur: %d", __func__, hint, dur);
+ return 233;
+}
diff --git a/libshims/Android.bp b/libshims/Android.bp
new file mode 100644
index 0000000..0590cae
--- /dev/null
+++ b/libshims/Android.bp
@@ -0,0 +1,19 @@
+//
+// Copyright (C) 2023 The LineageOS Project
+//
+// SPDX-License-Identifier: Apache-2.0
+//
+
+cc_library_shared {
+ name: "libshim_sink",
+ srcs: ["libshim_sink.cpp"],
+ compile_multilib: "64",
+ shared_libs: [
+ "libaudioclient",
+ ],
+ header_libs: [
+ "libaudioclient_headers",
+ "libmedia_headers",
+ ],
+}
+
diff --git a/libshims/libshim_camera_metadata/Android.bp b/libshims/libshim_camera_metadata/Android.bp
new file mode 100644
index 0000000..319511e
--- /dev/null
+++ b/libshims/libshim_camera_metadata/Android.bp
@@ -0,0 +1,12 @@
+//
+// Copyright (C) 2023 The LineageOS Project
+//
+// SPDX-License-Identifier: Apache-2.0
+//
+
+cc_library {
+ name: "libshim_camera_metadata",
+ shared_libs: ["libcamera_metadata"],
+ srcs: ["libshim_camera_metadata.cpp"],
+ vendor: true
+}
diff --git a/libshims/libshim_camera_metadata/libshim_camera_metadata.cpp b/libshims/libshim_camera_metadata/libshim_camera_metadata.cpp
new file mode 100644
index 0000000..f98dc7f
--- /dev/null
+++ b/libshims/libshim_camera_metadata/libshim_camera_metadata.cpp
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2022 The LineageOS Project
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+#include
+#include
+#include
+
+extern "C" int add_camera_metadata_entry(camera_metadata_t* dst, uint32_t tag, const void* data,
+ size_t data_count) {
+ static auto add_camera_metadata_entry_orig =
+ reinterpret_cast(
+ dlsym(RTLD_NEXT, "add_camera_metadata_entry"));
+
+ if (tag == ANDROID_REQUEST_AVAILABLE_CAPABILITIES) {
+ std::vector caps;
+ auto u8 = reinterpret_cast(data);
+
+ for (size_t i = 0; i < data_count; i++) {
+ if (u8[i] != ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SYSTEM_CAMERA) {
+ caps.emplace_back(u8[i]);
+ }
+ }
+
+ return add_camera_metadata_entry_orig(dst, tag, caps.data(), caps.size());
+ }
+
+ return add_camera_metadata_entry_orig(dst, tag, data, data_count);
+}
+
+extern "C" int update_camera_metadata_entry(camera_metadata_t* dst, size_t index, const void* data,
+ size_t data_count,
+ camera_metadata_entry_t* updated_entry) {
+ static auto update_camera_metadata_entry_orig =
+ reinterpret_cast(
+ dlsym(RTLD_NEXT, "update_camera_metadata_entry"));
+
+ if (camera_metadata_entry_t entry;
+ find_camera_metadata_entry(dst, ANDROID_REQUEST_AVAILABLE_CAPABILITIES, &entry) == 0 &&
+ entry.index == index) {
+ std::vector caps;
+ auto u8 = reinterpret_cast(data);
+
+ for (size_t i = 0; i < data_count; i++) {
+ if (u8[i] != ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SYSTEM_CAMERA) {
+ caps.emplace_back(u8[i]);
+ }
+ }
+
+ return update_camera_metadata_entry_orig(dst, index, caps.data(), caps.size(),
+ updated_entry);
+ }
+
+ return update_camera_metadata_entry_orig(dst, index, data, data_count, updated_entry);
+}
\ No newline at end of file
diff --git a/libshims/libshim_sink.cpp b/libshims/libshim_sink.cpp
new file mode 100644
index 0000000..3f490c7
--- /dev/null
+++ b/libshims/libshim_sink.cpp
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2023 The LineageOS Project
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+#include
+
+using namespace android;
+
+extern "C" {
+void _ZN7android10AudioTrackC1E19audio_stream_type_tj14audio_format_t20audio_channel_mask_tm20audio_output_flags_tRKNS_2wpINS0_19IAudioTrackCallbackEEEi15audio_session_tNS0_13transfer_typeEPK20audio_offload_info_tRKNS_7content22AttributionSourceStateEPK18audio_attributes_tbfi(
+ void *thisptr, audio_stream_type_t streamType, uint32_t sampleRate,
+ audio_format_t format, audio_channel_mask_t channelMask, size_t frameCount,
+ audio_output_flags_t flags,
+ const wp &callback,
+ int32_t notificationFrames, audio_session_t sessionId,
+ AudioTrack::transfer_type transferType,
+ const audio_offload_info_t *offloadInfo,
+ const AttributionSourceState &attributionSource,
+ const audio_attributes_t *pAttributes, bool doNotReconnect,
+ float maxRequiredSpeed, audio_port_handle_t selectedDeviceId);
+
+void _ZN7android10AudioTrackC1E19audio_stream_type_tj14audio_format_t20audio_channel_mask_tm20audio_output_flags_tRKNS_2wpINS0_19IAudioTrackCallbackEEEi15audio_session_tNS0_13transfer_typeEPK20audio_offload_info_tRKNS_7content22AttributionSourceStateEPK18audio_attributes_tbfiRKNSt3__112basic_stringIcNSM_11char_traitsIcEENSM_9allocatorIcEEEE(
+ void *thisptr, audio_stream_type_t streamType, uint32_t sampleRate,
+ audio_format_t format, audio_channel_mask_t channelMask, size_t frameCount,
+ audio_output_flags_t flags,
+ const wp &callback,
+ int32_t notificationFrames, audio_session_t sessionId,
+ AudioTrack::transfer_type transferType,
+ const audio_offload_info_t *offloadInfo,
+ const AttributionSourceState &attributionSource,
+ const audio_attributes_t *pAttributes, bool doNotReconnect,
+ float maxRequiredSpeed, audio_port_handle_t selectedDeviceId,
+ const std::string& /* unknown */) {
+ _ZN7android10AudioTrackC1E19audio_stream_type_tj14audio_format_t20audio_channel_mask_tm20audio_output_flags_tRKNS_2wpINS0_19IAudioTrackCallbackEEEi15audio_session_tNS0_13transfer_typeEPK20audio_offload_info_tRKNS_7content22AttributionSourceStateEPK18audio_attributes_tbfi(
+ thisptr, streamType, sampleRate, format, channelMask, frameCount, flags,
+ callback, notificationFrames, sessionId, transferType, offloadInfo,
+ attributionSource, pAttributes, doNotReconnect, maxRequiredSpeed,
+ selectedDeviceId);
+}
+}
diff --git a/libshims/libshim_ui/Android.bp b/libshims/libshim_ui/Android.bp
new file mode 100644
index 0000000..33c0dc5
--- /dev/null
+++ b/libshims/libshim_ui/Android.bp
@@ -0,0 +1,18 @@
+//
+// Copyright (C) 2024 The LineageOS Project
+//
+// SPDX-License-Identifier: Apache-2.0
+//
+
+cc_library_shared {
+ name: "libshim_ui",
+ shared_libs: [
+ "libui",
+ "libsync",
+ "libutils",
+ ],
+ srcs: [
+ "GraphicBufferMapper.cpp",
+ ],
+ system_ext_specific: true,
+}
diff --git a/libshims/libshim_ui/GraphicBufferMapper.cpp b/libshims/libshim_ui/GraphicBufferMapper.cpp
new file mode 100644
index 0000000..23b2c9c
--- /dev/null
+++ b/libshims/libshim_ui/GraphicBufferMapper.cpp
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2024 The LineageOS Project
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+#include
+#include
+#include
+#include
+#include
+
+using android::Rect;
+using android::status_t;
+
+extern "C" {
+status_t _ZN7android19GraphicBufferMapper4lockEPK13native_handlejRKNS_4RectEPPvPiS9_(
+ void* thisptr, buffer_handle_t handle, uint32_t usage, const Rect& bounds, void** vaddr,
+ int32_t* /*outBytesPerPixel*/, int32_t* /*outBytesPerStride*/) {
+ auto* gpm = static_cast(thisptr);
+ return gpm->lock(handle, usage, bounds, vaddr);
+}
+
+status_t _ZN7android19GraphicBufferMapper6unlockEPK13native_handle(void* thisptr,
+ buffer_handle_t handle) {
+ android::base::unique_fd outFence;
+ auto* gpm = static_cast(thisptr);
+ status_t status = gpm->unlock(handle, &outFence);
+ if (status == android::OK && outFence.get() >= 0) {
+ sync_wait(outFence.get(), -1);
+ outFence.reset();
+ }
+ return status;
+}
+}
diff --git a/livedisplay/Android.bp b/livedisplay/Android.bp
deleted file mode 100644
index 258d659..0000000
--- a/livedisplay/Android.bp
+++ /dev/null
@@ -1,37 +0,0 @@
-// 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: "vendor.lineage.livedisplay@2.1-service-spaced",
- init_rc: ["vendor.lineage.livedisplay@2.1-service-spaced.rc"],
- vintf_fragments: ["vendor.lineage.livedisplay@2.1-service-spaced.xml"],
- vendor: true,
- defaults: ["hidl_defaults"],
- relative_install_path: "hw",
- shared_libs: [
- "libbase",
- "libbinder",
- "libcutils",
- "libhidlbase",
- "libutils",
- "vendor.lineage.livedisplay@2.0",
- "vendor.lineage.livedisplay@2.1",
- ],
-
- srcs: [
- "AntiFlicker.cpp",
- "SunlightEnhancement.cpp",
- "service.cpp",
- ]
-}
diff --git a/livedisplay/AntiFlicker.cpp b/livedisplay/AntiFlicker.cpp
deleted file mode 100644
index eadd7b2..0000000
--- a/livedisplay/AntiFlicker.cpp
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (C) 2022 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.
- */
-
-#define LOG_TAG "vendor.lineage.livedisplay@2.1-service-spaced"
-
-#include
-#include
-
-#include "AntiFlicker.h"
-
-using ::android::base::ReadFileToString;
-using ::android::base::Trim;
-using ::android::base::WriteStringToFile;
-
-namespace {
-
-constexpr const char* kDcDimmingPath = "/sys/kernel/oplus_display/dimlayer_bl_en";
-
-} // anonymous namespace
-
-namespace vendor {
-namespace lineage {
-namespace livedisplay {
-namespace V2_1 {
-namespace implementation {
-
-Return AntiFlicker::isEnabled() {
- std::string tmp;
- int32_t contents = 0;
-
- if (ReadFileToString(kDcDimmingPath, &tmp)) {
- contents = std::stoi(Trim(tmp));
- }
-
- return contents > 0;
-}
-
-Return AntiFlicker::setEnabled(bool enabled) {
- return WriteStringToFile(std::to_string(enabled), kDcDimmingPath, true);
-}
-
-} // namespace implementation
-} // namespace V2_1
-} // namespace livedisplay
-} // namespace lineage
-} // namespace vendor
diff --git a/livedisplay/AntiFlicker.h b/livedisplay/AntiFlicker.h
deleted file mode 100644
index 6dc2938..0000000
--- a/livedisplay/AntiFlicker.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2021 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.
- */
-
-#pragma once
-
-#include
-#include
-#include
-
-namespace vendor {
-namespace lineage {
-namespace livedisplay {
-namespace V2_1 {
-namespace implementation {
-
-using ::android::hardware::Return;
-using ::android::hardware::Void;
-using ::android::sp;
-
-class AntiFlicker : public IAntiFlicker {
- public:
- // Methods from ::vendor::lineage::livedisplay::V2_1::IAntiFlicker follow.
- Return isEnabled() override;
- Return setEnabled(bool enabled) override;
-};
-
-} // namespace implementation
-} // namespace V2_1
-} // namespace livedisplay
-} // namespace lineage
-} // namespace vendor
diff --git a/livedisplay/SunlightEnhancement.cpp b/livedisplay/SunlightEnhancement.cpp
deleted file mode 100644
index c5e98ff..0000000
--- a/livedisplay/SunlightEnhancement.cpp
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (C) 2022 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.
- */
-
-#include "SunlightEnhancement.h"
-#include
-#include
-
-using ::android::base::ReadFileToString;
-using ::android::base::Trim;
-using ::android::base::WriteStringToFile;
-
-namespace {
-
-constexpr const char* kHbmPath = "/sys/kernel/oplus_display/hbm";
-
-} // anonymous namespace
-
-namespace vendor {
-namespace lineage {
-namespace livedisplay {
-namespace V2_1 {
-namespace implementation {
-
-Return SunlightEnhancement::isEnabled() {
- std::string tmp;
- int32_t contents = 0;
-
- if (ReadFileToString(kHbmPath, &tmp)) {
- contents = std::stoi(Trim(tmp));
- }
-
- return contents > 0;
-}
-
-Return SunlightEnhancement::setEnabled(bool enabled) {
- return WriteStringToFile(std::to_string(enabled), kHbmPath, true);
-}
-
-} // namespace implementation
-} // namespace V2_1
-} // namespace livedisplay
-} // namespace lineage
-} // namespace vendor
diff --git a/livedisplay/SunlightEnhancement.h b/livedisplay/SunlightEnhancement.h
deleted file mode 100644
index 68a3d10..0000000
--- a/livedisplay/SunlightEnhancement.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2019-2021 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.
- */
-
-#pragma once
-
-#include
-#include
-#include
-
-namespace vendor {
-namespace lineage {
-namespace livedisplay {
-namespace V2_1 {
-namespace implementation {
-
-using ::android::hardware::Return;
-using ::android::hardware::Void;
-using ::android::sp;
-
-class SunlightEnhancement : public ISunlightEnhancement {
- public:
- // Methods from ::vendor::lineage::livedisplay::V2_0::ISunlightEnhancement follow.
- Return isEnabled() override;
- Return setEnabled(bool enabled) override;
-};
-
-} // namespace implementation
-} // namespace V2_1
-} // namespace livedisplay
-} // namespace lineage
-} // namespace vendor
-
diff --git a/livedisplay/service.cpp b/livedisplay/service.cpp
deleted file mode 100755
index 58b068c..0000000
--- a/livedisplay/service.cpp
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * 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.
- */
-
-#define LOG_TAG "vendor.lineage.livedisplay@2.1-service-spaced"
-
-#include
-#include
-#include
-
-#include "AntiFlicker.h"
-#include "SunlightEnhancement.h"
-
-using android::hardware::configureRpcThreadpool;
-using android::hardware::joinRpcThreadpool;
-
-using ::vendor::lineage::livedisplay::V2_1::IAntiFlicker;
-using ::vendor::lineage::livedisplay::V2_1::ISunlightEnhancement;
-using ::vendor::lineage::livedisplay::V2_1::implementation::AntiFlicker;
-using ::vendor::lineage::livedisplay::V2_1::implementation::SunlightEnhancement;
-
-int main() {
- android::sp af = new AntiFlicker();
- android::sp se = new SunlightEnhancement();
-
- configureRpcThreadpool(1, true /*callerWillJoin*/);
-
- if (af->registerAsService() != android::OK) {
- LOG(ERROR) << "Cannot register anti flicker HAL service.";
- return 1;
- }
-
- if (se->registerAsService() != android::OK) {
- LOG(ERROR) << "Cannot register sunlight enhancement HAL service.";
- return 1;
- }
-
- LOG(INFO) << "LiveDisplay HAL service is ready.";
-
- joinRpcThreadpool();
-
- LOG(ERROR) << "LiveDisplay HAL service failed to join thread pool.";
- return 1;
-}
diff --git a/livedisplay/vendor.lineage.livedisplay@2.1-service-spaced.rc b/livedisplay/vendor.lineage.livedisplay@2.1-service-spaced.rc
deleted file mode 100755
index 571cffe..0000000
--- a/livedisplay/vendor.lineage.livedisplay@2.1-service-spaced.rc
+++ /dev/null
@@ -1,9 +0,0 @@
-on init
- # LiveDisplay mediatek
- chown system system /sys/devices/platform/mtk_disp_mgr.0/rgb
- chmod 0660 /sys/devices/platform/mtk_disp_mgr.0/rgb
-
-service vendor.livedisplay-hal-2-1-spaced /vendor/bin/hw/vendor.lineage.livedisplay@2.1-service-spaced
- class late_start
- user system
- group system
diff --git a/livedisplay/vendor.lineage.livedisplay@2.1-service-spaced.xml b/livedisplay/vendor.lineage.livedisplay@2.1-service-spaced.xml
deleted file mode 100644
index d5ea09a..0000000
--- a/livedisplay/vendor.lineage.livedisplay@2.1-service-spaced.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
- vendor.lineage.livedisplay
- hwbinder
- 2.1
-
- IAntiFlicker
- default
-
-
- ISunlightEnhancement
- default
-
-
-
diff --git a/manifest.xml b/manifest.xml
index 42853b4..f61b777 100644
--- a/manifest.xml
+++ b/manifest.xml
@@ -103,12 +103,6 @@
@1.0::IThermal/default
@2.0::IThermal/default
-
- vendor.mediatek.hardware.aee
- hwbinder
- @1.1::IAee/AEE
- @1.1::IAee/default
-
vendor.mediatek.hardware.apmonitor
hwbinder
diff --git a/manifest_odm.xml b/manifest_odm.xml
deleted file mode 100644
index 928a70b..0000000
--- a/manifest_odm.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
- vendor.lineage.touch
- hwbinder
- 1.0
-
- IHighTouchPollingRate
- default
-
-
- ITouchscreenGesture
- default
-
-
-
diff --git a/overlay/frameworks/base/core/res/res/values/dimens.xml b/overlay/frameworks/base/core/res/res/values/dimens.xml
deleted file mode 100644
index 2900121..0000000
--- a/overlay/frameworks/base/core/res/res/values/dimens.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-
-
-
-
-
-
- 115.0px
- 115.0px
- 115.0px
-
-
- 98.0px
-
-
- 103.0px
-
-
- 7.0dip
-
diff --git a/overlay/packages/apps/Settings/res/values/config.xml b/overlay/packages/apps/Settings/res/values/config.xml
deleted file mode 100644
index fea39ec..0000000
--- a/overlay/packages/apps/Settings/res/values/config.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
- true
-
diff --git a/overlay/packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml b/overlay/packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml
deleted file mode 100644
index 746f8ce..0000000
--- a/overlay/packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
-
-
- -90
-
- -85
-
diff --git a/proprietary-files.txt b/proprietary-files.txt
index e032fce..729b239 100644
--- a/proprietary-files.txt
+++ b/proprietary-files.txt
@@ -428,12 +428,6 @@ vendor/bin/autobt
vendor/bin/bip
vendor/etc/init/android.hardware.bluetooth@1.1-service-mediatek.rc
vendor/etc/init/init.bip.rc
-vendor/lib/libbluetooth_hw_test.so
-vendor/lib/libbluetooth_mtk.so
-vendor/lib/libbluetooth_mtk_pure.so
-vendor/lib/libbluetooth_relayer.so
-vendor/lib/libbluetoothem_mtk.so
-vendor/lib/libbt-vendor.so
vendor/lib64/hw/android.hardware.bluetooth@1.1-impl-mediatek.so
vendor/lib64/libbluetooth_hw_test.so
vendor/lib64/libbluetooth_mtk.so
@@ -474,13 +468,11 @@ vendor/etc/init/chipinfo_init.rc
odm/lib/libAlgoProcess.so
odm/lib/libAncHumBokeh.so
odm/lib/libAncHumVideoBase.so
-odm/lib/libarcsoft_scbokeh_video.so
odm/lib/libmpbase.so
odm/lib/liboplus_platform_hwi.so
odm/lib/libormshalclient.so
odm/lib/libosensehalclient.so
odm/lib/libstblur_api.so
-odm/lib/vendor.oplus.hardware.engcamera@1.0.so
odm/lib/vendor.oplus.hardware.osense.client@1.0.so
odm/lib64/libAlgoProcess.so
odm/lib64/libAncHumBokeh.so
@@ -500,698 +492,6 @@ odm/lib64/vendor.oplus.hardware.engcamera@1.0.so
odm/lib64/vendor.oplus.hardware.osense.client@1.0.so
vendor/bin/hw/camerahalserver
vendor/etc/init/camerahalserver.rc
-vendor/lib/hw/vendor.mediatek.hardware.camera.atms@1.0-impl.so
-vendor/lib/hw/vendor.mediatek.hardware.camera.bgservice@1.1-impl.so
-vendor/lib/hw/vendor.mediatek.hardware.camera.isphal@1.0-impl.so
-vendor/lib/hw/vendor.mediatek.hardware.camera.postproc@1.0-impl.so
-vendor/lib/gc02m1bsy_mipi_raw_21690_IdxMgr.so
-vendor/lib/gc02m1bsy_mipi_raw_21690_tuning.so
-vendor/lib/gc02m1hlt_mipi_raw_21690_IdxMgr.so
-vendor/lib/gc02m1hlt_mipi_raw_21690_tuning.so
-vendor/lib/gc02m1shine_mipi_raw_21690_IdxMgr.so
-vendor/lib/gc02m1shine_mipi_raw_21690_tuning.so
-vendor/lib/hi1634q_mipi_raw_21690_IdxMgr.so
-vendor/lib/hi1634q_mipi_raw_21690_tuning.so
-vendor/lib/imx350_mipi_raw_IdxMgr.so
-vendor/lib/imx350_mipi_raw_tuning.so
-vendor/lib/imx386_mipi_mono_IdxMgr.so
-vendor/lib/imx386_mipi_mono_tuning.so
-vendor/lib/imx386_mipi_raw_IdxMgr.so
-vendor/lib/imx386_mipi_raw_tuning.so
-vendor/lib/imx398_mipi_raw_IdxMgr.so
-vendor/lib/imx398_mipi_raw_tuning.so
-vendor/lib/imx481_mipi_raw_IdxMgr.so
-vendor/lib/imx481_mipi_raw_tuning.so
-vendor/lib/imx499_mipi_raw_IdxMgr.so
-vendor/lib/imx499_mipi_raw_tuning.so
-vendor/lib/imx519_mipi_raw_IdxMgr.so
-vendor/lib/imx519_mipi_raw_tuning.so
-vendor/lib/imx586_mipi_raw_IdxMgr.so
-vendor/lib/imx586_mipi_raw_tuning.so
-vendor/lib/lib3a.ae.core.so
-vendor/lib/lib3a.ae.so
-vendor/lib/lib3a.ae.stat.so
-vendor/lib/lib3a.af.assist.so
-vendor/lib/lib3a.af.assist.utils.so
-vendor/lib/lib3a.af.core.so
-vendor/lib/lib3a.af.so
-vendor/lib/lib3a.alsflicker.so
-vendor/lib/lib3a.awb.core.so
-vendor/lib/lib3a.ccudrv.so
-vendor/lib/lib3a.ccuif.so
-vendor/lib/lib3a.custom.ae.so
-vendor/lib/lib3a.dce.so
-vendor/lib/lib3a.flash.so
-vendor/lib/lib3a.flicker.so
-vendor/lib/lib3a.gma.so
-vendor/lib/lib3a.lce.so
-vendor/lib/lib3a.log.so
-vendor/lib/lib3a.n3d3a.so
-vendor/lib/lib3a.sensors.color.so
-vendor/lib/lib3a.sensors.flicker.so
-vendor/lib/libCamera_gc02m1bsymipiraw21690_E2EHDR_Preview.so
-vendor/lib/libCamera_gc02m1bsymipiraw21690_E2EHDR_Video.so
-vendor/lib/libCamera_gc02m1bsymipiraw21690_Face_Capture.so
-vendor/lib/libCamera_gc02m1bsymipiraw21690_Flash_Capture.so
-vendor/lib/libCamera_gc02m1bsymipiraw21690_HDR_Capture.so
-vendor/lib/libCamera_gc02m1bsymipiraw21690_HDR_Preview.so
-vendor/lib/libCamera_gc02m1bsymipiraw21690_HDR_Video.so
-vendor/lib/libCamera_gc02m1bsymipiraw21690_N3D_Capture.so
-vendor/lib/libCamera_gc02m1bsymipiraw21690_N3D_Preview.so
-vendor/lib/libCamera_gc02m1bsymipiraw21690_N3D_Video.so
-vendor/lib/libCamera_gc02m1bsymipiraw21690_P1_YUV.so
-vendor/lib/libCamera_gc02m1bsymipiraw21690_Scene_Capture.so
-vendor/lib/libCamera_gc02m1bsymipiraw21690_Scene_Capture_4cell.so
-vendor/lib/libCamera_gc02m1bsymipiraw21690_Scene_Preview.so
-vendor/lib/libCamera_gc02m1bsymipiraw21690_Scene_Preview_4k.so
-vendor/lib/libCamera_gc02m1bsymipiraw21690_Scene_Preview_ZSD_Flash.so
-vendor/lib/libCamera_gc02m1bsymipiraw21690_Video_1080.so
-vendor/lib/libCamera_gc02m1bsymipiraw21690_Video_4k.so
-vendor/lib/libCamera_gc02m1hltmipiraw21690_E2EHDR_Preview.so
-vendor/lib/libCamera_gc02m1hltmipiraw21690_E2EHDR_Video.so
-vendor/lib/libCamera_gc02m1hltmipiraw21690_Face_Capture.so
-vendor/lib/libCamera_gc02m1hltmipiraw21690_Flash_Capture.so
-vendor/lib/libCamera_gc02m1hltmipiraw21690_HDR_Capture.so
-vendor/lib/libCamera_gc02m1hltmipiraw21690_HDR_Preview.so
-vendor/lib/libCamera_gc02m1hltmipiraw21690_HDR_Video.so
-vendor/lib/libCamera_gc02m1hltmipiraw21690_N3D_Capture.so
-vendor/lib/libCamera_gc02m1hltmipiraw21690_N3D_Preview.so
-vendor/lib/libCamera_gc02m1hltmipiraw21690_N3D_Video.so
-vendor/lib/libCamera_gc02m1hltmipiraw21690_P1_YUV.so
-vendor/lib/libCamera_gc02m1hltmipiraw21690_Scene_Capture.so
-vendor/lib/libCamera_gc02m1hltmipiraw21690_Scene_Capture_4cell.so
-vendor/lib/libCamera_gc02m1hltmipiraw21690_Scene_Preview.so
-vendor/lib/libCamera_gc02m1hltmipiraw21690_Scene_Preview_4k.so
-vendor/lib/libCamera_gc02m1hltmipiraw21690_Scene_Preview_ZSD_Flash.so
-vendor/lib/libCamera_gc02m1hltmipiraw21690_Video_1080.so
-vendor/lib/libCamera_gc02m1hltmipiraw21690_Video_4k.so
-vendor/lib/libCamera_gc02m1shinemipiraw21690_E2EHDR_Preview.so
-vendor/lib/libCamera_gc02m1shinemipiraw21690_E2EHDR_Video.so
-vendor/lib/libCamera_gc02m1shinemipiraw21690_Face_Capture.so
-vendor/lib/libCamera_gc02m1shinemipiraw21690_Flash_Capture.so
-vendor/lib/libCamera_gc02m1shinemipiraw21690_HDR_Capture.so
-vendor/lib/libCamera_gc02m1shinemipiraw21690_HDR_Preview.so
-vendor/lib/libCamera_gc02m1shinemipiraw21690_HDR_Video.so
-vendor/lib/libCamera_gc02m1shinemipiraw21690_N3D_Capture.so
-vendor/lib/libCamera_gc02m1shinemipiraw21690_N3D_Preview.so
-vendor/lib/libCamera_gc02m1shinemipiraw21690_N3D_Video.so
-vendor/lib/libCamera_gc02m1shinemipiraw21690_P1_YUV.so
-vendor/lib/libCamera_gc02m1shinemipiraw21690_Scene_Capture.so
-vendor/lib/libCamera_gc02m1shinemipiraw21690_Scene_Capture_4cell.so
-vendor/lib/libCamera_gc02m1shinemipiraw21690_Scene_Preview.so
-vendor/lib/libCamera_gc02m1shinemipiraw21690_Scene_Preview_4k.so
-vendor/lib/libCamera_gc02m1shinemipiraw21690_Scene_Preview_ZSD_Flash.so
-vendor/lib/libCamera_gc02m1shinemipiraw21690_Video_1080.so
-vendor/lib/libCamera_gc02m1shinemipiraw21690_Video_4k.so
-vendor/lib/libCamera_hi1634qmipiraw21690_3HDR_Preivew.so
-vendor/lib/libCamera_hi1634qmipiraw21690_3rd_Capture_1080P.so
-vendor/lib/libCamera_hi1634qmipiraw21690_3rd_Capture_480P.so
-vendor/lib/libCamera_hi1634qmipiraw21690_3rd_Capture_720P.so
-vendor/lib/libCamera_hi1634qmipiraw21690_3rd_Capture_Other.so
-vendor/lib/libCamera_hi1634qmipiraw21690_3rd_Preview_1080P.so
-vendor/lib/libCamera_hi1634qmipiraw21690_3rd_Preview_480P.so
-vendor/lib/libCamera_hi1634qmipiraw21690_3rd_Preview_720P.so
-vendor/lib/libCamera_hi1634qmipiraw21690_3rd_Preview_Other.so
-vendor/lib/libCamera_hi1634qmipiraw21690_FaceBeauty_Capture.so
-vendor/lib/libCamera_hi1634qmipiraw21690_FaceBeauty_Capture_Bining.so
-vendor/lib/libCamera_hi1634qmipiraw21690_FaceBeauty_Capture_NoFace.so
-vendor/lib/libCamera_hi1634qmipiraw21690_FaceBeauty_Scene_Preview.so
-vendor/lib/libCamera_hi1634qmipiraw21690_Face_Capture.so
-vendor/lib/libCamera_hi1634qmipiraw21690_Flash_Capture.so
-vendor/lib/libCamera_hi1634qmipiraw21690_ITS_1080P.so
-vendor/lib/libCamera_hi1634qmipiraw21690_Panorama.so
-vendor/lib/libCamera_hi1634qmipiraw21690_Production_Capture.so
-vendor/lib/libCamera_hi1634qmipiraw21690_Scene_Capture.so
-vendor/lib/libCamera_hi1634qmipiraw21690_Scene_Capture_Bining.so
-vendor/lib/libCamera_hi1634qmipiraw21690_Scene_Preview.so
-vendor/lib/libCamera_hi1634qmipiraw21690_SuperNight_Hand_Capture.so
-vendor/lib/libCamera_hi1634qmipiraw21690_SuperNight_Hand_Capture_Flash.so
-vendor/lib/libCamera_hi1634qmipiraw21690_Video_Recording_1080P.so
-vendor/lib/libCamera_hi1634qmipiraw21690_Video_Recording_720P.so
-vendor/lib/libCamera_hi1634qmipiraw21690_WeChatQQ_Capture_1080P.so
-vendor/lib/libCamera_hi1634qmipiraw21690_WeChatQQ_Capture_480P.so
-vendor/lib/libCamera_hi1634qmipiraw21690_WeChatQQ_Capture_720P.so
-vendor/lib/libCamera_hi1634qmipiraw21690_WeChatQQ_Preview_1080P.so
-vendor/lib/libCamera_hi1634qmipiraw21690_WeChatQQ_Preview_480P.so
-vendor/lib/libCamera_hi1634qmipiraw21690_WeChatQQ_Preview_720P.so
-vendor/lib/libCamera_hi1634qmipiraw21690_YUVHDR_Capture_Binning.so
-vendor/lib/libCamera_hi1634qmipiraw21690_YUVHDR_FaceBeauty_Capture_Binning.so
-vendor/lib/libCamera_hi1634qmipiraw21690_YUVHDR_FaceBeauty_Capture_Binning_NoFace.so
-vendor/lib/libCamera_hi1634qmipiraw21690_portrait_capture_Blurless.so
-vendor/lib/libCamera_hi1634qmipiraw21690_portrait_capture_Blurless_After.so
-vendor/lib/libCamera_hi1634qmipiraw21690_portrait_capture_full.so
-vendor/lib/libCamera_hi1634qmipiraw21690_portrait_capture_hdr.so
-vendor/lib/libCamera_hi1634qmipiraw21690_portrait_preview_full.so
-vendor/lib/libCamera_hi1634qmipiraw21690_zHDR_Capture_Binning.so
-vendor/lib/libCamera_imx350mipiraw_E2EHDR_Preview.so
-vendor/lib/libCamera_imx350mipiraw_E2EHDR_Video.so
-vendor/lib/libCamera_imx350mipiraw_Face_Capture.so
-vendor/lib/libCamera_imx350mipiraw_Flash_Capture.so
-vendor/lib/libCamera_imx350mipiraw_HDR_Capture.so
-vendor/lib/libCamera_imx350mipiraw_HDR_Preview.so
-vendor/lib/libCamera_imx350mipiraw_HDR_Video.so
-vendor/lib/libCamera_imx350mipiraw_N3D_Capture.so
-vendor/lib/libCamera_imx350mipiraw_N3D_Preview.so
-vendor/lib/libCamera_imx350mipiraw_N3D_Video.so
-vendor/lib/libCamera_imx350mipiraw_P1_YUV.so
-vendor/lib/libCamera_imx350mipiraw_Scene_Capture.so
-vendor/lib/libCamera_imx350mipiraw_Scene_Capture_4cell.so
-vendor/lib/libCamera_imx350mipiraw_Scene_Preview.so
-vendor/lib/libCamera_imx350mipiraw_Scene_Preview_4k.so
-vendor/lib/libCamera_imx350mipiraw_Scene_Preview_ZSD_Flash.so
-vendor/lib/libCamera_imx350mipiraw_Video_1080.so
-vendor/lib/libCamera_imx350mipiraw_Video_4k.so
-vendor/lib/libCamera_imx386mipimono_E2EHDR_Preview.so
-vendor/lib/libCamera_imx386mipimono_E2EHDR_Video.so
-vendor/lib/libCamera_imx386mipimono_Face_Capture.so
-vendor/lib/libCamera_imx386mipimono_Flash_Capture.so
-vendor/lib/libCamera_imx386mipimono_HDR_Capture.so
-vendor/lib/libCamera_imx386mipimono_HDR_Preview.so
-vendor/lib/libCamera_imx386mipimono_HDR_Video.so
-vendor/lib/libCamera_imx386mipimono_N3D_Capture.so
-vendor/lib/libCamera_imx386mipimono_N3D_Preview.so
-vendor/lib/libCamera_imx386mipimono_N3D_Video.so
-vendor/lib/libCamera_imx386mipimono_P1_YUV.so
-vendor/lib/libCamera_imx386mipimono_Scene_Capture.so
-vendor/lib/libCamera_imx386mipimono_Scene_Capture_4cell.so
-vendor/lib/libCamera_imx386mipimono_Scene_Preview.so
-vendor/lib/libCamera_imx386mipimono_Scene_Preview_4k.so
-vendor/lib/libCamera_imx386mipimono_Scene_Preview_ZSD_Flash.so
-vendor/lib/libCamera_imx386mipimono_Video_1080.so
-vendor/lib/libCamera_imx386mipimono_Video_4k.so
-vendor/lib/libCamera_imx386mipiraw_E2EHDR_Preview.so
-vendor/lib/libCamera_imx386mipiraw_E2EHDR_Video.so
-vendor/lib/libCamera_imx386mipiraw_Face_Capture.so
-vendor/lib/libCamera_imx386mipiraw_Flash_Capture.so
-vendor/lib/libCamera_imx386mipiraw_HDR_Capture.so
-vendor/lib/libCamera_imx386mipiraw_HDR_Preview.so
-vendor/lib/libCamera_imx386mipiraw_HDR_Video.so
-vendor/lib/libCamera_imx386mipiraw_N3D_Capture.so
-vendor/lib/libCamera_imx386mipiraw_N3D_Preview.so
-vendor/lib/libCamera_imx386mipiraw_N3D_Video.so
-vendor/lib/libCamera_imx386mipiraw_P1_YUV.so
-vendor/lib/libCamera_imx386mipiraw_Scene_Capture.so
-vendor/lib/libCamera_imx386mipiraw_Scene_Capture_4cell.so
-vendor/lib/libCamera_imx386mipiraw_Scene_Preview.so
-vendor/lib/libCamera_imx386mipiraw_Scene_Preview_4k.so
-vendor/lib/libCamera_imx386mipiraw_Scene_Preview_ZSD_Flash.so
-vendor/lib/libCamera_imx386mipiraw_Video_1080.so
-vendor/lib/libCamera_imx386mipiraw_Video_4k.so
-vendor/lib/libCamera_imx398mipiraw_E2EHDR_Preview.so
-vendor/lib/libCamera_imx398mipiraw_E2EHDR_Video.so
-vendor/lib/libCamera_imx398mipiraw_Face_Capture.so
-vendor/lib/libCamera_imx398mipiraw_Flash_Capture.so
-vendor/lib/libCamera_imx398mipiraw_HDR_Capture.so
-vendor/lib/libCamera_imx398mipiraw_HDR_Preview.so
-vendor/lib/libCamera_imx398mipiraw_HDR_Video.so
-vendor/lib/libCamera_imx398mipiraw_N3D_Capture.so
-vendor/lib/libCamera_imx398mipiraw_N3D_Preview.so
-vendor/lib/libCamera_imx398mipiraw_N3D_Video.so
-vendor/lib/libCamera_imx398mipiraw_P1_YUV.so
-vendor/lib/libCamera_imx398mipiraw_Scene_Capture.so
-vendor/lib/libCamera_imx398mipiraw_Scene_Capture_4cell.so
-vendor/lib/libCamera_imx398mipiraw_Scene_Preview.so
-vendor/lib/libCamera_imx398mipiraw_Scene_Preview_4k.so
-vendor/lib/libCamera_imx398mipiraw_Scene_Preview_ZSD_Flash.so
-vendor/lib/libCamera_imx398mipiraw_Video_1080.so
-vendor/lib/libCamera_imx398mipiraw_Video_4k.so
-vendor/lib/libCamera_imx481mipiraw_E2EHDR_Preview.so
-vendor/lib/libCamera_imx481mipiraw_E2EHDR_Video.so
-vendor/lib/libCamera_imx481mipiraw_Face_Capture.so
-vendor/lib/libCamera_imx481mipiraw_Flash_Capture.so
-vendor/lib/libCamera_imx481mipiraw_HDR_Capture.so
-vendor/lib/libCamera_imx481mipiraw_HDR_Preview.so
-vendor/lib/libCamera_imx481mipiraw_HDR_Video.so
-vendor/lib/libCamera_imx481mipiraw_N3D_Capture.so
-vendor/lib/libCamera_imx481mipiraw_N3D_Preview.so
-vendor/lib/libCamera_imx481mipiraw_N3D_Video.so
-vendor/lib/libCamera_imx481mipiraw_P1_YUV.so
-vendor/lib/libCamera_imx481mipiraw_Scene_Capture.so
-vendor/lib/libCamera_imx481mipiraw_Scene_Capture_4cell.so
-vendor/lib/libCamera_imx481mipiraw_Scene_Preview.so
-vendor/lib/libCamera_imx481mipiraw_Scene_Preview_4k.so
-vendor/lib/libCamera_imx481mipiraw_Scene_Preview_ZSD_Flash.so
-vendor/lib/libCamera_imx481mipiraw_Video_1080.so
-vendor/lib/libCamera_imx481mipiraw_Video_4k.so
-vendor/lib/libCamera_imx499mipiraw_E2EHDR_Preview.so
-vendor/lib/libCamera_imx499mipiraw_E2EHDR_Video.so
-vendor/lib/libCamera_imx499mipiraw_Face_Capture.so
-vendor/lib/libCamera_imx499mipiraw_Flash_Capture.so
-vendor/lib/libCamera_imx499mipiraw_HDR_Capture.so
-vendor/lib/libCamera_imx499mipiraw_HDR_Preview.so
-vendor/lib/libCamera_imx499mipiraw_HDR_Video.so
-vendor/lib/libCamera_imx499mipiraw_N3D_Capture.so
-vendor/lib/libCamera_imx499mipiraw_N3D_Preview.so
-vendor/lib/libCamera_imx499mipiraw_N3D_Video.so
-vendor/lib/libCamera_imx499mipiraw_P1_YUV.so
-vendor/lib/libCamera_imx499mipiraw_Scene_Capture.so
-vendor/lib/libCamera_imx499mipiraw_Scene_Capture_4cell.so
-vendor/lib/libCamera_imx499mipiraw_Scene_Preview.so
-vendor/lib/libCamera_imx499mipiraw_Scene_Preview_4k.so
-vendor/lib/libCamera_imx499mipiraw_Scene_Preview_ZSD_Flash.so
-vendor/lib/libCamera_imx499mipiraw_Video_1080.so
-vendor/lib/libCamera_imx499mipiraw_Video_4k.so
-vendor/lib/libCamera_imx519mipiraw_E2EHDR_Preview.so
-vendor/lib/libCamera_imx519mipiraw_E2EHDR_Video.so
-vendor/lib/libCamera_imx519mipiraw_Face_Capture.so
-vendor/lib/libCamera_imx519mipiraw_Flash_Capture.so
-vendor/lib/libCamera_imx519mipiraw_HDR_Capture.so
-vendor/lib/libCamera_imx519mipiraw_HDR_Preview.so
-vendor/lib/libCamera_imx519mipiraw_HDR_Video.so
-vendor/lib/libCamera_imx519mipiraw_N3D_Capture.so
-vendor/lib/libCamera_imx519mipiraw_N3D_Preview.so
-vendor/lib/libCamera_imx519mipiraw_N3D_Video.so
-vendor/lib/libCamera_imx519mipiraw_P1_YUV.so
-vendor/lib/libCamera_imx519mipiraw_Scene_Capture.so
-vendor/lib/libCamera_imx519mipiraw_Scene_Capture_4cell.so
-vendor/lib/libCamera_imx519mipiraw_Scene_Preview.so
-vendor/lib/libCamera_imx519mipiraw_Scene_Preview_4k.so
-vendor/lib/libCamera_imx519mipiraw_Scene_Preview_ZSD_Flash.so
-vendor/lib/libCamera_imx519mipiraw_Video_1080.so
-vendor/lib/libCamera_imx519mipiraw_Video_4k.so
-vendor/lib/libCamera_imx586mipiraw_E2EHDR_Preview.so
-vendor/lib/libCamera_imx586mipiraw_E2EHDR_Video.so
-vendor/lib/libCamera_imx586mipiraw_Face_Capture.so
-vendor/lib/libCamera_imx586mipiraw_Flash_Capture.so
-vendor/lib/libCamera_imx586mipiraw_HDR_Capture.so
-vendor/lib/libCamera_imx586mipiraw_HDR_Preview.so
-vendor/lib/libCamera_imx586mipiraw_HDR_Video.so
-vendor/lib/libCamera_imx586mipiraw_N3D_Capture.so
-vendor/lib/libCamera_imx586mipiraw_N3D_Preview.so
-vendor/lib/libCamera_imx586mipiraw_N3D_Video.so
-vendor/lib/libCamera_imx586mipiraw_P1_YUV.so
-vendor/lib/libCamera_imx586mipiraw_Scene_Capture.so
-vendor/lib/libCamera_imx586mipiraw_Scene_Capture_4cell.so
-vendor/lib/libCamera_imx586mipiraw_Scene_Preview.so
-vendor/lib/libCamera_imx586mipiraw_Scene_Preview_4k.so
-vendor/lib/libCamera_imx586mipiraw_Scene_Preview_ZSD_Flash.so
-vendor/lib/libCamera_imx586mipiraw_Video_1080.so
-vendor/lib/libCamera_imx586mipiraw_Video_1080_60.so
-vendor/lib/libCamera_imx586mipiraw_Video_4k.so
-vendor/lib/libCamera_ov02b1bmipimono21690_E2EHDR_Preview.so
-vendor/lib/libCamera_ov02b1bmipimono21690_E2EHDR_Video.so
-vendor/lib/libCamera_ov02b1bmipimono21690_Face_Capture.so
-vendor/lib/libCamera_ov02b1bmipimono21690_Flash_Capture.so
-vendor/lib/libCamera_ov02b1bmipimono21690_HDR_Capture.so
-vendor/lib/libCamera_ov02b1bmipimono21690_HDR_Preview.so
-vendor/lib/libCamera_ov02b1bmipimono21690_HDR_Video.so
-vendor/lib/libCamera_ov02b1bmipimono21690_N3D_Capture.so
-vendor/lib/libCamera_ov02b1bmipimono21690_N3D_Preview.so
-vendor/lib/libCamera_ov02b1bmipimono21690_N3D_Video.so
-vendor/lib/libCamera_ov02b1bmipimono21690_P1_YUV.so
-vendor/lib/libCamera_ov02b1bmipimono21690_Scene_Capture.so
-vendor/lib/libCamera_ov02b1bmipimono21690_Scene_Capture_4cell.so
-vendor/lib/libCamera_ov02b1bmipimono21690_Scene_Preview.so
-vendor/lib/libCamera_ov02b1bmipimono21690_Scene_Preview_4k.so
-vendor/lib/libCamera_ov02b1bmipimono21690_Scene_Preview_ZSD_Flash.so
-vendor/lib/libCamera_ov02b1bmipimono21690_Video_1080.so
-vendor/lib/libCamera_ov02b1bmipimono21690_Video_4k.so
-vendor/lib/libCamera_ov48bmipiraw_E2EHDR_Preview.so
-vendor/lib/libCamera_ov48bmipiraw_E2EHDR_Video.so
-vendor/lib/libCamera_ov48bmipiraw_Face_Capture.so
-vendor/lib/libCamera_ov48bmipiraw_Flash_Capture.so
-vendor/lib/libCamera_ov48bmipiraw_HDR_Capture.so
-vendor/lib/libCamera_ov48bmipiraw_HDR_Preview.so
-vendor/lib/libCamera_ov48bmipiraw_HDR_Video.so
-vendor/lib/libCamera_ov48bmipiraw_N3D_Capture.so
-vendor/lib/libCamera_ov48bmipiraw_N3D_Preview.so
-vendor/lib/libCamera_ov48bmipiraw_N3D_Video.so
-vendor/lib/libCamera_ov48bmipiraw_P1_YUV.so
-vendor/lib/libCamera_ov48bmipiraw_Scene_Capture.so
-vendor/lib/libCamera_ov48bmipiraw_Scene_Capture_4cell.so
-vendor/lib/libCamera_ov48bmipiraw_Scene_Preview.so
-vendor/lib/libCamera_ov48bmipiraw_Scene_Preview_4k.so
-vendor/lib/libCamera_ov48bmipiraw_Scene_Preview_ZSD_Flash.so
-vendor/lib/libCamera_ov48bmipiraw_Video_1080.so
-vendor/lib/libCamera_ov48bmipiraw_Video_4k.so
-vendor/lib/libCamera_ov64b40mipiraw21690_E2EHDR_Preview.so
-vendor/lib/libCamera_ov64b40mipiraw21690_E2EHDR_Video.so
-vendor/lib/libCamera_ov64b40mipiraw21690_Face_Capture.so
-vendor/lib/libCamera_ov64b40mipiraw21690_Flash_Capture.so
-vendor/lib/libCamera_ov64b40mipiraw21690_HDR_Capture.so
-vendor/lib/libCamera_ov64b40mipiraw21690_HDR_Preview.so
-vendor/lib/libCamera_ov64b40mipiraw21690_HDR_Video.so
-vendor/lib/libCamera_ov64b40mipiraw21690_N3D_Capture.so
-vendor/lib/libCamera_ov64b40mipiraw21690_N3D_Preview.so
-vendor/lib/libCamera_ov64b40mipiraw21690_N3D_Video.so
-vendor/lib/libCamera_ov64b40mipiraw21690_P1_YUV.so
-vendor/lib/libCamera_ov64b40mipiraw21690_Scene_Capture.so
-vendor/lib/libCamera_ov64b40mipiraw21690_Scene_Capture_4cell.so
-vendor/lib/libCamera_ov64b40mipiraw21690_Scene_Preview.so
-vendor/lib/libCamera_ov64b40mipiraw21690_Scene_Preview_4k.so
-vendor/lib/libCamera_ov64b40mipiraw21690_Scene_Preview_ZSD_Flash.so
-vendor/lib/libCamera_ov64b40mipiraw21690_Video_1080.so
-vendor/lib/libCamera_ov64b40mipiraw21690_Video_4k.so
-vendor/lib/libCamera_s5k2l7mipiraw_E2EHDR_Preview.so
-vendor/lib/libCamera_s5k2l7mipiraw_E2EHDR_Video.so
-vendor/lib/libCamera_s5k2l7mipiraw_Face_Capture.so
-vendor/lib/libCamera_s5k2l7mipiraw_Flash_Capture.so
-vendor/lib/libCamera_s5k2l7mipiraw_HDR_Capture.so
-vendor/lib/libCamera_s5k2l7mipiraw_HDR_Preview.so
-vendor/lib/libCamera_s5k2l7mipiraw_HDR_Video.so
-vendor/lib/libCamera_s5k2l7mipiraw_N3D_Capture.so
-vendor/lib/libCamera_s5k2l7mipiraw_N3D_Preview.so
-vendor/lib/libCamera_s5k2l7mipiraw_N3D_Video.so
-vendor/lib/libCamera_s5k2l7mipiraw_P1_YUV.so
-vendor/lib/libCamera_s5k2l7mipiraw_Scene_Capture.so
-vendor/lib/libCamera_s5k2l7mipiraw_Scene_Capture_4cell.so
-vendor/lib/libCamera_s5k2l7mipiraw_Scene_Preview.so
-vendor/lib/libCamera_s5k2l7mipiraw_Scene_Preview_4k.so
-vendor/lib/libCamera_s5k2l7mipiraw_Scene_Preview_ZSD_Flash.so
-vendor/lib/libCamera_s5k2l7mipiraw_Video_1080.so
-vendor/lib/libCamera_s5k2l7mipiraw_Video_4k.so
-vendor/lib/libCamera_s5k2t7spmipiraw_E2EHDR_Preview.so
-vendor/lib/libCamera_s5k2t7spmipiraw_E2EHDR_Video.so
-vendor/lib/libCamera_s5k2t7spmipiraw_Face_Capture.so
-vendor/lib/libCamera_s5k2t7spmipiraw_Flash_Capture.so
-vendor/lib/libCamera_s5k2t7spmipiraw_HDR_Capture.so
-vendor/lib/libCamera_s5k2t7spmipiraw_HDR_Preview.so
-vendor/lib/libCamera_s5k2t7spmipiraw_HDR_Video.so
-vendor/lib/libCamera_s5k2t7spmipiraw_N3D_Capture.so
-vendor/lib/libCamera_s5k2t7spmipiraw_N3D_Preview.so
-vendor/lib/libCamera_s5k2t7spmipiraw_N3D_Video.so
-vendor/lib/libCamera_s5k2t7spmipiraw_P1_YUV.so
-vendor/lib/libCamera_s5k2t7spmipiraw_Scene_Capture.so
-vendor/lib/libCamera_s5k2t7spmipiraw_Scene_Capture_4cell.so
-vendor/lib/libCamera_s5k2t7spmipiraw_Scene_Preview.so
-vendor/lib/libCamera_s5k2t7spmipiraw_Scene_Preview_4k.so
-vendor/lib/libCamera_s5k2t7spmipiraw_Scene_Preview_ZSD_Flash.so
-vendor/lib/libCamera_s5k2t7spmipiraw_Video_1080.so
-vendor/lib/libCamera_s5k2t7spmipiraw_Video_4k.so
-vendor/lib/libCamera_s5k3m5sxmipiraw_E2EHDR_Preview.so
-vendor/lib/libCamera_s5k3m5sxmipiraw_E2EHDR_Video.so
-vendor/lib/libCamera_s5k3m5sxmipiraw_Face_Capture.so
-vendor/lib/libCamera_s5k3m5sxmipiraw_Flash_Capture.so
-vendor/lib/libCamera_s5k3m5sxmipiraw_HDR_Capture.so
-vendor/lib/libCamera_s5k3m5sxmipiraw_HDR_Preview.so
-vendor/lib/libCamera_s5k3m5sxmipiraw_HDR_Video.so
-vendor/lib/libCamera_s5k3m5sxmipiraw_N3D_Capture.so
-vendor/lib/libCamera_s5k3m5sxmipiraw_N3D_Preview.so
-vendor/lib/libCamera_s5k3m5sxmipiraw_N3D_Video.so
-vendor/lib/libCamera_s5k3m5sxmipiraw_P1_YUV.so
-vendor/lib/libCamera_s5k3m5sxmipiraw_Scene_Capture.so
-vendor/lib/libCamera_s5k3m5sxmipiraw_Scene_Capture_4cell.so
-vendor/lib/libCamera_s5k3m5sxmipiraw_Scene_Preview.so
-vendor/lib/libCamera_s5k3m5sxmipiraw_Scene_Preview_4k.so
-vendor/lib/libCamera_s5k3m5sxmipiraw_Scene_Preview_ZSD_Flash.so
-vendor/lib/libCamera_s5k3m5sxmipiraw_Video_1080.so
-vendor/lib/libCamera_s5k3m5sxmipiraw_Video_4k.so
-vendor/lib/libCamera_s5k3p9spmipiraw21690_3HDR_Preivew.so
-vendor/lib/libCamera_s5k3p9spmipiraw21690_3rd_Capture_1080P.so
-vendor/lib/libCamera_s5k3p9spmipiraw21690_3rd_Capture_480P.so
-vendor/lib/libCamera_s5k3p9spmipiraw21690_3rd_Capture_720P.so
-vendor/lib/libCamera_s5k3p9spmipiraw21690_3rd_Capture_Other.so
-vendor/lib/libCamera_s5k3p9spmipiraw21690_3rd_Preview_1080P.so
-vendor/lib/libCamera_s5k3p9spmipiraw21690_3rd_Preview_480P.so
-vendor/lib/libCamera_s5k3p9spmipiraw21690_3rd_Preview_720P.so
-vendor/lib/libCamera_s5k3p9spmipiraw21690_3rd_Preview_Other.so
-vendor/lib/libCamera_s5k3p9spmipiraw21690_FaceBeauty_Capture.so
-vendor/lib/libCamera_s5k3p9spmipiraw21690_FaceBeauty_Capture_Bining.so
-vendor/lib/libCamera_s5k3p9spmipiraw21690_FaceBeauty_Capture_NoFace.so
-vendor/lib/libCamera_s5k3p9spmipiraw21690_FaceBeauty_Scene_Preview.so
-vendor/lib/libCamera_s5k3p9spmipiraw21690_Face_Capture.so
-vendor/lib/libCamera_s5k3p9spmipiraw21690_Flash_Capture.so
-vendor/lib/libCamera_s5k3p9spmipiraw21690_ITS_1080P.so
-vendor/lib/libCamera_s5k3p9spmipiraw21690_Panorama.so
-vendor/lib/libCamera_s5k3p9spmipiraw21690_Production_Capture.so
-vendor/lib/libCamera_s5k3p9spmipiraw21690_Scene_Capture.so
-vendor/lib/libCamera_s5k3p9spmipiraw21690_Scene_Capture_Bining.so
-vendor/lib/libCamera_s5k3p9spmipiraw21690_Scene_Preview.so
-vendor/lib/libCamera_s5k3p9spmipiraw21690_SuperNight_Hand_Capture.so
-vendor/lib/libCamera_s5k3p9spmipiraw21690_SuperNight_Hand_Capture_Flash.so
-vendor/lib/libCamera_s5k3p9spmipiraw21690_Video_Recording_1080P.so
-vendor/lib/libCamera_s5k3p9spmipiraw21690_Video_Recording_720P.so
-vendor/lib/libCamera_s5k3p9spmipiraw21690_WeChatQQ_Capture_1080P.so
-vendor/lib/libCamera_s5k3p9spmipiraw21690_WeChatQQ_Capture_480P.so
-vendor/lib/libCamera_s5k3p9spmipiraw21690_WeChatQQ_Capture_720P.so
-vendor/lib/libCamera_s5k3p9spmipiraw21690_WeChatQQ_Preview_1080P.so
-vendor/lib/libCamera_s5k3p9spmipiraw21690_WeChatQQ_Preview_480P.so
-vendor/lib/libCamera_s5k3p9spmipiraw21690_WeChatQQ_Preview_720P.so
-vendor/lib/libCamera_s5k3p9spmipiraw21690_YUVHDR_Capture_Binning.so
-vendor/lib/libCamera_s5k3p9spmipiraw21690_YUVHDR_FaceBeauty_Capture_Binning.so
-vendor/lib/libCamera_s5k3p9spmipiraw21690_YUVHDR_FaceBeauty_Capture_Binning_NoFace.so
-vendor/lib/libCamera_s5k3p9spmipiraw21690_portrait_capture_Blurless.so
-vendor/lib/libCamera_s5k3p9spmipiraw21690_portrait_capture_Blurless_After.so
-vendor/lib/libCamera_s5k3p9spmipiraw21690_portrait_capture_full.so
-vendor/lib/libCamera_s5k3p9spmipiraw21690_portrait_capture_hdr.so
-vendor/lib/libCamera_s5k3p9spmipiraw21690_portrait_preview_full.so
-vendor/lib/libCamera_s5k3p9spmipiraw21690_zHDR_Capture_Binning.so
-vendor/lib/libCamera_s5k3p9spmipiraw_E2EHDR_Preview.so
-vendor/lib/libCamera_s5k3p9spmipiraw_E2EHDR_Video.so
-vendor/lib/libCamera_s5k3p9spmipiraw_Face_Capture.so
-vendor/lib/libCamera_s5k3p9spmipiraw_Flash_Capture.so
-vendor/lib/libCamera_s5k3p9spmipiraw_HDR_Capture.so
-vendor/lib/libCamera_s5k3p9spmipiraw_HDR_Preview.so
-vendor/lib/libCamera_s5k3p9spmipiraw_HDR_Video.so
-vendor/lib/libCamera_s5k3p9spmipiraw_N3D_Capture.so
-vendor/lib/libCamera_s5k3p9spmipiraw_N3D_Preview.so
-vendor/lib/libCamera_s5k3p9spmipiraw_N3D_Video.so
-vendor/lib/libCamera_s5k3p9spmipiraw_P1_YUV.so
-vendor/lib/libCamera_s5k3p9spmipiraw_Scene_Capture.so
-vendor/lib/libCamera_s5k3p9spmipiraw_Scene_Capture_4cell.so
-vendor/lib/libCamera_s5k3p9spmipiraw_Scene_Preview.so
-vendor/lib/libCamera_s5k3p9spmipiraw_Scene_Preview_4k.so
-vendor/lib/libCamera_s5k3p9spmipiraw_Scene_Preview_ZSD_Flash.so
-vendor/lib/libCamera_s5k3p9spmipiraw_Video_1080.so
-vendor/lib/libCamera_s5k3p9spmipiraw_Video_4k.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_3rd_Capture.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_3rd_Preview.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_3rd_Video.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_50M_Capture.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_50M_Capture_Face.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_CoupleHDR_EV_single.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_CoupleHDR_EV_single_Face.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_E2EHDR_Preview.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_E2EHDR_Video.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_Face_Capture.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_Face_Preview_Zoom2x.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_Face_Preview_Zoom4x.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_Flash_Capture.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_Flash_Capture_Face.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_HDR_Capture.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_HDR_Preview.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_HDR_Video.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_HDR_single.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_HDR_single_Face.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_ITS_Capture.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_N3D_Capture.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_N3D_Preview.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_N3D_Video.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_P1_YUV.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_Panorama_Capture.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_Portrait_capture.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_Portrait_capture_hdr.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_Production_Capture.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_Professional_Capture.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_Professional_Capture_Face.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_Remosaic_Capture.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_Scece_Capture_Food.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_Scece_Capture_Grass.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_Scene_Capture.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_Scene_Capture_4cell.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_Scene_Preview.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_Scene_Preview_4k.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_Scene_Preview_4k_Zoom2x.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_Scene_Preview_4k_Zoom4x.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_Scene_Preview_Zoom2x.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_Scene_Preview_Zoom4x.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_SlowMotion_1080P.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_SlowMotion_1080P_Zoom.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_SlowMotion_720P.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_SlowMotion_720P_Zoom.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_SuperNight_Hand_Capture.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_SuperNight_Hand_Capture_Face.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_SuperNight_Hand_Capture_Face_Zoom2x.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_SuperNight_Hand_Capture_Face_Zoom4x.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_SuperNight_Hand_Capture_Zoom2x.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_SuperNight_Hand_Capture_Zoom4x.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_Video_1080.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_Video_1080P.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_Video_1080P_60fps.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_Video_1080P_60fps_Zoom2x.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_Video_1080P_60fps_Zoom4x.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_Video_1080P_Zoom2x.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_Video_1080P_Zoom4x.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_Video_4k.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_Video_4k_Zoom2x.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_Video_4k_Zoom4x.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_Video_720P.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_Video_720P_60fps.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_Video_720P_60fps_Zoom2x.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_Video_720P_60fps_Zoom4x.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_Video_720P_Zoom2x.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_Video_720P_Zoom4x.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_WechatQQ_Capture.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_WechatQQ_Preview.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_WechatQQ_Video.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_YUV_Reprocess_Capture.so
-vendor/lib/libCamera_s5kjn1mipiraw21690_Zoom_Capture2.so
-vendor/lib/libSQLiteModule_VER_ALL.so
-vendor/lib/libSonyIMX230PdafLibrary.so
-vendor/lib/libSonyIMX230PdafLibraryWrapper.so
-vendor/lib/libSonyIMX338PdafLibrary.so
-vendor/lib/libSonyIMX338PdafLibraryWrapper.so
-vendor/lib/libSonyIMX386PdafLibrary.so
-vendor/lib/libSonyIMX386PdafLibraryWrapper.so
-vendor/lib/libSonyIMX519PdafLibrary.so
-vendor/lib/libSonyIMX519PdafLibraryWrapper.so
-vendor/lib/libaaa_ltm.so
-vendor/lib/libaaa_ltmx.so
-vendor/lib/libaal_cust.so
-vendor/lib/libaal_key.so
-vendor/lib/libaal_mtk.so
-vendor/lib/libaalservice.so
-vendor/lib/libaiawb_moon.so
-vendor/lib/libaiawb_moon_model.so
-vendor/lib/libaiawb_p1ggm.so
-vendor/lib/libaiawb_sun.so
-vendor/lib/libaiawb_sun_model.so
-vendor/lib/libasn1c_core.so
-vendor/lib/libasn1c_mapi.so
-vendor/lib/libasn1c_mdmi.so
-vendor/lib/libcam.afhal.so
-vendor/lib/libcam.feature_utils.so
-vendor/lib/libcam.hal3a.log.so
-vendor/lib/libcam.hal3a.v3.ae.so
-vendor/lib/libcam.hal3a.v3.ai3a.so
-vendor/lib/libcam.hal3a.v3.awb.so
-vendor/lib/libcam.hal3a.v3.fsmgr.so
-vendor/lib/libcam.hal3a.v3.lscMgr.so
-vendor/lib/libcam.hal3a.v3.lsctbl.50.so
-vendor/lib/libcam.hal3a.v3.nvram.50.so
-vendor/lib/libcam.hal3a.v3.platform.so
-vendor/lib/libcam.hal3a.v3.resultpool.so
-vendor/lib/libcam.hal3a.v3.so
-vendor/lib/libcam.halisp.buf.so
-vendor/lib/libcam.halsensor.hwintegration.so
-vendor/lib/libcam.halsensor.so
-vendor/lib/libcam.iopipe.so
-vendor/lib/libcam.isptuning.so
-vendor/lib/libcam.pdtblgen.so
-vendor/lib/libcam.seninfn3d.so
-vendor/lib/libcam.tuning.cache.so
-vendor/lib/libcam.utils.sensorprovider.so
-vendor/lib/libcam.vhdr.so
-vendor/lib/libcamalgo.3dnr.so
-vendor/lib/libcamalgo.dngop.so
-vendor/lib/libcamalgo.eis.so
-vendor/lib/libcamalgo.fdft.so
-vendor/lib/libcamalgo.fsc.so
-vendor/lib/libcamalgo.gyro.so
-vendor/lib/libcamalgo.ispfeature.so
-vendor/lib/libcamalgo.lmv.so
-vendor/lib/libcamalgo.lsc.so
-vendor/lib/libcamalgo.mfnr.so
-vendor/lib/libcamalgo.nr.so
-vendor/lib/libcamalgo.platform.so
-vendor/lib/libcamalgo.platform2.so
-vendor/lib/libcamalgo.utility.so
-vendor/lib/libcamalgo.warp.so
-vendor/lib/libcamdrv_imem.so
-vendor/lib/libcamdrv_isp.so
-vendor/lib/libcamdrv_tuning_mgr.so
-vendor/lib/libcamdrv_twin.so
-vendor/lib/libcamera.custom.pd_buf_mgr.so
-vendor/lib/libcamera.customae.so
-vendor/lib/libcamera.customaf.so
-vendor/lib/libcamera.customawb.so
-vendor/lib/libcamera.customflk.so
-vendor/lib/libcamera2ndk_vendor.so
-vendor/lib/libcamera_core_hwi.so
-vendor/lib/libcameracustom.camera.3a.so
-vendor/lib/libcameracustom.camera.isp.so
-vendor/lib/libcameracustom.camera.sensors.so
-vendor/lib/libcameracustom.eis.so
-vendor/lib/libcameracustom.flashlight.so
-vendor/lib/libcameracustom.lens.so
-vendor/lib/libcameracustom.so
-vendor/lib/libchromanr.so
-vendor/lib/libcustomer_cameradata.so
-vendor/lib/libcustomer_testvision.so
-vendor/lib/libdip_drv.so
-vendor/lib/libdip_imem.so
-vendor/lib/libdip_postproc.so
-vendor/lib/libdre.so
-vendor/lib/libeffecthal.base.so
-vendor/lib/libfeature.face.so
-vendor/lib/libfeature.stereo.provider.so
-vendor/lib/libfeature_3dnr.so
-vendor/lib/libfeature_eis.so
-vendor/lib/libfeature_fsc.so
-vendor/lib/libfeature_lmv.so
-vendor/lib/libfeature_rss.so
-vendor/lib/libfeatureiodrv_mem.so
-vendor/lib/libimagebuffer_wrapper.so
-vendor/lib/libm4u.so
-vendor/lib/libmtkcam.atmseventmgr.so
-vendor/lib/libmtkcam.eventcallback.so
-vendor/lib/libmtkcam.featurepipe.capture.so
-vendor/lib/libmtkcam.featurepipe.streaming.so
-vendor/lib/libmtkcam.featurepipe.vsdof_util.so
-vendor/lib/libmtkcam.logicalmodule.so
-vendor/lib/libmtkcam_3rdparty.core.so
-vendor/lib/libmtkcam_3rdparty.customer.so
-vendor/lib/libmtkcam_3rdparty.mtk.so
-vendor/lib/libmtkcam_3rdparty.so
-vendor/lib/libmtkcam_calibration_convertor.so
-vendor/lib/libmtkcam_calibration_provider.so
-vendor/lib/libmtkcam_calibration_provider.so
-vendor/lib/libmtkcam_debugutils.so
-vendor/lib/libmtkcam_diputils.so
-vendor/lib/libmtkcam_exif.so
-vendor/lib/libmtkcam_exif.so
-vendor/lib/libmtkcam_fdvt.so
-vendor/lib/libmtkcam_grallocutils.so
-vendor/lib/libmtkcam_hwnode.so
-vendor/lib/libmtkcam_hwutils.so
-vendor/lib/libmtkcam_imgbuf.so
-vendor/lib/libmtkcam_mapping_mgr.so
-vendor/lib/libmtkcam_metadata.so
-vendor/lib/libmtkcam_metastore.so
-vendor/lib/libmtkcam_mfb.so
-vendor/lib/libmtkcam_modulehelper.so
-vendor/lib/libmtkcam_pipeline.so
-vendor/lib/libmtkcam_pipeline_fbm.so
-vendor/lib/libmtkcam_pipelinemodel_isp.so
-vendor/lib/libmtkcam_prerelease.so
-vendor/lib/libmtkcam_rsc.so
-vendor/lib/libmtkcam_scenariorecorder.so
-vendor/lib/libmtkcam_stdutils.so
-vendor/lib/libmtkcam_streamutils.so
-vendor/lib/libmtkcam_synchelper.so
-vendor/lib/libmtkcam_sysutils.so
-vendor/lib/libmtkcam_tuning_utils.so
-vendor/lib/libmtkcam_ulog.so
-vendor/lib/libmtkisp_metadata.so
-vendor/lib/libnxp_extamp_intf.so
-vendor/lib/libocam_common.so
-vendor/lib/liboplus.aishutter.so
-vendor/lib/liboplus_mtkcam_lightsensorprovider.so
-vendor/lib/liboplus_platform_hwi.so
-vendor/lib/libstereoinfoaccessor_vsdof.so
-vendor/lib/ov02b1b_mipi_mono_21690_IdxMgr.so
-vendor/lib/ov02b1b_mipi_mono_21690_tuning.so
-vendor/lib/ov48b_mipi_raw_IdxMgr.so
-vendor/lib/ov48b_mipi_raw_tuning.so
-vendor/lib/ov64b40_mipi_raw_21690_IdxMgr.so
-vendor/lib/ov64b40_mipi_raw_21690_tuning.so
-vendor/lib/s5k2l7_mipi_raw_IdxMgr.so
-vendor/lib/s5k2l7_mipi_raw_tuning.so
-vendor/lib/s5k2t7sp_mipi_raw_IdxMgr.so
-vendor/lib/s5k2t7sp_mipi_raw_tuning.so
-vendor/lib/s5k3m5sx_mipi_raw_IdxMgr.so
-vendor/lib/s5k3m5sx_mipi_raw_tuning.so
-vendor/lib/s5k3p9sp_mipi_raw_21690_IdxMgr.so
-vendor/lib/s5k3p9sp_mipi_raw_21690_tuning.so
-vendor/lib/s5k3p9sp_mipi_raw_IdxMgr.so
-vendor/lib/s5k3p9sp_mipi_raw_tuning.so
-vendor/lib/s5kjn1_mipi_raw_21690_IdxMgr.so
-vendor/lib/s5kjn1_mipi_raw_21690_tuning.so
-vendor/lib/vendor.mediatek.hardware.camera.atms@1.0.so
-vendor/lib/vendor.mediatek.hardware.camera.bgservice@1.0.so
-vendor/lib/vendor.mediatek.hardware.camera.bgservice@1.1.so
-vendor/lib/vendor.mediatek.hardware.camera.isphal@1.0.so
-vendor/lib/vendor.mediatek.hardware.camera.postproc@1.0.so
vendor/lib64/hw/android.hardware.camera.provider@2.6-impl-mediatek.so
vendor/lib64/hw/vendor.mediatek.hardware.camera.atms@1.0-impl.so
vendor/lib64/hw/vendor.mediatek.hardware.camera.bgservice@1.1-impl.so
@@ -1926,7 +1226,7 @@ vendor/lib64/vendor.oplus.hardware.cameraextension@1.0.so
vendor/lib64/vendor.oplus.hardware.cammidasservice@1.0.so
# Camera Feature Policy - from RMX3085EEA_11_C.11
-vendor/lib64/libmtkcam_featurepolicy.so|c539aa55b40a60ac82a9f5791b0e82cc331ec2fa|54a902eb3c3ef3518b806fc0732f0af49f537500
+vendor/lib64/libmtkcam_featurepolicy.so|e3e7cdfdff5d364e0cb17d3a6373be004c6b3787
# Camera configs
odm/etc/camera/tonemap/curve_lut_0
@@ -2232,22 +1532,6 @@ odm/firmware/awinic_haptic_params.bin
odm/bin/hw/vendor.oplus.hardware.biometrics.fingerprint@2.1-service
odm/etc/init/vendor.oplus.hardware.biometrics.fingerprint@2.1-service.rc
odm/etc/vintf/manifest/manifest_oplus_fingerprint.xml
-odm/lib/hw/fingerprint.goodix_G2.default.so
-odm/lib/hw/fingerprint.goodix_G3.default.so
-odm/lib/hw/fingerprint.goodix_G5.default.so
-odm/lib/hw/fingerprint.goodix_G6.default.so
-odm/lib/hw/fingerprint.goodix_G7.default.so
-odm/lib/hw/fingerprint.silead.default.so
-odm/lib/anc.capacitive.hal.so
-odm/lib/anc.hal.so
-odm/lib/libgf_hal_G2.so
-odm/lib/libgf_hal_G3.so
-odm/lib/libgf_hal_G5.so
-odm/lib/libgf_hal_G6.so
-odm/lib/libgf_hal_G7.so
-odm/lib/libsl_fp_impl.so
-odm/lib/vendor.oplus.hardware.biometrics.fingerprint@2.1.so
-odm/lib/vendor.oplus.hardware.commondcs@1.0.so
odm/lib64/hw/fingerprint.focaltech.default.so
odm/lib64/hw/fingerprint.goodix_G2.default.so
odm/lib64/hw/fingerprint.goodix_G3.default.so
@@ -2310,51 +1594,46 @@ vendor/lib/libfgauge_gm30.so
-my_product/framework/com.android.hotwordenrollment.common.util.jar:system_ext/framework/com.android.hotwordenrollment.common.util.jar
-my_product/priv-app/HotwordEnrollmentOKGoogleCORTEXM4.apk:product/priv-app/HotwordEnrollmentOKGoogleCORTEXM4/HotwordEnrollmentOKGoogleCORTEXM4.apk
-# IMS - from TECNO-CK9n UP1A.230519.001
+# MTK-IMS - from plato-user 14 UP1A.230620.001 V14.0.7.0.ULQMIXM release-keys
+-system_ext/framework/mediatek-common.jar:system/framework/mediatek-common.jar|65cb5b86acb0eb42bb3ec2987e1d80a88ea0756a
+-system_ext/framework/mediatek-framework.jar:system/framework/mediatek-framework.jar|e1820712befe75673d4efc6f4a64b86ada611084
+-system_ext/framework/mediatek-ims-base.jar:system/framework/mediatek-ims-base.jar|5ed1d48593c8965cfb4fedf85d4c4721ba258004
+-system_ext/framework/mediatek-ims-common.jar:system/framework/mediatek-ims-common.jar|14751a70a5d59f23c0f015951f7cb08922377701
+-system_ext/framework/mediatek-ims-extension-plugin.jar:system/framework/mediatek-ims-extension-plugin.jar|fbadb06fbf2762b181e15c88cbd7ae299a89be71
+-system_ext/framework/mediatek-telecom-common.jar:system/framework/mediatek-telecom-common.jar|343f45b7582f53e310c484152cbb722a45e4888a
+-system_ext/framework/mediatek-telephony-base.jar:system/framework/mediatek-telephony-base.jar|c4d5b15a3457afa564b3a09b751321fc52a62c5c
+-system_ext/framework/mediatek-telephony-common.jar:system/framework/mediatek-telephony-common.jar|84d7bb8cd3a845cfd8bbea3772f28371d28bbd8b
system_ext/bin/vtservice|59adc81ee1ad1f3fb4942cd6e8e7100325002eb2
system_ext/etc/init/init.vtservice.rc|50a2249906edc06059b443513db47a2ddc0490dc
system_ext/lib64/libcomutils.so|6d9cd979f33ef01cb26861a38a59e76e1c2a3acb
-system_ext/lib64/libimsma.so|932cbe88083fae23b159bf0e3fe17d7efb93495b
-system_ext/lib64/libimsma_adapt.so|754ad1c39fb4dba9d3eb69ac00112e7600d68580
-system_ext/lib64/libimsma_rtp.so|20ee91f090661fb26e6625ad2fef828441956b82
+system_ext/lib64/libimsma_adapt.so|b95939f797ba52d87bb9fa6ebf356e0fb4fcfe56
+system_ext/lib64/libimsma_rtp.so|02b33fba68211362b439bb05a965ba6e01fa3ea0
system_ext/lib64/libimsma_socketwrapper.so|1f9b83322c41e5b0a7b3130f74a38ddb14f578d8
-system_ext/lib64/libmtk_vt_service.so|302d3ab3c5b3fa0107520fe36098b32cd0a8dd96
-system_ext/lib64/libmtk_vt_wrapper.so|af4d486c516c920ea99c362aebbf04180e96035c
+system_ext/lib64/libimsma.so|547ffdd8a8d57d6624b69eb27ac0e1642aab09bc
+system_ext/lib64/libmtk_vt_service.so|c46d43d49fb35e21cb34cdea1f33ad4b964e2f22
+system_ext/lib64/libmtk_vt_wrapper.so|b6f8737a084431cdd8d77c9188e176b7e9364876
system_ext/lib64/libsignal.so|0f55bb64c660fe4cda2b695121580b054f026e73
-system_ext/lib64/libsink.so|6bd8c55847116a9a37e223ea2a6e5ce1379e53f7
-system_ext/lib64/libsource.so|66a481fd2e260a820899d60cf9190fb986d36768
-system_ext/lib64/libvcodec_cap.so|6973253cb2e4ddf365451ed2ac8db9d04085bc4a
-system_ext/lib64/libvcodec_capenc.so|5527525dfcd25169bc380ac53d8181ffa1429c6f
+system_ext/lib64/libsink.so|94972e8c36b576cbe74ecefbe72526714c1e1e16
+system_ext/lib64/libsource.so|5631ce7ae59ccd3c383b5f6d42bad8e22afd8e93
+system_ext/lib64/libvcodec_cap.so|0165b65cd33fd3905ef3f569ff36bf119b27c13d
+system_ext/lib64/libvcodec_capenc.so|3b5e76522a7331248c2864493fdade2bdf73c4c3
system_ext/lib64/libvt_avsync.so|632cb05532ef2e022072d91bff3c1ae47c888b7e
-system_ext/lib64/vendor.mediatek.hardware.videotelephony-V1-ndk.so|fc3f645734d4e37fa50b77233d63c7b2eb166014
-system_ext/lib64/vendor.mediatek.hardware.videotelephony@1.0.so|aee568e770a3835af2df2262c9dc8bb2911da324
-vendor/bin/hw/vtservice_hidl|047b26f80b338b7d0869840d243eefebe82d56f5
-vendor/etc/init/init.vtservice_hidl.rc|f2e992214ed5bb99c2c2a135cf1f0996dba8a8a0
-vendor/lib64/hw/vendor.mediatek.hardware.videotelephony@1.0-impl.so|bb9ff554802e7bffb72cf24604109dafcf0019fc
-vendor/lib64/vendor.mediatek.hardware.videotelephony@1.0.so|5e228669d2c575e38fc02a13404f31bc22494b87
+system_ext/lib64/vendor.mediatek.hardware.videotelephony-V1-ndk.so|b4733a99049d5162e41955bca80cc78b8ca76c53
+system_ext/lib64/vendor.mediatek.hardware.videotelephony@1.0.so|1385634094de90c59b9f689d313b6b3ee8770efe
+
+# MTK-IMS (App) - from plato-user 14 UP1A.230620.001 V14.0.7.0.ULQMIXM release-keys (patched)
+system_ext/priv-app/ImsService/ImsService.apk:system/priv-app/ImsService/ImsService.apk|62e6a0c457812366623630dffef27b0bf5ca7fad
# IMS
--framework/mediatek-common.jar
--framework/mediatek-framework.jar
-framework/mediatek-gwsd.jar
-framework/mediatek-gwsdv2.jar
--framework/mediatek-ims-base.jar
--framework/mediatek-ims-common.jar
-framework/mediatek-ims-extension-plugin.jar
--framework/mediatek-telecom-common.jar
--framework/mediatek-telephony-base.jar
--framework/mediatek-telephony-common.jar
odm/lib/vendor.oplus.hardware.ims@1.0.so
odm/lib64/vendor.oplus.hardware.ims@1.0.so
vendor/bin/hw/vendor.mediatek.hardware.mmagent@1.1-service
+vendor/bin/hw/vtservice_hidl
vendor/bin/ipsec_mon
vendor/bin/lbs_hidl_service
-vendor/bin/rcs_volte_stack
-vendor/bin/volte_clientapi_ua
vendor/bin/volte_imcb
vendor/bin/volte_imsm_93
vendor/bin/volte_md_status
-vendor/bin/volte_rcs_ua
vendor/bin/volte_stack
vendor/bin/volte_ua
vendor/bin/xcap
@@ -2363,22 +1642,19 @@ vendor/etc/init/init.volte_imsm_93.rc
vendor/etc/init/init.volte_md_status.rc
vendor/etc/init/init.volte_stack.rc
vendor/etc/init/init.volte_ua.rc
+vendor/etc/init/init.vtservice_hidl.rc
vendor/etc/init/init.xcap.rc
vendor/etc/init/ipsec_mon.rc
vendor/etc/init/lbs_hidl_service.rc
vendor/etc/init/vendor.mediatek.hardware.mmagent@1.1-service.rc
-vendor/etc/init/volte_clientapi_ua.rc
-vendor/etc/vintf/manifest/lbs_hidl_service@1.0.xml
vendor/lib/libipsec_ims_shr.so
vendor/lib/librcs_interface.so
-vendor/lib/librcs_volte_core.so
vendor/lib/libverno.so
vendor/lib/libvolte_core_shr.so
vendor/lib/libvolte_xdmc_shr.so
vendor/lib/libvt_custom.so
-vendor/lib/vendor.mediatek.hardware.rcs@2.0.so
vendor/lib64/lbs_hidl_service-impl.so
-vendor/lib64/libipsec_ims_shr.so
vendor/lib64/libmmagent.so
vendor/lib64/libmtklimiter_vendor.so
vendor/lib64/libmtknetcap.so
@@ -2387,13 +1663,12 @@ vendor/lib64/libmtkshifter_vendor.so
vendor/lib64/libmtkspparser.so
vendor/lib64/libmtksysutils.so
vendor/lib64/libverno.so
-vendor/lib64/vendor.mediatek.hardware.clientapi@1.0.so
+vendor/lib64/libipsec_ims_shr.so
+vendor/lib64/hw/vendor.mediatek.hardware.videotelephony@1.0-impl.so
vendor/lib64/vendor.mediatek.hardware.lbs@1.0.so
vendor/lib64/vendor.mediatek.hardware.mmagent@1.0.so
vendor/lib64/vendor.mediatek.hardware.mmagent@1.1.so
-
-# ImsService
--priv-app/ImsService/ImsService.apk|738b92467c052c0e95ee3fd748bde51ab0b90336
+vendor/lib64/vendor.mediatek.hardware.videotelephony@1.0.so
# Keymaster
vendor/bin/hw/android.hardware.keymaster@4.1-service.trustonic
@@ -2626,26 +1901,8 @@ vendor/lib64/vendor.mediatek.hardware.nvram@1.0.so
vendor/lib64/vendor.mediatek.hardware.nvram@1.1.so
# Power
-odm/etc/powerhal/power_app_cfg.xml
-vendor/bin/hw/vendor.mediatek.hardware.mtkpower@1.0-service
-vendor/etc/init/bootperf.rc
-vendor/etc/init/vendor.mediatek.hardware.mtkpower@1.0-init.rc
-vendor/etc/init/vendor.mediatek.hardware.mtkpower@1.0-service.rc
-vendor/lib/hw/vendor.mediatek.hardware.mtkpower@1.2-impl.so
-vendor/lib/libperfctl_vendor.so
-vendor/lib/libpower_timer.so
-vendor/lib/libpowerhal.so
-vendor/lib/libpowerhalwrap_vendor.so
-vendor/lib/vendor.mediatek.hardware.power@1.1.so
-vendor/lib/vendor.mediatek.hardware.power@2.0.so
-vendor/lib64/hw/vendor.mediatek.hardware.mtkpower@1.2-impl.so
-vendor/lib64/libmtkperf_client_vendor.so
-vendor/lib64/libperfctl_vendor.so
-vendor/lib64/libpower_timer.so
-vendor/lib64/libpowerhal.so
-vendor/lib64/libpowerhalwrap_vendor.so
-vendor/lib64/vendor.mediatek.hardware.power@1.1.so
-vendor/lib64/vendor.mediatek.hardware.power@2.0.so
+-vendor/lib64/vendor.mediatek.hardware.power@1.1.so
+-vendor/lib64/vendor.mediatek.hardware.power@2.0.so
# Protobuf - from redfin - TQ3A.230901.001/10750268
vendor/lib64/libprotobuf-cpp-lite-3.9.1.so|4f4ad5b013daabbbfbf7be7419fb60c28a59c36c
@@ -2728,7 +1985,6 @@ vendor/lib/libmtkcutils.so
vendor/lib/libmtkhardware_legacy.so
vendor/lib/libmtklimiter_vendor.so
vendor/lib/libmtknetutils.so
-vendor/lib/libmtkperf_client_vendor.so
vendor/lib/libmtkproperty.so
vendor/lib/libmtkrillog.so
vendor/lib/libmtkshifter_vendor.so
@@ -2920,6 +2176,11 @@ vendor/lib64/libTEECommon.so
vendor/lib64/libgz_gp_client.so
vendor/lib64/libgz_uree.so
+# USB
+vendor/bin/hw/android.hardware.usb@1.2-service-mediatekv2
+vendor/etc/init/android.hardware.usb@1.2-service-mediatekv2.rc
+-vendor/etc/vintf/manifest/android.hardware.usb@1.2-service-mediatekv2.xml
+
# WiFi
odm/etc/wifi/txpowerctrl.cfg
odm/etc/wifi/wifi.cfg
@@ -2943,6 +2204,7 @@ vendor/lib/libwo.so
vendor/lib/vendor.mediatek.hardware.apmonitor@2.0.so
vendor/lib/vendor.mediatek.hardware.mdmonitor@1.0.so
vendor/lib/vendor.mediatek.hardware.netdagent@1.0.so
+vendor/lib64/libwifi-hal.so:vendor/lib64/libwifi-hal-mtk.so
vendor/lib64/libapmonitor_vendor.so
vendor/lib64/libforkexecwrap.so
vendor/lib64/libwo.so
diff --git a/rootdir/Android.mk b/rootdir/Android.mk
index df84d72..d4e9c5b 100644
--- a/rootdir/Android.mk
+++ b/rootdir/Android.mk
@@ -10,10 +10,10 @@ LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_ETC)/init
include $(BUILD_PREBUILT)
include $(CLEAR_VARS)
-LOCAL_MODULE := init.cgroup.rc
+LOCAL_MODULE := init.mt6781.power.rc
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := ETC
-LOCAL_SRC_FILES := etc/init.cgroup.rc
+LOCAL_SRC_FILES := etc/init.mt6781.power.rc
LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_ETC)/init/hw
include $(BUILD_PREBUILT)
diff --git a/rootdir/etc/init.cgroup.rc b/rootdir/etc/init.cgroup.rc
deleted file mode 100644
index 5119d80..0000000
--- a/rootdir/etc/init.cgroup.rc
+++ /dev/null
@@ -1,72 +0,0 @@
-
-on post-fs
-
- # boot perf. tune
- write /proc/perfmgr/boost_ctrl/eas_ctrl/boot_boost "0 100"
- write /proc/perfmgr/boost_ctrl/eas_ctrl/boot_boost "1 100"
- write /proc/perfmgr/boost_ctrl/eas_ctrl/boot_boost "2 100"
- write /proc/perfmgr/boost_ctrl/eas_ctrl/boot_boost "3 100"
-
-on init
-
- # Create energy-aware scheduler tuning nodes
- mkdir /dev/stune/foreground
- mkdir /dev/stune/background
- mkdir /dev/stune/top-app
- mkdir /dev/stune/rt
- chown system system /dev/stune
- chown system system /dev/stune/foreground
- chown system system /dev/stune/background
- chown system system /dev/stune/top-app
- chown system system /dev/stune/rt
- chown system system /dev/stune/tasks
- chown system system /dev/stune/foreground/tasks
- chown system system /dev/stune/background/tasks
- chown system system /dev/stune/top-app/tasks
- chown system system /dev/stune/rt/tasks
- chmod 0664 /dev/stune/tasks
- chmod 0664 /dev/stune/foreground/tasks
- chmod 0664 /dev/stune/background/tasks
- chmod 0664 /dev/stune/top-app/tasks
- chmod 0664 /dev/stune/rt/tasks
-
- # Reset stune group setting for NNAPI HAL processes
- write /dev/stune/nnapi-hal/schedtune.boost 0
- write /dev/stune/nnapi-hal/schedtune.prefer_idle 0
-
- # create an stune group for camera-specific processes
- mkdir /dev/stune/camera-daemon
- write /dev/stune/camera-daemon/schedtune.prefer_idle 0
- write /dev/stune/camera-daemon/schedtune.boost 0
- chown system system /dev/stune/camera-daemon
- chown system system /dev/stune/camera-daemon/tasks
- chmod 0664 /dev/stune/camera-daemon/tasks
-
- # create io boost group
- mkdir /dev/stune/io
- chown system system /dev/stune/io
- chown system system /dev/stune/io/tasks
- chmod 0666 /dev/stune/io/tasks
-
-on property:sys.boot_completed=1
-
- write /sys/devices/system/cpu/eas/enable 2
- write /proc/cpufreq/cpufreq_sched_disable 0
-
- chown system system /dev/stune/foreground/schedtune.prefer_idle
- chown system system /dev/stune/top-app/schedtune.prefer_idle
- chown system system /dev/stune/rt/schedtune.prefer_idle
- write /dev/stune/foreground/schedtune.prefer_idle 0
- write /dev/stune/top-app/schedtune.prefer_idle 0
- write /dev/stune/rt/schedtune.prefer_idle 0
- write /dev/stune/top-app/schedtune.boost 1
- write /proc/sys/kernel/sched_migration_cost_ns 200000
- write /proc/perfmgr/boost_ctrl/eas_ctrl/sched_big_task_rotation 1
-
- # restore perf. parameters
- write /proc/perfmgr/boost_ctrl/eas_ctrl/boot_boost "0 0"
- write /proc/perfmgr/boost_ctrl/eas_ctrl/boot_boost "1 0"
- write /proc/perfmgr/boost_ctrl/eas_ctrl/boot_boost "2 0"
- write /proc/perfmgr/boost_ctrl/eas_ctrl/boot_boost "3 0"
- write /proc/perfmgr/boost_ctrl/cpu_ctrl/boot_freq "-1 -1 -1 -1 -1 -1"
- write /sys/devices/platform/boot_dramboost/dramboost/dramboost 0
diff --git a/rootdir/etc/init.mt6781.power.rc b/rootdir/etc/init.mt6781.power.rc
new file mode 100644
index 0000000..58e706d
--- /dev/null
+++ b/rootdir/etc/init.mt6781.power.rc
@@ -0,0 +1,62 @@
+on init
+ # Disable UFS powersaving
+ write /sys/devices/platform/11270000.ufshci/clkgate_enable 0
+
+ # Boot time FS tuning
+ write /sys/block/mmcblk0/queue/iostats 0
+ write /sys/block/mmcblk0/queue/nr_requests 256
+ write /sys/block/sdc/queue/iostats 0
+ write /sys/block/sdc/queue/nr_requests 256
+
+ # Update fastcharge firmware
+ write /proc/fastchg_fw_update 1
+
+ # Configure governor settings for little cluster
+ write /sys/devices/system/cpu/cpufreq/policy0/scaling_governor "schedutil"
+ write /sys/devices/system/cpu/cpufreq/policy0/schedutil/up_rate_limit_us 500
+ write /sys/devices/system/cpu/cpufreq/policy0/schedutil/down_rate_limit_us 20000
+
+ # Configure governor settings for big cluster
+ write /sys/devices/system/cpu/cpufreq/policy6/scaling_governor "schedutil"
+ write /sys/devices/system/cpu/cpufreq/policy0/schedutil/up_rate_limit_us 500
+ write /sys/devices/system/cpu/cpufreq/policy0/schedutil/down_rate_limit_us 20000
+
+ # update cpus for cpuset cgroup
+ write /dev/cpuset/foreground/cpus 0-7
+ write /dev/cpuset/foreground/boost/cpus 0-7
+ write /dev/cpuset/background/cpus 0-3
+ write /dev/cpuset/system-background/cpus 0-3
+ write /dev/cpuset/top-app/cpus 0-7
+
+on enable-low-power
+ # Enable UFS powersaving
+ write /sys/devices/platform/11270000.ufshci/clkgate_enable 1
+
+ # Runtime FS tuning
+ # we should adjust the setting upon boot_complete for runtime performance
+ write /sys/block/mmcblk0/queue/iostats 1
+ write /sys/block/mmcblk0/queue/read_ahead_kb 512
+ write /sys/block/mmcblk0/queue/nr_requests 128
+ write /sys/block/sdc/queue/iostats 1
+ write /sys/block/sdc/queue/read_ahead_kb 512
+ write /sys/block/sdc/queue/nr_requests 128
+ write /sys/block/dm-0/queue/read_ahead_kb 128
+ write /sys/block/dm-1/queue/read_ahead_kb 128
+ write /sys/block/dm-2/queue/read_ahead_kb 128
+ write /sys/block/dm-3/queue/read_ahead_kb 128
+ write /sys/block/dm-4/queue/read_ahead_kb 128
+ write /sys/block/dm-5/queue/read_ahead_kb 128
+
+ write /proc/cpufreq/cpufreq_sched_disable 0
+ write /proc/sys/kernel/sched_migration_cost_ns 200000
+
+ # Configure DVFS
+ write /sys/kernel/ged/hal/dvfs_margin_value 130
+ write /sys/kernel/ged/hal/timer_base_dvfs_margin 798
+ write /sys/kernel/ged/hal/loading_base_dvfs_step 4
+
+ # Enable PowerHAL hint processing
+ setprop vendor.powerhal.init 1
+
+on property:sys.boot_completed=1
+ trigger enable-low-power
diff --git a/rootdir/etc/init.mt6781.rc b/rootdir/etc/init.mt6781.rc
index 486422b..da2c420 100644
--- a/rootdir/etc/init.mt6781.rc
+++ b/rootdir/etc/init.mt6781.rc
@@ -1,13 +1,11 @@
import /vendor/etc/init/hw/init.connectivity.rc
+import /vendor/etc/init/hw/init.mt6781.power.rc
import /vendor/etc/init/hw/init.mt6781.usb.rc
import /vendor/etc/init/hw/init.project.rc
import /vendor/etc/init/hw/init.sensor_1_0.rc
-import /vendor/etc/init/hw/init.cgroup.rc
import /vendor/etc/init/hw/init.modem.rc
on early-init
- write /proc/perfmgr/boost_ctrl/cpu_ctrl/boot_freq "0 0 0 0"
- write /sys/devices/platform/boot_dramboost/dramboost/dramboost 1
write /proc/sys/kernel/firmware_config/force_sysfs_fallback 1
on init
@@ -20,13 +18,6 @@ on init
write /proc/sys/net/core/wmem_max 8388608
write /proc/sys/net/core/rmem_max 8388608
- # update cpus for cpuset cgroup
- write /dev/cpuset/foreground/cpus 0-7
- write /dev/cpuset/foreground/boost/cpus 0-7
- write /dev/cpuset/background/cpus 0-3
- write /dev/cpuset/system-background/cpus 0-3
- write /dev/cpuset/top-app/cpus 0-7
-
# Set permissions on oplus_chg nodes
chown system system /sys/class/oplus_chg/battery/short_c_hw_status
chown system system /sys/class/oplus_chg/battery/short_c_hw_feature
@@ -78,11 +69,7 @@ on late-init
write /sys/kernel/rcu_expedited 1
on charger
- write /proc/perfmgr/boost_ctrl/cpu_ctrl/boot_freq "-1 -1 -1 -1"
- write /sys/devices/platform/boot_dramboost/dramboost/dramboost 0
- exec /system/bin/e2fsck -f -p /dev/block/platform/bootdevice/by-name/cache
- mount ext4 /dev/block/platform/bootdevice/by-name/cache /cache rw wait
chmod 0660 /dev/spm
chown system system /dev/spm
start spm_script
@@ -110,27 +97,19 @@ on charger
start fuelgauged
start fuelgauged_nvram
- chown system system /sys/class/leds/lcd-backlight/brightness
- chown system system /sys/class/leds/red/brightness
- chown system system /sys/class/leds/green/brightness
-
- start vendor.light-default
- # switch to sched-dvfs
- write /sys/devices/system/cpu/cpufreq/policy0/scaling_governor "schedutil"
- write /sys/devices/system/cpu/cpufreq/policy6/scaling_governor "schedutil"
-
on fs
wait_for_prop hwservicemanager.ready "true"
mount_all --early
write /sys/block/zram0/comp_algorithm lz4
write /proc/sys/vm/page-cluster 0
- write /proc/sys/vm/swappiness 60
- write /proc/sys/vm/direct_swappiness 50
+ write /proc/sys/vm/swappiness 100
write /sys/kernel/mm/swap/vma_ra_enabled false
swapon_all /vendor/etc/fstab.mt6781
+ # Update touchpanel firmware in case we ship newer firmware in /odm
+ write /proc/touchpanel/tp_fw_update 0
+
on late-fs
- wait_for_prop hwservicemanager.ready "true"
mount_all --late
on post-fs
@@ -142,20 +121,6 @@ on post-fs
chmod 0770 /mnt/vendor/protect_s
on post-fs-data
- # boot time fs tune
- write /sys/block/mmcblk0/queue/iostats 0
- write /sys/block/mmcblk0/queue/read_ahead_kb 2048
- write /sys/block/mmcblk0/queue/nr_requests 256
- write /sys/block/sdc/queue/iostats 0
- write /sys/block/sdc/queue/read_ahead_kb 2048
- write /sys/block/sdc/queue/nr_requests 256
- write /sys/block/dm-0/queue/read_ahead_kb 2048
- write /sys/block/dm-1/queue/read_ahead_kb 2048
- write /sys/block/dm-2/queue/read_ahead_kb 2048
- write /sys/block/dm-3/queue/read_ahead_kb 2048
- write /sys/block/dm-4/queue/read_ahead_kb 2048
- write /sys/block/dm-5/queue/read_ahead_kb 2048
-
chown system system /mnt/vendor/nvcfg
chmod 0771 /mnt/vendor/nvcfg
restorecon_recursive /mnt/vendor/nvcfg
@@ -811,21 +776,14 @@ on property:vold.decrypt=trigger_shutdown_framework
setprop dev.bootcomplete 0
on property:sys.boot_completed=1
- write /sys/block/mmcblk0/queue/iostats 1
- write /sys/block/mmcblk0/queue/read_ahead_kb 512
- write /sys/block/mmcblk0/queue/nr_requests 128
- write /sys/block/sdc/queue/iostats 1
- write /sys/block/sdc/queue/read_ahead_kb 512
- write /sys/block/sdc/queue/nr_requests 128
- write /sys/block/dm-0/queue/read_ahead_kb 128
- write /sys/block/dm-1/queue/read_ahead_kb 128
- write /sys/block/dm-2/queue/read_ahead_kb 128
- write /sys/block/dm-3/queue/read_ahead_kb 128
- write /sys/block/dm-4/queue/read_ahead_kb 128
- write /sys/block/dm-5/queue/read_ahead_kb 128
-
write /sys/devices/platform/10012000.dvfsrc/helio-dvfsrc/dvfsrc_req_ddr_opp -1
+ # Disable edge limit control interface
+ write /proc/touchpanel/oplus_tp_limit_enable 0
+
+ # Enable oppo touchpanel direction
+ write /proc/touchpanel/oplus_tp_direction 1
+
# OTG
write /sys/devices/virtual/oplus_chg/usb/otg_switch 1
@@ -884,3 +842,13 @@ service mtk_secure_element_hal_service /vendor/bin/hw/android.hardware.secure_el
class hal
user secure_element
group secure_element
+
+service charger /system/bin/charger
+ class charger
+ user system
+ group system graphics wakelock input
+ capabilities SYS_BOOT
+ file /dev/kmsg w
+ file /sys/fs/pstore/console-ramoops-0 r
+ file /sys/fs/pstore/console-ramoops r
+ file /proc/last_kmsg r
diff --git a/rootdir/etc/ueventd.oplus.rc b/rootdir/etc/ueventd.oplus.rc
index f948b2e..ab0489b 100644
--- a/rootdir/etc/ueventd.oplus.rc
+++ b/rootdir/etc/ueventd.oplus.rc
@@ -4,8 +4,6 @@
# SPDX-License-Identifier: Apache-2.0
#
-# Charger
-/sys/class/oplus_chg/* mmi_charging_enable 0660 system system
-
# WiFi
firmware_directories /odm/etc/wifi/
+
diff --git a/rro_overlays/CarrierConfigOverlay/Android.bp b/rro_overlays/CarrierConfigOverlay/Android.bp
deleted file mode 100644
index 2dbdc6c..0000000
--- a/rro_overlays/CarrierConfigOverlay/Android.bp
+++ /dev/null
@@ -1,7 +0,0 @@
-runtime_resource_overlay {
- name: "CarrierConfigOverlay",
- theme: "CarrierConfigOverlay",
- certificate: "platform",
- sdk_version: "current",
- product_specific: true
-}
diff --git a/rro_overlays/CarrierConfigOverlay/AndroidManifest.xml b/rro_overlays/CarrierConfigOverlay/AndroidManifest.xml
deleted file mode 100644
index e452c74..0000000
--- a/rro_overlays/CarrierConfigOverlay/AndroidManifest.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
diff --git a/rro_overlays/CarrierConfigOverlay/res/xml/vendor.xml b/rro_overlays/CarrierConfigOverlay/res/xml/vendor.xml
deleted file mode 100644
index ca47fe5..0000000
--- a/rro_overlays/CarrierConfigOverlay/res/xml/vendor.xml
+++ /dev/null
@@ -1,6003 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[M]_[S]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[M]_[S]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[M]_[S]
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[M]_[S]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Telstra [B] [M] [A] [S]
- +61101
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[M]_[S]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[M]_[A]_[S]
-
-
-
-
-
-
-
-
-
-
-
-
- +64222022002
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- +6483083210
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- +64204864236
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- +6421700700
-
-
-
-
-
-
-
- [B]_[M]_[S]
-
-
-
-
-
-
-
-
-
-
-
-
- +64284808808
-
-
-
-
-
-
-
-
-
- 1416
-
-
-
-
- 1416
- 19,20
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Y!mobile
- 1416
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 1417
-
-
-
-
-
-
-
-
-
- [B] [M]
- connected_mmwave:5G,connected:5G,not_restricted_rrc_idle:5G
- connected_mmwave,legacy,31;connected,legacy,31;connected_mmwave,not_restricted_rrc_con,31;connected,not_restricted_rrc_con,31;not_restricted_rrc_idle,not_restricted_rrc_con,15
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[M]
-
-
-
-
-
-
-
-
- 1417
-
-
-
-
-
-
-
-
- UQ mobile
-
-
-
-
-
-
-
-
- povo
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[M]_[S]
- +41794997979
- 30047
-
- vvm_type_omtp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- WiFi Calling
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- com.google.android.ims
- 242
-
-
-
-
-
-
-
-
-
- PRD-IR92/13 term-[B]/[P]-[V]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- com.google.android.ims
-
-
-
-
-
- 123
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- com.google.android.ims
-
-
-
-
-
-
-
-
-
-
- com.google.android.ims
-
-
-
-
-
-
-
-
- [B]_[M]_[S]
- 22177
-
-
-
-
-
-
-
-
- vodafone ES WiFi Call
-
-
-
-
-
-
-
-
-
-
-
- [B] [M] [S]
- 22123
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- +34633633633
-
-
-
-
-
-
-
-
- 121
-
-
-
-
-
- 2211
-
-
-
-
-
- 2211
-
-
-
-
-
-
- 2211
-
-
-
-
-
- 2211
-
-
-
-
-
- 1210
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 1210
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PRD-IR92/13 term-[B]/[P]-[V]
- com.google.android.ims
- 888
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[M]
- 1417
-
-
-
-
-
-
-
-
-
- +33660660001
-
- 22344
- vvm_type_omtp
- fr.bouyguestelecom.vvmandroid
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[V]
- com.google.android.ims
- 123
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 223
- vvm_type_omtp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 223
- vvm_type_omtp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 223
- vvm_type_omtp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 223
- vvm_type_omtp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PRD-IR92/13 term-[B]/[P]-[V]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PRD-IR92/13 term-[B]/[P]-[V]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 41919
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[M]_[S]
- 42020
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- +447953222222
- [B]_[M]_[S]
- com.google.android.ims
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[M]_[S]
- +447782333123
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B] [M] [S]
- 901
- com.google.android.ims
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[M]_[S]
- 121
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[M]_[S]
- WiFiCall
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[M]_[S]
- WiFiCall
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 905
-
-
-
-
-
-
-
-
-
-
- [B]_[V]
-
- 759
- 07488222000
- Sky WiFiCall
-
-
-
-
-
-
-
-
-
-
-
-
- 443
-
-
-
-
-
-
-
-
-
-
- 443
-
-
-
-
-
-
-
-
- [B]_[M]_[S]
- +31624001233
-
-
-
-
-
- [B]_[M]_[A]_[S]_[D]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[M]_[S]
- +31654501233
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[M]_[S]
- +31624001233
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 1233
- +31612001233
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 1233
-
-
-
-
-
-
-
-
-
- +31624001233
-
-
-
-
-
-
-
-
-
-
-
-
- +31624001233
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[M]_[S]
-
-
-
-
-
- connected_mmwave,legacy,10;connected,legacy,10;not_restricted_rrc_idle,legacy,10;not_restricted_rrc_con,legacy,10
-
-
-
-
-
- connected_mmwave,legacy,10;connected,legacy,10;not_restricted_rrc_idle,legacy,10;not_restricted_rrc_con,legacy,10
-
- Tele2 NL WiFi
-
-
-
-
-
-
-
-
-
-
-
- [B]_[M]_[S]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- +48790200200
-
-
-
-
-
-
-
-
-
-
- [B]_[V]
-
-
-
-
-
-
-
-
- Mobile Vikings WiFi Calling
-
-
-
-
-
-
-
-
- PRD-IR92/13 term-[B]/[P]-[V]
- 501501501
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[M]_[S]
- +48602950000
-
- [B]_[M]_[A]_[S]_[D]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- connected_mmwave,legacy,10;connected,legacy,10;not_restricted_rrc_idle,legacy,10;not_restricted_rrc_con,legacy,10
-
-
-
-
-
-
-
-
- [B]_[M]_[S]
- +48601222222
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[M]_[S]
- +905427542000
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[M]_[S]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PRD-IR92/13 term-[B]/[P]-[V]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[M]_[S]
- +40722033334
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[M]_[S]
- +40766177177
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[M]_[S]
- 123
-
-
-
-
-
-
-
-
-
-
-
-
-
- +351962000000
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[M]_[A]_[S]_[D]
- 133
-
-
-
-
-
-
-
-
- [B]_[M]_[A]_[S]_[D]
- 133
-
-
-
-
-
-
-
-
-
-
-
- PRD-IR92/13 term-[B]/[P]-[V]
- 5555
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[P]_[H]
-
-
-
-
-
-
-
-
- [B]_[P]_[H]
-
-
-
-
-
-
-
-
-
-
- [B]_[V] 3gpp-gba
- PRD-IR92/15 term-[B]/[P]model device-type/smart-phone mno-custom/ProximusXCAPv2 ;3gpp-gba
- +32475151969
-
-
-
-
-
-
-
-
-
-
-
- [B]_[P]_[H]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[M]_[S]
- 5500
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[M]_[S]
- 3311
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[M]_[A]_[S]_[D]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 3311
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- +491793000333
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B] [M] [S]
-
-
-
-
-
-
-
-
-
-
-
- [B]_[M]_[S]
- 171
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 171
-
-
-
-
-
-
-
-
- 171
-
-
-
-
-
-
-
-
-
-
- PRD-IR92/13 term-[B]/[P]-[V]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 30047
-
- vvm_type_omtp
-
-
-
-
- [B]_[M]_[S]
- +41794997979
-
-
-
-
-
-
-
-
-
-
-
-
- PRD-IR92/13 term-[B]/[P]-[V]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[V]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[M]_[S]
- +38598151100
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B] [M] [S]
- *99
-
-
-
-
-
-
-
-
-
-
-
- [B]_[M]_[S]
- +420608989898
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[M]_[S]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[M]_[S]
- +420603123311
-
- [B]_[M]_[A]_[S]_[D]
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[M]_[S]
- 121
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[M]_[S]
- +306971000123
-
-
- COSMOTE WiFi Calling
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 170
- [B]_[M]_[S]
-
-
-
-
-
-
-
-
-
-
-
-
-
- +36209400400
- [B]_[V]
-
-
-
-
-
-
-
-
-
- [B]_[M]_[S]
- [B]_[M]_[A]_[S]_[D]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B] [M] [S]
-
-
-
-
-
-
-
-
-
- PRD-IR92/13 term-[B]/[P]-[V]
-
-
-
-
-
-
-
-
-
- [B]_[M]_[S]
- +421903333999
- [B]_[M]_[A]_[S]_[D]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- +436762200
- [B]_[M]_[S]
- WLAN-Call
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 66477
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[V]
-
-
-
-
-
-
-
-
-
-
-
- [B]_[V]
-
-
-
-
-
-
-
-
-
-
- [B]_[V]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[V]
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[V]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[V]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[M]_[S]
- +38970121212
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[V]
-
-
-
-
-
-
-
-
-
-
-
- [B]_[V]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[V]
-
-
-
-
-
-
-
-
-
- [B]_[V]
-
-
-
-
-
-
-
-
-
- [M] [P] [V]
-
-
-
-
-
-
-
-
-
-
- [B]_[V]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[V]
-
- 759
- 07488222000
- Sky WiFiCall
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[V]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[L]_[T]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[L]_[T]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[L]_[T]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[L]_[T]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[L]_[T]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[V]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[V]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[V]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[M]_[S]
-
-
-
-
-
-
-
-
- [B]_[M]_[S]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 444
-
-
-
-
-
-
-
-
- PRD-IR92/13 term-[B]/[P]-[V]
-
-
-
-
-
-
-
-
- 808
-
-
-
-
-
-
-
- 808
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- stc KW
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PRD-IR92/13 term-[B]/[P]-[V]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PRD-IR92/13 term-[B]/[P]-[V]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 132
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 132
- WiFi call
-
-
- [B]_[M]_[S]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PRD-IR92/13 term-[B]/[P]-[V]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- com.google.android.ims
-
- [B]_[M]/AMX_MEX
- *86
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- com.google.android.ims
-
-
-
-
-
-
- *86
-
-
-
-
-
-
-
-
-
- *86
-
- [B]_[M]_[S]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- com.google.android.ims
- *86
-
-
-
-
-
-
- 31654501233
- Verizon
-
-
-
-
-
- 31654501233
- Verizon
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Sprint
-
- us-sprint_cid_1788
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- TMO
- PRD-[U] CPM/[C] RCS-client/[R] [B]/[M] client-[B]/[X][F] OS-Android/[E] cc/[G]
-
-
-
-
- rscp
-
-
-
- T-Mobile
-
-
-
-
-
-
- us-tmobile
- 19
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- com.metropcs.service.vvm
- Metro by T-Mobile
- 19
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Assurance Wireless
- 19
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Ultra
-
-
-
-
-
-
-
- Mint
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Verizon
-
-
- 3
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]---[P]---[V]
-
-
-
-
- *86
-
-
-
-
-
-
-
-
-
-
- Visible
-
- x-up-calling-line-id: 1##LINE1NOCOUNTRYCODE##|X-VzW-MDN: 1##LINE1NOCOUNTRYCODE##
-
-
-
-
-
- Visible
-
-
-
-
- x-up-calling-line-id: 1##LINE1NOCOUNTRYCODE##|X-VzW-MDN: 1##LINE1NOCOUNTRYCODE##
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Cricket
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B] [V]
- +16473832355
-
-
-
-
-
-
-
-
-
-
- +16473832355
-
-
-
-
-
- +16473832333
-
-
-
-
-
-
-
- *111
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- *80
-
- [B]_[M]/AMX GTM
-
-
-
-
-
-
-
- *77
-
-
-
-
-
-
-
-
-
- *80
-
-
-
-
- [B]_[M]/AMX HND
-
-
-
-
-
- *80
-
-
-
-
-
- *80
-
-
-
-
-
-
- *123
-
-
-
-
-
- *86
-
-
-
-
-
- *80
-
-
-
-
-
-
-
-
- *111
-
-
-
-
-
- *90
-
-
-
-
-
-
-
-
-
-
- *80
-
- [B]_[M]/AMX CRI
-
-
-
-
-
-
- 600
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[M]_[S]
- 500
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[M]_[S] ReadyEMGIMS
-
-
-
-
-
-
-
-
-
-
-
- [B]_[M]/AMX_CHL
- *20
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[M]_[S]
- *123
-
-
-
-
-
-
-
- *123
-
-
-
-
-
-
-
-
- 3508888888
-
-
-
-
-
-
-
-
-
-
- [B]_[M]/AMX_COL
-
-
-
-
-
-
- *123
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- +573025001000
-
-
-
-
-
-
-
-
-
-
- [B]_[V]
-
-
- >
-
-
-
-
-
-
-
-
-
-
-
-
-
- [B]_[M]_[S]
-
-
- >
-
-
- *169
-
-
-
-
-
-
-
-
-
- 131
-
- [B]_[M]/AMX_PER
-
-
-
-
-
-
-
-
-
-
-
-
- *555
-
-
-
-
-
-
-
-
-
-
- *100
-
- [B]_[M]/AMX_BRA
-
-
-
-
-
-
-
-
- *100
-
-
-
-
-
-
-
-
- *289
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 1190
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/rro_overlays/CarrierConfigOverlaySpaced/Android.bp b/rro_overlays/CarrierConfigOverlaySpaced/Android.bp
new file mode 100644
index 0000000..8fc5745
--- /dev/null
+++ b/rro_overlays/CarrierConfigOverlaySpaced/Android.bp
@@ -0,0 +1,11 @@
+//
+// Copyright (C) 2023 The LineageOS Project
+//
+// SPDX-License-Identifier: Apache-2.0
+//
+
+runtime_resource_overlay {
+ name: "CarrierConfigOverlaySpaced",
+ sdk_version: "current",
+ product_specific: true,
+}
diff --git a/rro_overlays/CarrierConfigOverlaySpaced/AndroidManifest.xml b/rro_overlays/CarrierConfigOverlaySpaced/AndroidManifest.xml
new file mode 100644
index 0000000..e9efabb
--- /dev/null
+++ b/rro_overlays/CarrierConfigOverlaySpaced/AndroidManifest.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rro_overlays/CarrierConfigOverlaySpaced/res/xml/vendor.xml b/rro_overlays/CarrierConfigOverlaySpaced/res/xml/vendor.xml
new file mode 100644
index 0000000..874e6c2
--- /dev/null
+++ b/rro_overlays/CarrierConfigOverlaySpaced/res/xml/vendor.xml
@@ -0,0 +1,1568 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ com.google.android.ims
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ com.google.android.ims
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 170
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 42020
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PRD-IR92/13 [B]/[P]-[O] device-type/smart-phone mno-custom/[N]
+ PRD-IR92/13 [B]/[P]-[O] device-type/smart-phone mno-custom/[N]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +48602950000
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +40722033334
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 121
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ vodafone ES WiFi Call
+
+
+
+
+
+
+
+
+
+ 123
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ [B]_[P]_[H]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rro_overlays/FrameworksResOverlaySpaced/Android.bp b/rro_overlays/FrameworksResOverlaySpaced/Android.bp
new file mode 100644
index 0000000..566426a
--- /dev/null
+++ b/rro_overlays/FrameworksResOverlaySpaced/Android.bp
@@ -0,0 +1,12 @@
+//
+// Copyright (C) 2023 The LineageOS Project
+//
+// SPDX-License-Identifier: Apache-2.0
+//
+
+runtime_resource_overlay {
+ name: "FrameworksResOverlaySpaced",
+ sdk_version: "current",
+ resource_dirs: ["res"],
+ vendor: true,
+}
\ No newline at end of file
diff --git a/rro_overlays/FrameworksResOverlaySpaced/AndroidManifest.xml b/rro_overlays/FrameworksResOverlaySpaced/AndroidManifest.xml
new file mode 100644
index 0000000..5b0b04c
--- /dev/null
+++ b/rro_overlays/FrameworksResOverlaySpaced/AndroidManifest.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/overlay/frameworks/base/core/res/res/values/config.xml b/rro_overlays/FrameworksResOverlaySpaced/res/values/config.xml
similarity index 88%
rename from overlay/frameworks/base/core/res/res/values/config.xml
rename to rro_overlays/FrameworksResOverlaySpaced/res/values/config.xml
index 68833a2..04d27f3 100644
--- a/overlay/frameworks/base/core/res/res/values/config.xml
+++ b/rro_overlays/FrameworksResOverlaySpaced/res/values/config.xml
@@ -369,6 +369,12 @@
true
+
+ /sys/class/oplus_chg/battery/voocchg_ing
+
+
+ 1
+
true
@@ -444,4 +450,67 @@
rates are available from hardware composer. Only has an effect if the value is
non-zero. -->
120
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ - 1
+
+
+
+ - 0
+ - 90
+
+
+
+
+ - 0
+ - 70
+
+
+
+
+ - 0
+ - 50
+ - 150
+ - 50
+
+
+
+
+ - 0
+ - 40
+ - 160
+ - 165
+ - 500
+ - 600
+
+
+
+ true
+
+
+ true
+
+
+ 0
diff --git a/rro_overlays/FrameworksResOverlaySpaced/res/values/dimens.xml b/rro_overlays/FrameworksResOverlaySpaced/res/values/dimens.xml
new file mode 100644
index 0000000..28bbfa3
--- /dev/null
+++ b/rro_overlays/FrameworksResOverlaySpaced/res/values/dimens.xml
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+ 115px
+
+
+ 110.0px
+ 110.0px
+ 110.0px
+
+
+ 20px
+
+
+ 81.0px
+
+
+ 12dp
+
diff --git a/overlay/frameworks/base/core/res/res/xml/power_profile.xml b/rro_overlays/FrameworksResOverlaySpaced/res/xml/power_profile.xml
similarity index 100%
rename from overlay/frameworks/base/core/res/res/xml/power_profile.xml
rename to rro_overlays/FrameworksResOverlaySpaced/res/xml/power_profile.xml
diff --git a/rro_overlays/OplusDozeOverlaySpaced/Android.bp b/rro_overlays/OplusDozeOverlaySpaced/Android.bp
new file mode 100644
index 0000000..d751fa6
--- /dev/null
+++ b/rro_overlays/OplusDozeOverlaySpaced/Android.bp
@@ -0,0 +1,10 @@
+//
+// Copyright (C) 2023 The LineageOS Project
+//
+// SPDX-License-Identifier: Apache-2.0
+//
+
+runtime_resource_overlay {
+ name: "OplusDozeOverlaySpaced",
+ product_specific: true,
+}
\ No newline at end of file
diff --git a/rro_overlays/OplusDozeOverlaySpaced/AndroidManifest.xml b/rro_overlays/OplusDozeOverlaySpaced/AndroidManifest.xml
new file mode 100644
index 0000000..21cc174
--- /dev/null
+++ b/rro_overlays/OplusDozeOverlaySpaced/AndroidManifest.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/overlay/hardware/oplus/doze/res/values/config.xml b/rro_overlays/OplusDozeOverlaySpaced/res/values/config.xml
similarity index 98%
rename from overlay/hardware/oplus/doze/res/values/config.xml
rename to rro_overlays/OplusDozeOverlaySpaced/res/values/config.xml
index fd7b651..7e3f60d 100644
--- a/overlay/hardware/oplus/doze/res/values/config.xml
+++ b/rro_overlays/OplusDozeOverlaySpaced/res/values/config.xml
@@ -19,5 +19,4 @@
- 0.0
- 5.0
-
-
+
\ No newline at end of file
diff --git a/rro_overlays/SettingsOverlaySpaced/Android.bp b/rro_overlays/SettingsOverlaySpaced/Android.bp
new file mode 100644
index 0000000..21cfd9b
--- /dev/null
+++ b/rro_overlays/SettingsOverlaySpaced/Android.bp
@@ -0,0 +1,12 @@
+//
+// Copyright (C) 2023 The LineageOS Project
+//
+// SPDX-License-Identifier: Apache-2.0
+//
+
+runtime_resource_overlay {
+ name: "SettingsOverlaySpaced",
+ sdk_version: "current",
+ resource_dirs: ["res"],
+ vendor: true,
+}
\ No newline at end of file
diff --git a/rro_overlays/SettingsOverlaySpaced/AndroidManifest.xml b/rro_overlays/SettingsOverlaySpaced/AndroidManifest.xml
new file mode 100644
index 0000000..182d26f
--- /dev/null
+++ b/rro_overlays/SettingsOverlaySpaced/AndroidManifest.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rro_overlays/SettingsOverlaySpaced/res/values/config.xml b/rro_overlays/SettingsOverlaySpaced/res/values/config.xml
new file mode 100644
index 0000000..1fbc04b
--- /dev/null
+++ b/rro_overlays/SettingsOverlaySpaced/res/values/config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+ true
+
+
+ 3
+
diff --git a/rro_overlays/SystemUIOverlaySpaced/Android.bp b/rro_overlays/SystemUIOverlaySpaced/Android.bp
new file mode 100644
index 0000000..d031bd0
--- /dev/null
+++ b/rro_overlays/SystemUIOverlaySpaced/Android.bp
@@ -0,0 +1,12 @@
+//
+// Copyright (C) 2023 The LineageOS Project
+//
+// SPDX-License-Identifier: Apache-2.0
+//
+
+runtime_resource_overlay {
+ name: "SystemUIOverlaySpaced",
+ sdk_version: "current",
+ resource_dirs: ["res"],
+ vendor: true,
+}
\ No newline at end of file
diff --git a/rro_overlays/SystemUIOverlaySpaced/AndroidManifest.xml b/rro_overlays/SystemUIOverlaySpaced/AndroidManifest.xml
new file mode 100644
index 0000000..2d0e4c0
--- /dev/null
+++ b/rro_overlays/SystemUIOverlaySpaced/AndroidManifest.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/overlay/frameworks/base/packages/SystemUI/res/values/config.xml b/rro_overlays/SystemUIOverlaySpaced/res/values/config.xml
similarity index 78%
rename from overlay/frameworks/base/packages/SystemUI/res/values/config.xml
rename to rro_overlays/SystemUIOverlaySpaced/res/values/config.xml
index b9e5f8b..3434fea 100644
--- a/overlay/frameworks/base/packages/SystemUI/res/values/config.xml
+++ b/rro_overlays/SystemUIOverlaySpaced/res/values/config.xml
@@ -31,4 +31,10 @@
24.0px
+
+ 60
+
+
+ false
diff --git a/overlay/frameworks/base/packages/SystemUI/res/values/dimens.xml b/rro_overlays/SystemUIOverlaySpaced/res/values/dimens.xml
similarity index 100%
rename from overlay/frameworks/base/packages/SystemUI/res/values/dimens.xml
rename to rro_overlays/SystemUIOverlaySpaced/res/values/dimens.xml
diff --git a/rro_overlays/SystemUIOverlaySpaced/res/values/integers.xml b/rro_overlays/SystemUIOverlaySpaced/res/values/integers.xml
new file mode 100644
index 0000000..1aaa55d
--- /dev/null
+++ b/rro_overlays/SystemUIOverlaySpaced/res/values/integers.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+ 19
+
+
diff --git a/rro_overlays/TelephonyOverlaySpaced/Android.bp b/rro_overlays/TelephonyOverlaySpaced/Android.bp
new file mode 100644
index 0000000..9524a66
--- /dev/null
+++ b/rro_overlays/TelephonyOverlaySpaced/Android.bp
@@ -0,0 +1,12 @@
+//
+// Copyright (C) 2023 The LineageOS Project
+//
+// SPDX-License-Identifier: Apache-2.0
+//
+
+runtime_resource_overlay {
+ name: "TelephonyOverlaySpaced",
+ sdk_version: "current",
+ resource_dirs: ["res"],
+ vendor: true,
+}
\ No newline at end of file
diff --git a/rro_overlays/TelephonyOverlaySpaced/AndroidManifest.xml b/rro_overlays/TelephonyOverlaySpaced/AndroidManifest.xml
new file mode 100644
index 0000000..38898eb
--- /dev/null
+++ b/rro_overlays/TelephonyOverlaySpaced/AndroidManifest.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/overlay/packages/services/Telephony/res/values/config.xml b/rro_overlays/TelephonyOverlaySpaced/res/values/config.xml
similarity index 99%
rename from overlay/packages/services/Telephony/res/values/config.xml
rename to rro_overlays/TelephonyOverlaySpaced/res/values/config.xml
index 1f95aa7..77ccc35 100644
--- a/overlay/packages/services/Telephony/res/values/config.xml
+++ b/rro_overlays/TelephonyOverlaySpaced/res/values/config.xml
@@ -24,4 +24,4 @@
com.mediatek.ims
-
+
\ No newline at end of file
diff --git a/rro_overlays/TetheirngOverlay/Android.bp b/rro_overlays/TetheirngOverlay/Android.bp
deleted file mode 100644
index feaaf46..0000000
--- a/rro_overlays/TetheirngOverlay/Android.bp
+++ /dev/null
@@ -1,7 +0,0 @@
-runtime_resource_overlay {
- name: "TetheringConfigOverlay",
- theme: "TetheringConfigOverlay",
- certificate: "platform",
- sdk_version: "current",
- product_specific: true
-}
diff --git a/rro_overlays/TetheringResOverlaySpaced/Android.bp b/rro_overlays/TetheringResOverlaySpaced/Android.bp
new file mode 100644
index 0000000..be41f95
--- /dev/null
+++ b/rro_overlays/TetheringResOverlaySpaced/Android.bp
@@ -0,0 +1,12 @@
+//
+// Copyright (C) 2023 The LineageOS Project
+//
+// SPDX-License-Identifier: Apache-2.0
+//
+
+runtime_resource_overlay {
+ name: "TetheringResOverlaySpaced",
+ sdk_version: "current",
+ resource_dirs: ["res"],
+ vendor: true,
+}
diff --git a/rro_overlays/TetheirngOverlay/AndroidManifest.xml b/rro_overlays/TetheringResOverlaySpaced/AndroidManifest.xml
similarity index 59%
rename from rro_overlays/TetheirngOverlay/AndroidManifest.xml
rename to rro_overlays/TetheringResOverlaySpaced/AndroidManifest.xml
index 15d9835..844f49a 100644
--- a/rro_overlays/TetheirngOverlay/AndroidManifest.xml
+++ b/rro_overlays/TetheringResOverlaySpaced/AndroidManifest.xml
@@ -1,11 +1,16 @@
+
+
+ package="com.android.networkstack.tethering.spaced">
+
-
+
\ No newline at end of file
diff --git a/rro_overlays/TetheirngOverlay/res/values/config.xml b/rro_overlays/TetheringResOverlaySpaced/res/values/config.xml
similarity index 100%
rename from rro_overlays/TetheirngOverlay/res/values/config.xml
rename to rro_overlays/TetheringResOverlaySpaced/res/values/config.xml
diff --git a/rro_overlays/WifiOverlay/Android.bp b/rro_overlays/WifiOverlay/Android.bp
deleted file mode 100644
index 5407765..0000000
--- a/rro_overlays/WifiOverlay/Android.bp
+++ /dev/null
@@ -1,7 +0,0 @@
-runtime_resource_overlay {
- name: "WifiOverlay",
- theme: "WifiOverlay",
- certificate: "platform",
- sdk_version: "current",
- product_specific: true
-}
diff --git a/rro_overlays/WifiOverlay/AndroidManifest.xml b/rro_overlays/WifiOverlay/AndroidManifest.xml
deleted file mode 100644
index 4a18feb..0000000
--- a/rro_overlays/WifiOverlay/AndroidManifest.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/rro_overlays/WifiResOverlaySpaced/Android.bp b/rro_overlays/WifiResOverlaySpaced/Android.bp
new file mode 100644
index 0000000..b7b3055
--- /dev/null
+++ b/rro_overlays/WifiResOverlaySpaced/Android.bp
@@ -0,0 +1,12 @@
+//
+// Copyright (C) 2023 The LineageOS Project
+//
+// SPDX-License-Identifier: Apache-2.0
+//
+
+runtime_resource_overlay {
+ name: "WifiResOverlaySpaced",
+ sdk_version: "current",
+ resource_dirs: ["res"],
+ vendor: true,
+}
diff --git a/rro_overlays/WifiResOverlaySpaced/AndroidManifest.xml b/rro_overlays/WifiResOverlaySpaced/AndroidManifest.xml
new file mode 100644
index 0000000..b8fc4bb
--- /dev/null
+++ b/rro_overlays/WifiResOverlaySpaced/AndroidManifest.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
diff --git a/rro_overlays/WifiOverlay/res/values/config.xml b/rro_overlays/WifiResOverlaySpaced/res/values/config.xml
similarity index 100%
rename from rro_overlays/WifiOverlay/res/values/config.xml
rename to rro_overlays/WifiResOverlaySpaced/res/values/config.xml
diff --git a/sepolicy/vendor/file.te b/sepolicy/vendor/file.te
index 1a96c2e..52afb22 100644
--- a/sepolicy/vendor/file.te
+++ b/sepolicy/vendor/file.te
@@ -25,6 +25,14 @@ type factorytestreport_vendor_data_file, data_file_type, file_type;
type oplus_fingerprint_file, data_file_type, file_type;
type vendor_proc_fingerprint, fs_type, proc_type;
+# Latency
+type latency_device, dev_type;
+type sysfs_mtk_cpufreq, fs_type, sysfs_type;
+type sysfs_mtk_gpufreq, fs_type, sysfs_type;
+
+# PPS
+type pps_socket, file_type;
+
# NFC
type vendor_proc_nfc_chipset, fs_type, proc_type;
@@ -42,6 +50,8 @@ type oplus_block_device, dev_type;
type vendor_proc_oplus_version, fs_type, proc_type;
# Performance
-type proc_vm_dirty, fs_type, proc_type;
type proc_sched_stune, fs_type, proc_type;
type proc_sched_assist, fs_type, proc_type;
+
+# GPU
+type vendor_sysfs_gpu, fs_type, sysfs_type;
diff --git a/sepolicy/vendor/file_contexts b/sepolicy/vendor/file_contexts
index 4cd0b1e..406849b 100644
--- a/sepolicy/vendor/file_contexts
+++ b/sepolicy/vendor/file_contexts
@@ -5,6 +5,7 @@
# Charging
/dev/oplus_chg u:object_r:oplus_charger_device:s0
+/sys/class/oplus_chg/battery/voocchg_ing u:object_r:vendor_sysfs_battery_supply:s0
/(odm|vendor/odm)/bin/hw/vendor\.oplus\.hardware\.charger@1\.0-service u:object_r:hal_charger_oplus_exec:s0
# Display
@@ -13,9 +14,6 @@
# Light
/(vendor|system/vendor)/bin/hw/android\.hardware\.light-service\.spaced u:object_r:hal_light_default_exec:s0
-# LiveDisplay
-/(vendor|system/vendor)/bin/hw/vendor\.lineage\.livedisplay@2\.1-service-spaced u:object_r:hal_lineage_livedisplay_spaced_exec:s0
-
# Sensors
/(vendor|system/vendor)/bin/hw/android\.hardware\.sensors@2\.0-service-multihal\.spaced u:object_r:mtk_hal_sensors_exec:s0
/(odm|vendor/odm)/bin/hw/vendor\.oplus\.hardware\.oplusSensor@1\.0-service u:object_r:mtk_hal_sensors_exec:s0
@@ -41,6 +39,9 @@
/(vendor|system/vendor)/bin/hw/android\.hardware\.biometrics\.fingerprint@2\.3-service\.oplus u:object_r:hal_fingerprint_default_exec:s0
/vendor/bin/hw/android\.hardware\.biometrics\.fingerprint@2\.1-service-silead u:object_r:hal_fingerprint_default_exec:s0
+# Latency
+/dev/cpu_dma_latency u:object_r:latency_device:s0
+
# Firmwares
/odm/vendor/firmware(/.*)? u:object_r:vendor_firmware_file:s0
/odm/firmware(/.*)? u:object_r:vendor_firmware_file:s0
@@ -48,8 +49,8 @@
# NFC
/dev/pn553 u:object_r:nfc_device:s0
-# Touch
-/(vendor|system/vendor)/bin/hw/vendor\.lineage\.touch@[0-9]\.[0-9]-service\.oplus u:object_r:hal_lineage_touch_default_exec:s0
+# Perfmgr
+/(vendor|system/vendor)/bin/hw/android\.hardware\.power-service\.spaced-libperfmgr u:object_r:hal_power_default_exec:s0
# Vibrator
/vendor/bin/hw/android\.hardware\.vibrator-service\.mediatek u:object_r:hal_vibrator_default_exec:s0
diff --git a/sepolicy/vendor/genfs_contexts b/sepolicy/vendor/genfs_contexts
index 31e2245..a711ff6 100644
--- a/sepolicy/vendor/genfs_contexts
+++ b/sepolicy/vendor/genfs_contexts
@@ -15,6 +15,8 @@ genfscon proc /wireless
genfscon sysfs /class/oplus_chg u:object_r:vendor_sysfs_usb_supply:s0
genfscon sysfs /devices/virtual/oplus_chg u:object_r:vendor_sysfs_usb_supply:s0
genfscon sysfs /devices/platform/extcon_usb/extcon u:object_r:sysfs_extcon:s0
+genfscon sysfs /devices/system/cpu/cpufreq/mtk/.cluster_(min|max)_freq u:object_r:sysfs_mtk_cpufreq:s0
+genfscon sysfs /kernel/gpu/gpu_(min|max)_clock u:object_r:sysfs_mtk_gpufreq:s0
# Display
genfscon proc /devinfo/lcd u:object_r:vendor_proc_display:s0
@@ -43,8 +45,6 @@ genfscon sysfs /class/oplus_sensor u:object_r:vendor_sysfs_oplu
genfscon proc /oplusVersion u:object_r:vendor_proc_oplus_version:s0
# Performance
-genfscon proc /sys/vm/dirty_writeback_centisecs u:object_r:proc_vm_dirty:s0
-genfscon proc /sys/kernel/sched_stune_task_threshold u:object_r:proc_sched_stune:s0
genfscon proc /sys/kernel/sched_assist_enabled u:object_r:proc_sched_assist:s0
genfscon proc /sys/kernel/sched_assist_scene u:object_r:proc_sched_assist:s0
diff --git a/sepolicy/vendor/hal_lineage_health.te b/sepolicy/vendor/hal_lineage_health.te
deleted file mode 100644
index 53cd888..0000000
--- a/sepolicy/vendor/hal_lineage_health.te
+++ /dev/null
@@ -1 +0,0 @@
-rw_dir_file(hal_lineage_health_default, vendor_sysfs_usb_supply)
diff --git a/sepolicy/vendor/hal_lineage_livedisplay.te b/sepolicy/vendor/hal_lineage_livedisplay.te
deleted file mode 100644
index cc7c993..0000000
--- a/sepolicy/vendor/hal_lineage_livedisplay.te
+++ /dev/null
@@ -1,11 +0,0 @@
-type hal_lineage_livedisplay_spaced, domain;
-hal_server_domain(hal_lineage_livedisplay_spaced, hal_lineage_livedisplay)
-
-type hal_lineage_livedisplay_spaced_exec, exec_type, vendor_file_type, file_type;
-init_daemon_domain(hal_lineage_livedisplay_spaced)
-
-# Allow LiveDisplay HAL's default implementation to use vendor-binder service
-vndbinder_use(hal_lineage_livedisplay_spaced)
-
-allow hal_lineage_livedisplay_spaced vendor_sysfs_graphics:file rw_file_perms;
-allow hal_lineage_livedisplay_spaced vendor_sysfs_graphics:dir search;
\ No newline at end of file
diff --git a/sepolicy/vendor/hal_lineage_touch_default.te b/sepolicy/vendor/hal_lineage_touch_default.te
deleted file mode 100644
index cb7e3bd..0000000
--- a/sepolicy/vendor/hal_lineage_touch_default.te
+++ /dev/null
@@ -1,2 +0,0 @@
-allow hal_lineage_touch_default vendor_proc_display:dir search;
-allow hal_lineage_touch_default vendor_proc_display:file rw_file_perms;
diff --git a/sepolicy/vendor/hal_power_default.te b/sepolicy/vendor/hal_power_default.te
new file mode 100644
index 0000000..ce94424
--- /dev/null
+++ b/sepolicy/vendor/hal_power_default.te
@@ -0,0 +1,55 @@
+typeattribute hal_power_default mlstrustedsubject;
+
+allow hal_power_default sysfs_devices_system_cpu:file rw_file_perms;
+allow hal_power_default cgroup:dir search;
+allow hal_power_default cgroup:file rw_file_perms;
+allow hal_power_default vendor_sysfs_gpu:dir search;
+allow hal_power_default vendor_sysfs_gpu:file rw_file_perms;
+
+# To get/set powerhal state property
+set_prop(hal_power_default, vendor_power_prop)
+
+# Rule for hal_power_default to access graphics composer process
+unix_socket_connect(hal_power_default, pps, hal_graphics_composer_default);
+
+# Set scheduling info for apps (for adpf)
+allow hal_power_default appdomain:process { getsched setsched };
+allow hal_power_default self:capability sys_nice;
+
+# Set scheduling info for system_server (for adpf)
+allow hal_power_default system_server:process setsched;
+
+# Set CPU frequency
+allow hal_power_default sysfs_mtk_cpufreq:file rw_file_perms;
+allow hal_power_default sysfs_devices_system_cpu:file rw_file_perms;
+
+# Set GPU frequency
+allow hal_power_default sysfs_mtk_gpufreq:file rw_file_perms;
+allow hal_power_default sysfs_gpu:dir r_dir_perms;
+allow hal_power_default sysfs_gpu:file rw_file_perms;
+
+# Set perfmgr nodes
+allow hal_power_default proc_perfmgr:dir r_dir_perms;
+allow hal_power_default sysfs_fpsgo:file w_file_perms;
+allow hal_power_default proc_ppm:dir r_dir_perms;
+allow hal_power_default proc_ppm:file rw_file_perms;
+allow hal_power_default proc_cpufreq:dir r_dir_perms;
+allow hal_power_default proc_cpufreq:file rw_file_perms;
+allow hal_power_default proc_hps:dir r_dir_perms;
+allow hal_power_default proc_hps:file rw_file_perms;
+allow hal_power_default proc_cm_mgr:dir r_dir_perms;
+allow hal_power_default proc_cm_mgr:file rw_file_perms;
+allow hal_power_default proc_fliperfs:dir r_dir_perms;
+allow hal_power_default proc_fliperfs:file rw_file_perms;
+allow hal_power_default sysfs_fbt_cpu:dir r_dir_perms;
+allow hal_power_default sysfs_fbt_cpu:file rw_file_perms;
+allow hal_power_default sysfs_fbt_fteh:dir r_dir_perms;
+allow hal_power_default sysfs_fbt_fteh:file rw_file_perms;
+allow hal_power_default sysfs_fpsgo:dir r_dir_perms;
+allow hal_power_default sysfs_fpsgo:file rw_file_perms;
+allow hal_power_default vendor_sysfs_gpu:dir search;
+allow hal_power_default vendor_sysfs_gpu:file rw_file_perms;
+
+# Display
+allow hal_power_default vendor_proc_display:dir r_dir_perms;
+allow hal_power_default vendor_proc_display:file rw_file_perms;
diff --git a/sepolicy/vendor/mtk_hal_power.te b/sepolicy/vendor/mtk_hal_power.te
deleted file mode 100644
index 5ed0d7d..0000000
--- a/sepolicy/vendor/mtk_hal_power.te
+++ /dev/null
@@ -1,2 +0,0 @@
-allow mtk_hal_power vendor_proc_display:dir search;
-allow mtk_hal_power vendor_proc_display:file w_file_perms;
diff --git a/sepolicy/vendor/system_server.te b/sepolicy/vendor/system_server.te
new file mode 100644
index 0000000..a313e39
--- /dev/null
+++ b/sepolicy/vendor/system_server.te
@@ -0,0 +1,2 @@
+allow system_server vendor_sysfs_battery_supply:file r_file_perms;
+allow system_server vendor_sysfs_usb_supply:file r_file_perms;
diff --git a/sepolicy/vendor/vendor_init.te b/sepolicy/vendor/vendor_init.te
index 77d1a89..1e333fb 100644
--- a/sepolicy/vendor/vendor_init.te
+++ b/sepolicy/vendor/vendor_init.te
@@ -11,4 +11,4 @@ allow vendor_init vendor_sysfs_otg_switch:file w_file_perms;
get_prop(vendor_init, vendor_variant_prop)
-set_prop(vendor_init, vendor_mtk_pq_prop)
+set_prop(vendor_init, vendor_mtk_pq_prop)
\ No newline at end of file
diff --git a/system.prop b/system.prop
index 87fa846..d4838a5 100644
--- a/system.prop
+++ b/system.prop
@@ -13,6 +13,9 @@ Build.BRAND=MTK
# Camera
oplus.camera.packname=com.oplus.camera
+# Charger
+ro.charger.enable_suspend=true
+
# Display
ro.opengles.version=196610
diff --git a/update-sha1sums.py b/update-sha1sums.py
new file mode 100755
index 0000000..628f76e
--- /dev/null
+++ b/update-sha1sums.py
@@ -0,0 +1,79 @@
+#!/usr/bin/env python
+#
+# Copyright (C) 2016 The CyanogenMod Project
+# Copyright (C) 2017-2018 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.
+#
+
+from hashlib import sha1
+import sys
+
+device='spaced'
+vendor='realme'
+
+lines = [ line for line in open('proprietary-files.txt', 'r') ]
+vendorPath = '../../../vendor/' + vendor + '/' + device + '/proprietary'
+needSHA1 = False
+
+def cleanup():
+ for index, line in enumerate(lines):
+ # Remove '\n' character
+ line = line[:-1]
+
+ # Skip empty or commented lines
+ if len(line) == 0 or line[0] == '#':
+ continue
+
+ # Drop SHA1 hash, if existing
+ if '|' in line:
+ line = line.split('|')[0]
+ lines[index] = '%s\n' % (line)
+
+def update():
+ for index, line in enumerate(lines):
+ # Remove '\n' character
+ line = line[:-1]
+
+ # Skip empty lines
+ if len(line) == 0:
+ continue
+
+ # Check if we need to set SHA1 hash for the next files
+ if line[0] == '#':
+ needSHA1 = (' - from' in line)
+ continue
+
+ if needSHA1:
+ # Remove existing SHA1 hash
+ line = line.split('|')[0]
+ filePath = line.split(':')[1] if len(line.split(':')) == 2 else line
+
+ if filePath[0] == '-':
+ file = open('%s/%s' % (vendorPath, filePath[1:]), 'rb').read()
+ else:
+ file = open('%s/%s' % (vendorPath, filePath), 'rb').read()
+
+ hash = sha1(file).hexdigest()
+ lines[index] = '%s|%s\n' % (line, hash)
+
+if len(sys.argv) == 2 and sys.argv[1] == '-c':
+ cleanup()
+else:
+ update()
+
+with open('proprietary-files.txt', 'w') as file:
+ for line in lines:
+ file.write(line)
+
+ file.close()
diff --git a/vendor.prop b/vendor.prop
index 2cb8598..8ae39c4 100644
--- a/vendor.prop
+++ b/vendor.prop
@@ -96,8 +96,8 @@ debug.sf.early.sf.duration=27600000
debug.sf.early.app.duration=20000000
debug.sf.earlyGl.sf.duration=27600000
debug.sf.earlyGl.app.duration=20000000
-debug.sf.hwc.min.duration=23000000
-debug.sf.latch_unsignaled=true
+debug.sf.hwc.min.duration=17000000
+debug.sf.auto_latch_unsignaled=0
# DRAM
ro.vendor.mtk_config_max_dram_size=0x800000000
@@ -243,6 +243,11 @@ ro.vendor.mtk_nn_baseline_support=1
debug.mtk_tflite.target_nnapi=29
ro.vendor.mtk_nn_quant_preferred=1
+# Vibrator
+ro.vendor.vibrator.hal.click.duration=70
+ro.vendor.vibrator.hal.tick.duration=60
+ro.vendor.vibrator.hal.texture_tick.duration=40
+
# WFD
ro.vendor.mtk_wfd_support=1
ro.vendor.wfd.dummy.enable=0
@@ -255,6 +260,9 @@ ro.vendor.mediatek.version.branch=alps-mp-s0.mp1.tc16sp-pr9
ro.vendor.mediatek.version.release=alps-mp-s0.mp1.tc16sp-pr9-V1
ro.vendor.mtk_gamehdr_support=1
+# VNDK
+ro.vndk.version=35
+
# WiFi
ro.vendor.wifi.sap.interface=ap0
ro.vendor.mtk_wappush_support=1
diff --git a/vendorsetup.sh b/vendorsetup.sh
new file mode 100644
index 0000000..e44a806
--- /dev/null
+++ b/vendorsetup.sh
@@ -0,0 +1,20 @@
+echo start cloning repos
+VT=vendor/realme/spaced/spaced-vendor.mk
+if ! [ -a $VT ]; then git clone https://github.com/realme-mt6781-dev/android_vendor_realme_spaced vendor/realme/spaced
+fi
+KT=kernel/realme/mt6781/build.sh
+if ! [ -a $KT ]; then git clone --depth=1 https://github.com/HELLINFIX/android_kernel_realme_mt6781.git kernel/realme/mt6781
+fi
+MTK_SEPOLICY=device/mediatek/sepolicy_vndr/SEPolicy.mk
+if ! [ -a $MTK_SEPOLICY ]; then git clone https://github.com/realme-mt6781-dev/android_device_mediatek_sepolicy_vndr device/mediatek/sepolicy_vndr
+fi
+MTK=hardware/mediatek/Android.bp
+if ! [ -a $MTK ]; then git clone https://github.com/realme-mt6781-dev/android_hardware_mediatek hardware/mediatek
+fi
+OPLUS=hardware/oplus/Android.bp
+if ! [ -a $OPLUS ]; then git clone https://github.com/LineageOS/android_hardware_oplus hardware/oplus
+fi
+CLANG17=prebuilts/clang/host/linux-x86/clang-r487747/bin/clang
+if ! [ -a $CLANG17 ]; then git clone --depth=1 git clone https://gitlab.com/projectelixiros/android_prebuilts_clang_host_linux-x86_clang-r487747 prebuilts/clang/host/linux-x86/clang-r487747
+fi
+echo end cloning