From 3d5b846424db0a99bd2ba15c507cb2ebb22659f9 Mon Sep 17 00:00:00 2001 From: Andy CrossGate Yan Date: Mon, 7 Nov 2022 22:14:27 -0500 Subject: [PATCH 01/12] gsi: Build QcRilAm and import SEPolicy for it Fixes in-call audio on QCOM --- device.mk | 4 ++++ sepolicy/private/hal_telephony.te | 4 ++++ sepolicy/private/hwservice_contexts | 3 +++ sepolicy/private/qcrilam_app.te | 22 ++++++++++++++++++++++ sepolicy/private/seapp_contexts | 1 + 5 files changed, 34 insertions(+) create mode 100644 sepolicy/private/hal_telephony.te create mode 100644 sepolicy/private/hwservice_contexts create mode 100644 sepolicy/private/qcrilam_app.te create mode 100644 sepolicy/private/seapp_contexts diff --git a/device.mk b/device.mk index 2d5a5d1..783f26f 100644 --- a/device.mk +++ b/device.mk @@ -69,6 +69,10 @@ PRODUCT_COPY_FILES += \ device/peter/gsi/bluetooth/audio/config/sysbta_audio_policy_configuration.xml:$(TARGET_COPY_OUT_SYSTEM)/etc/sysbta_audio_policy_configuration.xml \ device/peter/gsi/bluetooth/audio/config/sysbta_audio_policy_configuration_7_0.xml:$(TARGET_COPY_OUTY_SYSTEM)/etc/sysbta_audio_policy_configuration_7_0.xml +# QcRilAm service for QCOM in-call audio (packages/apps/QcRilAm) +PRODUCT_PACKAGES += \ + QcRilAm + # Enable ro.adb.secure on userdebug and user ifeq (,$(filter eng,$(TARGET_BUILD_VARIANT))) PRODUCT_SYSTEM_EXT_PROPERTIES += \ diff --git a/sepolicy/private/hal_telephony.te b/sepolicy/private/hal_telephony.te new file mode 100644 index 0000000..398de41 --- /dev/null +++ b/sepolicy/private/hal_telephony.te @@ -0,0 +1,4 @@ +type rild, domain; + +allow system_app hal_telephony_hwservice:hwservice_manager find; +allow { rild system_app } { rild system_app }:binder { call transfer }; diff --git a/sepolicy/private/hwservice_contexts b/sepolicy/private/hwservice_contexts new file mode 100644 index 0000000..91e2392 --- /dev/null +++ b/sepolicy/private/hwservice_contexts @@ -0,0 +1,3 @@ +# HIDL interface for QcRilAm +vendor.qti.hardware.radio.am::IQcRilAudio u:object_r:hal_telephony_hwservice:s0 +vendor.qti.qcril.am::IQcRilAudio u:object_r:hal_telephony_hwservice:s0 diff --git a/sepolicy/private/qcrilam_app.te b/sepolicy/private/qcrilam_app.te new file mode 100644 index 0000000..8b3dc0e --- /dev/null +++ b/sepolicy/private/qcrilam_app.te @@ -0,0 +1,22 @@ +type qcrilam_app, domain; + +app_domain(qcrilam_app) + +# Needed to get access to /data/data/com.sony.qcrilam +# Only getattr and search are requested since qcrilam does not write to its own directory +# /data/data/com.sony.qcrilam only has two empty subdirs +dontaudit qcrilam_app app_data_file:dir { getattr search }; + +# Access services that should be available to all apps +allow qcrilam_app app_api_service:service_manager find; + +# Find media.audio_flinger +allow qcrilam_app audioserver_service:service_manager find; +# Find isub +allow qcrilam_app radio_service:service_manager find; + +# Find the vendor.qti.hardware.radio.am::IQcRilAudio HIDL service +# And grant binder access to the host (`rild`) +hal_client_domain(qcrilam_app, hal_telephony) + +allow qcrilam_app cgroup:file w_file_perms; diff --git a/sepolicy/private/seapp_contexts b/sepolicy/private/seapp_contexts new file mode 100644 index 0000000..2153f7d --- /dev/null +++ b/sepolicy/private/seapp_contexts @@ -0,0 +1 @@ +user=_app seinfo=platform name=com.sony.qcrilam domain=qcrilam_app type=app_data_file From ad6573714de1c6be41956f37370cce8ec3abf977 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Tue, 6 Dec 2022 18:32:12 -0500 Subject: [PATCH 02/12] gsi: Fix typo copying sysbta audio policy configuration Thanks phhusson --- device.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/device.mk b/device.mk index 783f26f..f531520 100644 --- a/device.mk +++ b/device.mk @@ -67,7 +67,7 @@ PRODUCT_PACKAGES += \ PRODUCT_COPY_FILES += \ device/peter/gsi/bluetooth/audio/config/sysbta_audio_policy_configuration.xml:$(TARGET_COPY_OUT_SYSTEM)/etc/sysbta_audio_policy_configuration.xml \ - device/peter/gsi/bluetooth/audio/config/sysbta_audio_policy_configuration_7_0.xml:$(TARGET_COPY_OUTY_SYSTEM)/etc/sysbta_audio_policy_configuration_7_0.xml + device/peter/gsi/bluetooth/audio/config/sysbta_audio_policy_configuration_7_0.xml:$(TARGET_COPY_OUT_SYSTEM)/etc/sysbta_audio_policy_configuration_7_0.xml # QcRilAm service for QCOM in-call audio (packages/apps/QcRilAm) PRODUCT_PACKAGES += \ From 15872eb9da25bdd61e071deee81d22046c52221d Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Wed, 19 Apr 2023 21:05:32 -0400 Subject: [PATCH 03/12] Fake device properties for MTK trustkernel TEE MTK doesn't want their devices to boot non-Google GSIs from the **same** month with the **same** version. Co-authored-by: Pierre-Hugues Husson --- init/Android.bp | 1 + init/quirks/soc/mtk_trustkernel.cpp | 73 +++++++++++++++++++++++++++++ sepolicy/private/keymaster.te | 7 +++ 3 files changed, 81 insertions(+) create mode 100644 init/quirks/soc/mtk_trustkernel.cpp create mode 100644 sepolicy/private/keymaster.te diff --git a/init/Android.bp b/init/Android.bp index 3bfacd2..9074b1b 100644 --- a/init/Android.bp +++ b/init/Android.bp @@ -7,6 +7,7 @@ cc_binary { // SoC-specific quirks "quirks/soc/mtk_ril.cpp", + "quirks/soc/mtk_trustkernel.cpp", "quirks/soc/caf_audio.cpp", // Device-specific quirks diff --git a/init/quirks/soc/mtk_trustkernel.cpp b/init/quirks/soc/mtk_trustkernel.cpp new file mode 100644 index 0000000..caff620 --- /dev/null +++ b/init/quirks/soc/mtk_trustkernel.cpp @@ -0,0 +1,73 @@ +#include "../../quirks.h" + +#include + +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +using namespace std; + +#define AVB_PROP_OS_VERSION "com.android.build.boot.os_version" +#define AVB_PROP_SPL "com.android.build.boot.security_patch" + +optional> try_get_spl() { + string boot_part = "/dev/block/by-name/boot" + android::base::GetProperty("ro.boot.slot_suffix", ""); + + // Read from AVB footer, https://github.com/TrebleDroid/device_phh_treble/blob/android-13.0/fixSPL/getSPL.c + // First read into memory + int fd = open(boot_part.c_str(), O_RDONLY); + off_t size = lseek(fd, 0, SEEK_END); + lseek(fd, 0, SEEK_SET); + char *buf = (char *) malloc(size); + read(fd, buf, size); + + // Search for AVB footer property directly in the binary + char* p = (char *) memmem(buf, size, AVB_PROP_OS_VERSION, sizeof(AVB_PROP_OS_VERSION)); + if (p == nullptr) + return nullopt; + + p += sizeof(AVB_PROP_OS_VERSION); + string os_version(p); + + p = (char *) memmem(buf, size, AVB_PROP_SPL, sizeof(AVB_PROP_SPL)); + if (p == nullptr) + return nullopt; + + p += sizeof(AVB_PROP_SPL); + string spl(p); + + return make_pair(os_version, spl); +} + +class MtkTkQuirk : DeviceQuirk { +public: + bool ShouldRun() { + return filesystem::exists("/proc/tkcore/tkcore_log"); + } + + void Run() { + android::base::SetProperty("debug.phh.props.ice.trustkernel", "keymaster"); + android::base::SetProperty("debug.phh.props.teed", "keymaster"); + android::base::SetProperty("ro.keymaster.brn", "Android"); + android::base::SetProperty("ro.keymaster.mod", "AOSP on ARM64"); + + auto res = try_get_spl(); + + if (res) { + android::base::SetProperty("ro.keymaster.xxx.release", res->first); + android::base::SetProperty("ro.keymaster.xxx.security_patch", res->second); + } + + android::base::SetProperty("ctl.restart", "teed"); + } +}; + +LOAD_QUIRK(MtkTkQuirk) diff --git a/sepolicy/private/keymaster.te b/sepolicy/private/keymaster.te new file mode 100644 index 0000000..60105fb --- /dev/null +++ b/sepolicy/private/keymaster.te @@ -0,0 +1,7 @@ +# Access to fake keymaster SPL/Android version props -- from TrebleDroid +get_prop(hal_keymaster, default_prop); +get_prop(tee, default_prop); + +get_prop(hal_keymaster, system_prop); + +get_prop(hal_gatekeeper, system_prop); From bfc4cd8de60e461cfe312757bce3cb82c3e39466 Mon Sep 17 00:00:00 2001 From: LuK1337 Date: Thu, 20 Apr 2023 15:46:33 -0400 Subject: [PATCH 04/12] overlay: Set config_displayLightSensorType to android.sensor.light --- overlay/GsiFrameworkResTarget/res/values/config.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/overlay/GsiFrameworkResTarget/res/values/config.xml b/overlay/GsiFrameworkResTarget/res/values/config.xml index 423abd0..a89e86d 100644 --- a/overlay/GsiFrameworkResTarget/res/values/config.xml +++ b/overlay/GsiFrameworkResTarget/res/values/config.xml @@ -64,4 +64,8 @@ com.android.statementservice + + + android.sensor.light From a426233cb6cdbba7672845205aece1359b24c058 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sun, 23 Apr 2023 13:14:53 -0400 Subject: [PATCH 05/12] Add reversed aguiledbelt HIDL HAL --- interfaces/Android.bp | 5 +++++ .../mediatek/hardware/aguiledbelt/1.0/Android.bp | 16 ++++++++++++++++ .../aguiledbelt/1.0/IAguiLedBeltLight.hal | 14 ++++++++++++++ .../aguiledbelt/1.0/ILedBeltLightCallback.hal | 5 +++++ .../mediatek/hardware/aguiledbelt/1.0/types.hal | 15 +++++++++++++++ 5 files changed, 55 insertions(+) create mode 100644 interfaces/Android.bp create mode 100644 interfaces/vendor/mediatek/hardware/aguiledbelt/1.0/Android.bp create mode 100644 interfaces/vendor/mediatek/hardware/aguiledbelt/1.0/IAguiLedBeltLight.hal create mode 100644 interfaces/vendor/mediatek/hardware/aguiledbelt/1.0/ILedBeltLightCallback.hal create mode 100644 interfaces/vendor/mediatek/hardware/aguiledbelt/1.0/types.hal diff --git a/interfaces/Android.bp b/interfaces/Android.bp new file mode 100644 index 0000000..007ea3b --- /dev/null +++ b/interfaces/Android.bp @@ -0,0 +1,5 @@ +hidl_package_root { + name: "vendor", + path: "device/peter/gsi/interfaces/vendor", +} + diff --git a/interfaces/vendor/mediatek/hardware/aguiledbelt/1.0/Android.bp b/interfaces/vendor/mediatek/hardware/aguiledbelt/1.0/Android.bp new file mode 100644 index 0000000..2c1a28e --- /dev/null +++ b/interfaces/vendor/mediatek/hardware/aguiledbelt/1.0/Android.bp @@ -0,0 +1,16 @@ +// This file is autogenerated by hidl-gen -Landroidbp. + +hidl_interface { + name: "vendor.mediatek.hardware.aguiledbelt@1.0", + root: "vendor", + system_ext_specific: true, + srcs: [ + "types.hal", + "IAguiLedBeltLight.hal", + "ILedBeltLightCallback.hal", + ], + interfaces: [ + "android.hidl.base@1.0", + ], + gen_java: true, +} diff --git a/interfaces/vendor/mediatek/hardware/aguiledbelt/1.0/IAguiLedBeltLight.hal b/interfaces/vendor/mediatek/hardware/aguiledbelt/1.0/IAguiLedBeltLight.hal new file mode 100644 index 0000000..74b31f5 --- /dev/null +++ b/interfaces/vendor/mediatek/hardware/aguiledbelt/1.0/IAguiLedBeltLight.hal @@ -0,0 +1,14 @@ +package vendor.mediatek.hardware.aguiledbelt@1.0; + +import vendor.mediatek.hardware.aguiledbelt@1.0::ILedBeltLightCallback; + +interface IAguiLedBeltLight { + setLedBeltLightMusicState(uint32_t lightId, uint32_t color, uint32_t brightness, bool isRandom); + setLedBeltLightAtomphereState(uint32_t lightId, uint32_t color, uint32_t brightness); + setLedBeltLightState(uint32_t type, uint32_t color, uint32_t brightness); + setLedBeltBrightnessState(uint32_t lightId, uint32_t color, uint32_t brightness, bool isRandom); + setLedBeltPatternSettingsState(uint32_t lightId, uint32_t color, uint32_t brightness, bool isRandom); + setLedBeltAlwaysOnState(uint32_t lightId, uint32_t color, uint32_t brightness, bool isRandom); + setCallback(ILedBeltLightCallback callback); + setLedBeltChargingState(uint32_t lightId, uint32_t color); +}; diff --git a/interfaces/vendor/mediatek/hardware/aguiledbelt/1.0/ILedBeltLightCallback.hal b/interfaces/vendor/mediatek/hardware/aguiledbelt/1.0/ILedBeltLightCallback.hal new file mode 100644 index 0000000..2e64b30 --- /dev/null +++ b/interfaces/vendor/mediatek/hardware/aguiledbelt/1.0/ILedBeltLightCallback.hal @@ -0,0 +1,5 @@ +package vendor.mediatek.hardware.aguiledbelt@1.0; + +interface ILedBeltLightCallback { + onStateChanged(uint32_t id, uint32_t state); +}; diff --git a/interfaces/vendor/mediatek/hardware/aguiledbelt/1.0/types.hal b/interfaces/vendor/mediatek/hardware/aguiledbelt/1.0/types.hal new file mode 100644 index 0000000..2880a49 --- /dev/null +++ b/interfaces/vendor/mediatek/hardware/aguiledbelt/1.0/types.hal @@ -0,0 +1,15 @@ +package vendor.mediatek.hardware.aguiledbelt@1.0; + +enum LedBeltType: uint8_t { + BATTERY = 0x64, + WLR_BATTERY = 0x65, + NOTIFICATIONS = 0x66, + CALL = 0x67, + LIGHT_ID_VOICE_ASSISTANT = 0x68, + MUSIC = 0x6b, + LIGHT_ID_FLIP = 0x6c, + BRIGHTNESS = 0x6e, + ATMOSPHERE = 0x6f, + PATTERN_SETTINGS = 0x70, + ALWAYS_ON = 0x71, +}; From cdd0128b5b924a3517daee0165c56ca39eaa3fda Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sun, 23 Apr 2023 15:38:51 -0400 Subject: [PATCH 06/12] Add aguiledbeltctl command to control LEDs on Unihertz Luna --- cmds/Android.bp | 12 ++++++++ cmds/aguiledbeltctl.cpp | 62 +++++++++++++++++++++++++++++++++++++++++ device.mk | 4 +++ 3 files changed, 78 insertions(+) create mode 100644 cmds/Android.bp create mode 100644 cmds/aguiledbeltctl.cpp diff --git a/cmds/Android.bp b/cmds/Android.bp new file mode 100644 index 0000000..7daf55e --- /dev/null +++ b/cmds/Android.bp @@ -0,0 +1,12 @@ +cc_binary { + name: "aguiledbeltctl", + system_ext_specific: true, + srcs: [ + "aguiledbeltctl.cpp", + ], + shared_libs: [ + "vendor.mediatek.hardware.aguiledbelt@1.0", + "libutils", + "libhidlbase", + ], +} diff --git a/cmds/aguiledbeltctl.cpp b/cmds/aguiledbeltctl.cpp new file mode 100644 index 0000000..9d8b031 --- /dev/null +++ b/cmds/aguiledbeltctl.cpp @@ -0,0 +1,62 @@ +// vim: expandtab tabstop=4 shiftwidth=4 +#include +#include + +#include +#include + +using namespace ::vendor::mediatek::hardware::aguiledbelt::V1_0; + +void print_usage() { + std::cerr << "Usage: aguiledbeltctl " << std::endl; + std::cerr << " aguiledbeltctl clear" << std::endl; + std::cerr << std::endl; + std::cerr << " should be a binary string where each bit (0 or 1) corresponds to the ON state of each physical light belt" << std::endl; +} + +int main(int argc, char **argv) { + auto service = IAguiLedBeltLight::getService(); + + if (argc <= 1) { + print_usage(); + return -1; + } + + std::string arg1(argv[1]); + + if (arg1 == "clear") { + service->setLedBeltAlwaysOnState(0, 0, 0, false); + return 0; + } + + uint32_t light_id = std::stoi(std::string(argv[1]), nullptr, 2); + + if (light_id > 31) { + std::cerr << "First argument should be a bit field with each bit corresponding to one physical light belt" << std::endl; + return 0; + } + + if (argc < 6) { + print_usage(); + return -1; + } + + uint32_t r = std::stoi(std::string(argv[2])); + uint32_t g = std::stoi(std::string(argv[3])); + uint32_t b = std::stoi(std::string(argv[4])); + + if (r > 255 || g > 255 || b > 255) { + std::cerr << "Color channels must be bewteen 0 and 255" << std::endl; + return -1; + } + + uint32_t brightness = std::stoi(std::string(argv[5])); + + if (brightness > 100) { + std::cerr << "Brightness must be between 0 and 100" << std::endl; + return -1; + } + + service->setLedBeltAlwaysOnState(light_id, (r << 16) + (g << 8) + b, brightness, false); + return 0; +} diff --git a/device.mk b/device.mk index f531520..75cfc33 100644 --- a/device.mk +++ b/device.mk @@ -78,3 +78,7 @@ ifeq (,$(filter eng,$(TARGET_BUILD_VARIANT))) PRODUCT_SYSTEM_EXT_PROPERTIES += \ ro.adb.secure=1 endif + +# Custom commands +PRODUCT_PACKAGES += \ + aguiledbeltctl From 9bee6c0d9e7cc689afbf3fbe3ad14b0e40134416 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sun, 23 Apr 2023 15:39:22 -0400 Subject: [PATCH 07/12] interfaces: Correct LedBeltType usage --- .../mediatek/hardware/aguiledbelt/1.0/IAguiLedBeltLight.hal | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/interfaces/vendor/mediatek/hardware/aguiledbelt/1.0/IAguiLedBeltLight.hal b/interfaces/vendor/mediatek/hardware/aguiledbelt/1.0/IAguiLedBeltLight.hal index 74b31f5..61967c5 100644 --- a/interfaces/vendor/mediatek/hardware/aguiledbelt/1.0/IAguiLedBeltLight.hal +++ b/interfaces/vendor/mediatek/hardware/aguiledbelt/1.0/IAguiLedBeltLight.hal @@ -1,11 +1,12 @@ package vendor.mediatek.hardware.aguiledbelt@1.0; import vendor.mediatek.hardware.aguiledbelt@1.0::ILedBeltLightCallback; +import vendor.mediatek.hardware.aguiledbelt@1.0::LedBeltType; interface IAguiLedBeltLight { setLedBeltLightMusicState(uint32_t lightId, uint32_t color, uint32_t brightness, bool isRandom); setLedBeltLightAtomphereState(uint32_t lightId, uint32_t color, uint32_t brightness); - setLedBeltLightState(uint32_t type, uint32_t color, uint32_t brightness); + setLedBeltLightState(LedBeltType type, uint32_t color, uint32_t brightness); setLedBeltBrightnessState(uint32_t lightId, uint32_t color, uint32_t brightness, bool isRandom); setLedBeltPatternSettingsState(uint32_t lightId, uint32_t color, uint32_t brightness, bool isRandom); setLedBeltAlwaysOnState(uint32_t lightId, uint32_t color, uint32_t brightness, bool isRandom); From 8bb3c4bb3de536fc0963ad7e584eb08ac43ab670 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Tue, 25 Apr 2023 13:02:16 -0400 Subject: [PATCH 08/12] gsi: Allow system apps to access aguiledbelt For Unihertz Luna LEDs --- sepolicy/private/hal_aguiledbelt_hwservice.te | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 sepolicy/private/hal_aguiledbelt_hwservice.te diff --git a/sepolicy/private/hal_aguiledbelt_hwservice.te b/sepolicy/private/hal_aguiledbelt_hwservice.te new file mode 100644 index 0000000..7058096 --- /dev/null +++ b/sepolicy/private/hal_aguiledbelt_hwservice.te @@ -0,0 +1,4 @@ +type hal_aguiledbelt_hwservice, hwservice_manager_type; +allow system_app hal_aguiledbelt_hwservice:hwservice_manager { find }; +type hal_aguiledbelt, domain; +allow system_app hal_aguiledbelt:binder { call }; From 3c0173bcc160f83a61c5113676f5e06c697b2342 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Thu, 27 Apr 2023 15:30:58 -0400 Subject: [PATCH 09/12] gsi: Enable android.software.telecom feature unconditionally This is checked by some VoIP software for dialer integration --- device.mk | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/device.mk b/device.mk index 75cfc33..80350e2 100644 --- a/device.mk +++ b/device.mk @@ -48,6 +48,10 @@ PRODUCT_COPY_FILES += \ PRODUCT_PACKAGES += \ OpenEUICC +# Telecom API (Phone Accounts, etc.) +PRODUCT_COPY_FILES += \ + frameworks/native/data/etc/android.software.telecom.xml:$(TARGET_COPY_OUT_PRODUCT)/etc/permissions/android.software.telecom.xml + # vendor/foss include vendor/foss/foss.mk From c935edd3d8499b5a188572efe30d9c4cd9d28fd3 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Mon, 21 Aug 2023 04:30:08 -0400 Subject: [PATCH 10/12] init_gsi: Ignore trustkernel hack if key{master,mint} is new enough The hack is no longer required on newer MTK devices and retaining the hack may cause more problems than it solves. --- init/quirks/soc/mtk_trustkernel.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/init/quirks/soc/mtk_trustkernel.cpp b/init/quirks/soc/mtk_trustkernel.cpp index caff620..e80bd55 100644 --- a/init/quirks/soc/mtk_trustkernel.cpp +++ b/init/quirks/soc/mtk_trustkernel.cpp @@ -50,7 +50,9 @@ optional> try_get_spl() { class MtkTkQuirk : DeviceQuirk { public: bool ShouldRun() { - return filesystem::exists("/proc/tkcore/tkcore_log"); + return filesystem::exists("/proc/tkcore/tkcore_log") + // No longer an issue after MediaTek upgraded to KeyMint AIDL services + && !filesystem::exists("/vendor/bin/hw/android.hardware.security.keymint-service.trustkernel"); } void Run() { From b9fb2010ee92811c599f14682238c0925515b0db Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Mon, 21 Aug 2023 05:21:26 -0400 Subject: [PATCH 11/12] init_gsi: quirks: Add support for Jelly Star touch keys handling --- init/quirks/device/unihertz_keylayout.cpp | 3 ++- quirks/keylayout/unihertz-mtk-tpd-kpd.kl | 6 ------ quirks/quirks.mk | 1 - 3 files changed, 2 insertions(+), 8 deletions(-) delete mode 100644 quirks/keylayout/unihertz-mtk-tpd-kpd.kl diff --git a/init/quirks/device/unihertz_keylayout.cpp b/init/quirks/device/unihertz_keylayout.cpp index 6fc4ed9..f3b44bf 100644 --- a/init/quirks/device/unihertz_keylayout.cpp +++ b/init/quirks/device/unihertz_keylayout.cpp @@ -16,7 +16,8 @@ public: Quirks::OverrideFolderWith("/system/usr/keylayout", [](auto p) { Quirks::CopyFileKeepPerms("/system/system_ext/quirks/keylayout/unihertz-fingerprint_key.kl", p / "fingerprint_key.kl"); Quirks::CopyFileKeepPerms("/system/system_ext/quirks/keylayout/unihertz-mtk-tpd.kl", p / "mtk-tpd.kl"); - Quirks::CopyFileKeepPerms("/system/system_ext/quirks/keylayout/unihertz-mtk-tpd-kpd.kl", p / "mtk-tpd-kpd.kl"); + Quirks::CopyFileKeepPerms("/system/system_ext/quirks/keylayout/unihertz-mtk-tpd.kl", p / "mtk-tpd-kpd.kl"); + Quirks::CopyFileKeepPerms("/system/system_ext/quirks/keylayout/unihertz-mtk-tpd.kl", p / "cap_touch.kl"); Quirks::CopyFileKeepPerms("/system/system_ext/quirks/keylayout/unihertz-mtk-kpd.kl", p / "mtk-kpd.kl"); }); } diff --git a/quirks/keylayout/unihertz-mtk-tpd-kpd.kl b/quirks/keylayout/unihertz-mtk-tpd-kpd.kl deleted file mode 100644 index 9024e2f..0000000 --- a/quirks/keylayout/unihertz-mtk-tpd-kpd.kl +++ /dev/null @@ -1,6 +0,0 @@ -# Keylayout for Unihertz devices with capacitive keys -# Capacitive navigation -key 172 HOME VIRTUAL -key 580 APP_SWITCH VIRTUAL -key 158 BACK VIRTUAL - diff --git a/quirks/quirks.mk b/quirks/quirks.mk index b82f7c9..b68de18 100644 --- a/quirks/quirks.mk +++ b/quirks/quirks.mk @@ -4,5 +4,4 @@ LOCAL_PATH := device/peter/gsi/quirks PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/keylayout/unihertz-fingerprint_key.kl:$(TARGET_COPY_OUT_SYSTEM_EXT)/quirks/keylayout/unihertz-fingerprint_key.kl \ $(LOCAL_PATH)/keylayout/unihertz-mtk-kpd.kl:$(TARGET_COPY_OUT_SYSTEM_EXT)/quirks/keylayout/unihertz-mtk-kpd.kl \ - $(LOCAL_PATH)/keylayout/unihertz-mtk-tpd-kpd.kl:$(TARGET_COPY_OUT_SYSTEM_EXT)/quirks/keylayout/unihertz-mtk-tpd-kpd.kl \ $(LOCAL_PATH)/keylayout/unihertz-mtk-tpd.kl:$(TARGET_COPY_OUT_SYSTEM_EXT)/quirks/keylayout/unihertz-mtk-tpd.kl \ From b591179d67a34ff82b2703ee04c027458f4c088a Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Tue, 22 Aug 2023 05:23:42 -0400 Subject: [PATCH 12/12] init_gsi: Add generic mechanism to preset properties --- init/Android.bp | 4 +++- init/init_gsi.cpp | 3 --- init/quirks.cpp | 14 ++++++++++++ init/quirks.h | 17 ++++++++++++++ init/quirks/device/ulefone_power_armor_13.cpp | 22 ------------------- init/quirks/preset_props.cpp | 15 +++++++++++++ 6 files changed, 49 insertions(+), 26 deletions(-) delete mode 100644 init/quirks/device/ulefone_power_armor_13.cpp create mode 100644 init/quirks/preset_props.cpp diff --git a/init/Android.bp b/init/Android.bp index 9074b1b..efdda28 100644 --- a/init/Android.bp +++ b/init/Android.bp @@ -4,6 +4,9 @@ cc_binary { srcs: [ "init_gsi.cpp", "quirks.cpp", + + // Per-device / SoC preset properties + "quirks/preset_props.cpp", // SoC-specific quirks "quirks/soc/mtk_ril.cpp", @@ -12,7 +15,6 @@ cc_binary { // Device-specific quirks "quirks/device/unihertz_keylayout.cpp", - "quirks/device/ulefone_power_armor_13.cpp", ], shared_libs: ["libbase", "libdl", "liblog", "libutils"], static_libs: ["libresetprop", "libc++fs"], diff --git a/init/init_gsi.cpp b/init/init_gsi.cpp index d1fd08a..5e2f3cd 100644 --- a/init/init_gsi.cpp +++ b/init/init_gsi.cpp @@ -9,9 +9,6 @@ using namespace android; using namespace std; -// From libresetprop -extern int setprop(const char *name, const char *value, bool trigger); - void override_ro_prop(string prefix, string source, string postfix, string value) { if (value.length() == 0) return; diff --git a/init/quirks.cpp b/init/quirks.cpp index d3eab5b..7cb6aa6 100644 --- a/init/quirks.cpp +++ b/init/quirks.cpp @@ -3,6 +3,7 @@ #include "quirks.h" +#include #include #include #include @@ -11,6 +12,19 @@ #include #include +// Utility function used with preset properties +void __set_props(int _ignore, ...) { + va_list args; + va_start(args, _ignore); + + while (auto key = va_arg(args, const char*)) { + auto val = va_arg(args, const char*); + setprop(key, val, true); + } + + va_end(args); +} + // Default constructor to add self to the loaded list of quirks DeviceQuirk::DeviceQuirk() { Quirks::Add(this); diff --git a/init/quirks.h b/init/quirks.h index 812346f..c0c1b66 100644 --- a/init/quirks.h +++ b/init/quirks.h @@ -8,6 +8,9 @@ #include #include +// From libresetprop +extern int setprop(const char *name, const char *value, bool trigger); + #define PROP_STARTS_WITH(prop, prefix) \ (android::base::GetProperty(prop, "").rfind(prefix, 0) == 0) #define FP_STARTS_WITH(prefix) \ @@ -37,6 +40,20 @@ public: #define LOAD_QUIRK(NAME) \ static NAME _ignored; +void __set_props(int _ignore, ...); + +#define CONCAT_(x,y) x##y +#define CONCAT(x,y) CONCAT_(x,y) +#define UNIQUE_NAME CONCAT(_unique_name_, __LINE__) + +#define PRESET_PROPS(cond, ...) \ + class UNIQUE_NAME: DeviceQuirk { \ + public: \ + bool ShouldRun() { return cond; } \ + void Run() { __set_props(0, __VA_ARGS__, NULL); } \ + }; \ + static UNIQUE_NAME CONCAT(_ignored, UNIQUE_NAME); + namespace Quirks { void Add(DeviceQuirk* quirk); void Run(); diff --git a/init/quirks/device/ulefone_power_armor_13.cpp b/init/quirks/device/ulefone_power_armor_13.cpp deleted file mode 100644 index 28a689c..0000000 --- a/init/quirks/device/ulefone_power_armor_13.cpp +++ /dev/null @@ -1,22 +0,0 @@ -#include "../../quirks.h" - -#include - -#include - -using namespace std; - -class UlefonePowerArmor13Quirks : DeviceQuirk { -public: - bool ShouldRun() { - return FP_STARTS_WITH("Ulefone/Power_Armor_13/"); - } - - void Run() { - // Set the A2DP offload properties to disabled so legacy policy is loaded - android::base::SetProperty("persist.bluetooth.a2dp_offload.disabled", "true"); - android::base::SetProperty("persist.bluetooth.bluetooth_audio_hal.disabled", "true"); - } -}; - -LOAD_QUIRK(UlefonePowerArmor13Quirks); diff --git a/init/quirks/preset_props.cpp b/init/quirks/preset_props.cpp new file mode 100644 index 0000000..f97473e --- /dev/null +++ b/init/quirks/preset_props.cpp @@ -0,0 +1,15 @@ +#include "../quirks.h" + +#include + +// Disable navbar by default on devices known to have physical keys +PRESET_PROPS( + FP_STARTS_WITH("Unihertz/Jelly") || FP_STARTS_WITH("Unihertz/Atom"), + "persist.sys.gsi.hw.mainkeys", "1" +); + +// Some xiaomi devices: Override default network mode to enable 5G +PRESET_PROPS( + FP_STARTS_WITH("Redmi/gauguin"), + "ro.telephony.default_network", "33,22" +);