| /* |
| * Copyright (C) 2021 The Android Open Source Project |
| * Copyright (C) 2022 The LineageOS Project |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| #include <android-base/logging.h> |
| #include <android/binder_interface_utils.h> |
| #include <health-impl/Health.h> |
| #include <health/utils.h> |
| |
| #ifndef CHARGER_FORCE_NO_UI |
| #define CHARGER_FORCE_NO_UI 0 |
| #endif |
| |
| #if !CHARGER_FORCE_NO_UI |
| #include <health-impl/ChargerUtils.h> |
| #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<healthd_config>(); |
| ::android::hardware::health::InitHealthdConfig(config.get()); |
| auto binder = ndk::SharedRefBase::make<Health>(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<aidl::android::hardware::health::ChargerCallbackImpl>(binder)); |
| #endif |
| |
| LOG(INFO) << "Starting charger mode without UI."; |
| } else { |
| LOG(INFO) << "Starting health HAL."; |
| } |
| |
| auto hal_health_loop = std::make_shared<HalHealthLoop>(binder, binder); |
| return hal_health_loop->StartLoop(); |
| } |