diff options
author | Yifan Hong <elsk@google.com> | 2018-01-22 11:26:01 -0800 |
---|---|---|
committer | Yifan Hong <elsk@google.com> | 2018-01-22 12:49:13 -0800 |
commit | 4ad11a94741ca0108b48764395029b3a2ff9528b (patch) | |
tree | a465c935d6274f65c16258756e6ac817128f6a16 /health | |
parent | 75a2fb5441559c5cbacb92dee8de32942ed0935a (diff) | |
download | android_hardware_interfaces-4ad11a94741ca0108b48764395029b3a2ff9528b.tar.gz android_hardware_interfaces-4ad11a94741ca0108b48764395029b3a2ff9528b.tar.bz2 android_hardware_interfaces-4ad11a94741ca0108b48764395029b3a2ff9528b.zip |
health: move duplicate HealthServiceCommon
... to hardware/interfaces. HealthServiceCommon
becomes two separate libraries:
- libhealthservicedefault for services on vendor
- libhealthservicehealthd for healthd
Test: boots
Bug: 63702641
Change-Id: I40235cef7d4fa62103629bf507b0401e3f939654
Diffstat (limited to 'health')
-rw-r--r-- | health/2.0/utils/libhealthservice/Android.bp | 29 | ||||
-rw-r--r-- | health/2.0/utils/libhealthservice/HealthServiceCommon.cpp | 92 | ||||
-rw-r--r-- | health/2.0/utils/libhealthservice/include/health2/service.h | 22 |
3 files changed, 143 insertions, 0 deletions
diff --git a/health/2.0/utils/libhealthservice/Android.bp b/health/2.0/utils/libhealthservice/Android.bp new file mode 100644 index 000000000..88c38f212 --- /dev/null +++ b/health/2.0/utils/libhealthservice/Android.bp @@ -0,0 +1,29 @@ +// Reasonable defaults for android.hardware.health@2.0-service.<device>. +// Vendor service can customize by implementing functions defined in +// libhealthd and libhealthstoragedefault. + + +cc_library_static { + name: "libhealthservice", + vendor_available: true, + srcs: ["HealthServiceCommon.cpp"], + + export_include_dirs: ["include"], + + cflags: [ + "-Wall", + "-Werror", + ], + shared_libs: [ + "android.hardware.health@2.0", + ], + static_libs: [ + "android.hardware.health@2.0-impl", + "android.hardware.health@1.0-convert", + ], + export_static_lib_headers: [ + "android.hardware.health@1.0-convert", + ], + header_libs: ["libhealthd_headers"], + export_header_lib_headers: ["libhealthd_headers"], +} diff --git a/health/2.0/utils/libhealthservice/HealthServiceCommon.cpp b/health/2.0/utils/libhealthservice/HealthServiceCommon.cpp new file mode 100644 index 000000000..acb4501c0 --- /dev/null +++ b/health/2.0/utils/libhealthservice/HealthServiceCommon.cpp @@ -0,0 +1,92 @@ +/* + * Copyright 2017 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 "health@2.0/" +#include <android-base/logging.h> + +#include <android/hardware/health/1.0/types.h> +#include <hal_conversion.h> +#include <health2/Health.h> +#include <health2/service.h> +#include <healthd/healthd.h> +#include <hidl/HidlTransportSupport.h> + +using android::hardware::IPCThreadState; +using android::hardware::configureRpcThreadpool; +using android::hardware::handleTransportPoll; +using android::hardware::setupTransportPolling; +using android::hardware::health::V2_0::HealthInfo; +using android::hardware::health::V1_0::hal_conversion::convertToHealthInfo; +using android::hardware::health::V2_0::IHealth; +using android::hardware::health::V2_0::implementation::Health; + +extern int healthd_main(void); + +static int gBinderFd = -1; +static std::string gInstanceName; + +static void binder_event(uint32_t /*epevents*/) { + if (gBinderFd >= 0) handleTransportPoll(gBinderFd); +} + +void healthd_mode_service_2_0_init(struct healthd_config* config) { + LOG(INFO) << LOG_TAG << gInstanceName << " Hal is starting up..."; + + gBinderFd = setupTransportPolling(); + + if (gBinderFd >= 0) { + if (healthd_register_event(gBinderFd, binder_event)) + LOG(ERROR) << LOG_TAG << gInstanceName << ": Register for binder events failed"; + } + + android::sp<IHealth> service = Health::initInstance(config); + CHECK_EQ(service->registerAsService(gInstanceName), android::OK) + << LOG_TAG << gInstanceName << ": Failed to register HAL"; + + LOG(INFO) << LOG_TAG << gInstanceName << ": Hal init done"; +} + +int healthd_mode_service_2_0_preparetowait(void) { + IPCThreadState::self()->flushCommands(); + return -1; +} + +void healthd_mode_service_2_0_heartbeat(void) { + // noop +} + +void healthd_mode_service_2_0_battery_update(struct android::BatteryProperties* prop) { + HealthInfo info; + convertToHealthInfo(prop, info.legacy); + Health::getImplementation()->notifyListeners(&info); +} + +static struct healthd_mode_ops healthd_mode_service_2_0_ops = { + .init = healthd_mode_service_2_0_init, + .preparetowait = healthd_mode_service_2_0_preparetowait, + .heartbeat = healthd_mode_service_2_0_heartbeat, + .battery_update = healthd_mode_service_2_0_battery_update, +}; + +int health_service_main(const char* instance) { + gInstanceName = instance; + if (gInstanceName.empty()) { + gInstanceName = "default"; + } + healthd_mode_ops = &healthd_mode_service_2_0_ops; + LOG(INFO) << LOG_TAG << gInstanceName << ": Hal starting main loop..."; + return healthd_main(); +} diff --git a/health/2.0/utils/libhealthservice/include/health2/service.h b/health/2.0/utils/libhealthservice/include/health2/service.h new file mode 100644 index 000000000..d26056830 --- /dev/null +++ b/health/2.0/utils/libhealthservice/include/health2/service.h @@ -0,0 +1,22 @@ +/* + * Copyright 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. + */ + +#ifndef ANDROID_HARDWARE_HEALTH_V2_0_SERVICE_COMMON +#define ANDROID_HARDWARE_HEALTH_V2_0_SERVICE_COMMON + +int health_service_main(const char* instance = ""); + +#endif // ANDROID_HARDWARE_HEALTH_V2_0_SERVICE_COMMON |