diff options
| author | Sandeep Patil <sspatil@google.com> | 2016-11-08 16:27:54 -0800 |
|---|---|---|
| committer | Sandeep Patil <sspatil@google.com> | 2016-11-10 15:19:24 -0800 |
| commit | a3681954b4241c8322d48a973be038df64ee0af4 (patch) | |
| tree | 6b0973c6f665e6351b2f9580ae60015ce1aa4669 /healthd | |
| parent | 29c42c670760ee9d3d1040628335fb2af9270e6c (diff) | |
| download | system_core-a3681954b4241c8322d48a973be038df64ee0af4.tar.gz system_core-a3681954b4241c8322d48a973be038df64ee0af4.tar.bz2 system_core-a3681954b4241c8322d48a973be038df64ee0af4.zip | |
healthd: start using the new Health hal
Subsequently moves the default board hooks to hardware/interface/health
where the new HAL is defined.
This change removes 'healthd's dependency on libhealthd.<target> static hal.
The dependency has now been *temporarily* moved to the new HAL
implementation in hardware/interfaces/health. 'charger' continues to depend
the static HAL.
Test: Tested healthd with and without a board specific health HAL on
Angler.
Bug: b/32724915
Change-Id: I35b56bacde7ded0517bc960f35538d6ca46e6b06
Signed-off-by: Sandeep Patil <sspatil@google.com>
Diffstat (limited to 'healthd')
| -rw-r--r-- | healthd/Android.mk | 14 | ||||
| -rw-r--r-- | healthd/healthd.cpp | 73 | ||||
| -rw-r--r-- | healthd/healthd_board_default.cpp | 29 |
3 files changed, 75 insertions, 41 deletions
diff --git a/healthd/Android.mk b/healthd/Android.mk index 5a6303e32..1a96e8847 100644 --- a/healthd/Android.mk +++ b/healthd/Android.mk @@ -3,16 +3,6 @@ LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) -LOCAL_SRC_FILES := healthd_board_default.cpp -LOCAL_MODULE := libhealthd.default -LOCAL_CFLAGS := -Werror -LOCAL_C_INCLUDES := $(LOCAL_PATH)/include -LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/include -LOCAL_STATIC_LIBRARIES := libbinder -LOCAL_EXPORT_STATIC_LIBRARY_HEADERS := libbinder -include $(BUILD_STATIC_LIBRARY) - -include $(CLEAR_VARS) LOCAL_SRC_FILES := BatteryMonitor.cpp LOCAL_MODULE := libbatterymonitor LOCAL_C_INCLUDES := $(LOCAL_PATH)/include @@ -189,6 +179,7 @@ LOCAL_STATIC_LIBRARIES := \ libhealthd_android \ libbatterymonitor \ libbatteryservice \ + android.hardware.health@1.0-convert \ LOCAL_SHARED_LIBRARIES := \ libbinder \ @@ -198,6 +189,7 @@ LOCAL_SHARED_LIBRARIES := \ liblog \ libm \ libc \ + libhidl \ + android.hardware.health@1.0 \ -LOCAL_HAL_STATIC_LIBRARIES := libhealthd include $(BUILD_EXECUTABLE) diff --git a/healthd/healthd.cpp b/healthd/healthd.cpp index 1ec8c2d8c..cae6c4c3c 100644 --- a/healthd/healthd.cpp +++ b/healthd/healthd.cpp @@ -24,13 +24,29 @@ #include <unistd.h> #include <cutils/klog.h> +#include <android/hardware/health/1.0/IHealth.h> +#include <android/hardware/health/1.0/types.h> +#include <hal_conversion.h> + using namespace android; +using IHealth = ::android::hardware::health::V1_0::IHealth; +using Result = ::android::hardware::health::V1_0::Result; +using HealthConfig = ::android::hardware::health::V1_0::HealthConfig; +using HealthInfo = ::android::hardware::health::V1_0::HealthInfo; + +using ::android::hardware::health::V1_0::hal_conversion::convertToHealthConfig; +using ::android::hardware::health::V1_0::hal_conversion::convertFromHealthConfig; +using ::android::hardware::health::V1_0::hal_conversion::convertToHealthInfo; +using ::android::hardware::health::V1_0::hal_conversion::convertFromHealthInfo; + +// device specific hal interface; +static sp<IHealth> gHealth; + // main healthd loop extern int healthd_main(void); // Android mode - extern void healthd_mode_android_init(struct healthd_config *config); extern int healthd_mode_android_preparetowait(void); extern void healthd_mode_android_heartbeat(void); @@ -44,6 +60,61 @@ static struct healthd_mode_ops android_ops = { .battery_update = healthd_mode_android_battery_update, }; +// default energy counter property redirect to talk to device +// HAL +static int healthd_board_get_energy_counter(int64_t *energy) { + + if (gHealth == nullptr) { + return NAME_NOT_FOUND; + } + + Result result = Result::NOT_SUPPORTED; + gHealth->energyCounter([=, &result] (Result ret, int64_t energyOut) { + result = ret; + *energy = energyOut; + }); + + return result == Result::SUCCESS ? OK : NAME_NOT_FOUND; +} + +void healthd_board_init(struct healthd_config *config) { + + // Initialize the board HAL - Equivalent of healthd_board_init(config) + // in charger/recovery mode. + + gHealth = IHealth::getService("health"); + if (gHealth == nullptr) { + KLOG_WARNING(LOG_TAG, "unable to get HAL interface, using defaults\n"); + return; + } + + HealthConfig halConfig; + convertToHealthConfig(config, halConfig); + gHealth->init(halConfig, [=] (const auto &halConfigOut) { + convertFromHealthConfig(halConfigOut, config); + // always redirect energy counter queries + config->energyCounter = healthd_board_get_energy_counter; + }); +} + +int healthd_board_battery_update(struct android::BatteryProperties *props) { + int logthis = 0; + + if (gHealth == nullptr) { + return logthis; + } + + HealthInfo info; + convertToHealthInfo(props, info); + gHealth->update(info, + [=, &logthis] (int32_t ret, const auto &infoOut) { + logthis = ret; + convertFromHealthInfo(infoOut, props); + }); + + return logthis; +} + int main(int /*argc*/, char ** /*argv*/) { healthd_mode_ops = &android_ops; diff --git a/healthd/healthd_board_default.cpp b/healthd/healthd_board_default.cpp deleted file mode 100644 index eb55773de..000000000 --- a/healthd/healthd_board_default.cpp +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (C) 2013 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. - */ - -#include <healthd/healthd.h> - -void healthd_board_init(struct healthd_config*) -{ - // use defaults -} - - -int healthd_board_battery_update(struct android::BatteryProperties*) -{ - // return 0 to log periodic polled battery status to kernel log - return 0; -} |
