diff --git a/aidl/health/Android.bp b/aidl/health/Android.bp new file mode 100644 index 00000000..19265d3a --- /dev/null +++ b/aidl/health/Android.bp @@ -0,0 +1,47 @@ +/* + * 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. + */ + +cc_defaults { + name: "android.hardware.health-service.samsung-defaults", + defaults: [ + "libhealth_aidl_impl_user", + "libhealth_aidl_charger_defaults", + ], + relative_install_path: "hw", + vintf_fragments: ["android.hardware.health-service.samsung.xml"], + srcs: [ + "Health.cpp", + ], + static_libs: [ + "libhealth_aidl_impl", + ], +} + +cc_binary { + name: "android.hardware.health-service.samsung", + defaults: ["android.hardware.health-service.samsung-defaults"], + vendor: true, + init_rc: ["android.hardware.health-service.samsung.rc"], + overrides: ["charger"], +} + +cc_binary { + name: "android.hardware.health-service.samsung-recovery", + defaults: ["android.hardware.health-service.samsung-defaults"], + recovery: true, + init_rc: ["android.hardware.health-service.samsung-recovery.rc"], + overrides: ["charger.recovery"], +} diff --git a/aidl/health/Health.cpp b/aidl/health/Health.cpp new file mode 100644 index 00000000..39d03bf1 --- /dev/null +++ b/aidl/health/Health.cpp @@ -0,0 +1,77 @@ +/* + * Copyright (C) 2021 The Android Open Source Project + * 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 +#include +#include +#include + +#ifndef CHARGER_FORCE_NO_UI +#define CHARGER_FORCE_NO_UI 0 +#endif + +#if !CHARGER_FORCE_NO_UI +#include +#endif + +using aidl::android::hardware::health::HalHealthLoop; +using aidl::android::hardware::health::Health; + +#if !CHARGER_FORCE_NO_UI +using aidl::android::hardware::health::charger::ChargerCallback; +using aidl::android::hardware::health::charger::ChargerModeMain; +#endif + +static constexpr const char* gInstanceName = "default"; +static constexpr std::string_view gChargerArg{"--charger"}; + +#if !CHARGER_FORCE_NO_UI +namespace aidl::android::hardware::health { +class ChargerCallbackImpl : public ChargerCallback { +public: + using ChargerCallback::ChargerCallback; + bool ChargerEnableSuspend() override { return true; } +}; +} // namespace aidl::android::hardware::health +#endif + +int main(int argc, char** argv) { +#ifdef __ANDROID_RECOVERY__ + android::base::InitLogging(argv, android::base::KernelLogger); +#endif + + // make a default health service + auto config = std::make_unique(); + ::android::hardware::health::InitHealthdConfig(config.get()); + auto binder = ndk::SharedRefBase::make(gInstanceName, std::move(config)); + + if (argc >= 2 && argv[1] == gChargerArg) { +#if !CHARGER_FORCE_NO_UI + // If charger shouldn't have UI for your device, simply drop the line below + // for your service implementation. This corresponds to + // ro.charger.no_ui=true + return ChargerModeMain(binder, std::make_shared(binder)); +#endif + + LOG(INFO) << "Starting charger mode without UI."; + } else { + LOG(INFO) << "Starting health HAL."; + } + + auto hal_health_loop = std::make_shared(binder, binder); + return hal_health_loop->StartLoop(); +} diff --git a/aidl/health/android.hardware.health-service.samsung-recovery.rc b/aidl/health/android.hardware.health-service.samsung-recovery.rc new file mode 100644 index 00000000..59aa97cf --- /dev/null +++ b/aidl/health/android.hardware.health-service.samsung-recovery.rc @@ -0,0 +1,7 @@ +service vendor.health-samsung /system/bin/hw/android.hardware.health-service.samsung-recovery + class hal + seclabel u:r:hal_health_default:s0 + user system + group system + capabilities WAKE_ALARM BLOCK_SUSPEND + file /dev/kmsg w diff --git a/aidl/health/android.hardware.health-service.samsung.rc b/aidl/health/android.hardware.health-service.samsung.rc new file mode 100644 index 00000000..5d08aaee --- /dev/null +++ b/aidl/health/android.hardware.health-service.samsung.rc @@ -0,0 +1,20 @@ +service vendor.health-samsung /vendor/bin/hw/android.hardware.health-service.samsung + class hal + user system + group system + capabilities WAKE_ALARM BLOCK_SUSPEND + file /dev/kmsg w + +service vendor.charger /vendor/bin/hw/android.hardware.health-service.samsung --charger + class charger + seclabel u:r:charger_vendor:s0 + user system + group system 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 + +on charger + chown system system /dev/graphics/fb0 diff --git a/aidl/health/android.hardware.health-service.samsung.xml b/aidl/health/android.hardware.health-service.samsung.xml new file mode 100644 index 00000000..98026cbd --- /dev/null +++ b/aidl/health/android.hardware.health-service.samsung.xml @@ -0,0 +1,7 @@ + + + android.hardware.health + 1 + IHealth/default + +