charger: uses health HAL service.
hwservicemanager starts in charger, so directly get the health HAL service. Also sets up Android base kernel logging. Bug: 142674987 Test: turn off device and charge, health HAL starts before charger, and inspect logs to confirm charger is reading from health HAL Test: make health HAL start after charger, and inspect logs to confirm charger is reading from health HAL. Change-Id: I5ba50a4b931735d1d14a50940e37c1e407dda34d
This commit is contained in:
parent
5562b076b7
commit
3aa3b3c627
5 changed files with 21 additions and 38 deletions
|
@ -14,6 +14,8 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include <android-base/logging.h>
|
||||
|
||||
#include "charger.sysprop.h"
|
||||
#include "healthd_mode_charger.h"
|
||||
#include "healthd_mode_charger_nops.h"
|
||||
|
@ -23,6 +25,7 @@
|
|||
#endif
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
android::base::InitLogging(argv, &android::base::KernelLogger);
|
||||
if (CHARGER_FORCE_NO_UI || android::sysprop::ChargerProperties::no_ui().value_or(false)) {
|
||||
return healthd_charger_nops(argc, argv);
|
||||
} else {
|
||||
|
|
|
@ -17,50 +17,28 @@
|
|||
#include "charger_utils.h"
|
||||
|
||||
#include <android-base/logging.h>
|
||||
#include <android/hidl/manager/1.0/IServiceManager.h>
|
||||
#include <android/hardware/health/2.1/IHealth.h>
|
||||
#include <health/utils.h>
|
||||
#include <health2impl/Health.h>
|
||||
#include <hidl/ServiceManagement.h>
|
||||
|
||||
using android::hardware::getPassthroughServiceManager;
|
||||
using android::hidl::base::V1_0::IBase;
|
||||
using android::hidl::manager::V1_0::IServiceManager;
|
||||
|
||||
namespace android {
|
||||
namespace hardware {
|
||||
namespace health {
|
||||
sp<V2_1::IHealth> GetPassthroughHealthImpl() {
|
||||
// Not using getService() because there is no hwservicemanager in charger mode.
|
||||
sp<IServiceManager> pm = getPassthroughServiceManager();
|
||||
if (pm == nullptr) {
|
||||
LOG(WARNING) << "Cannot get passthrough service manager.";
|
||||
return nullptr;
|
||||
}
|
||||
sp<IBase> base = pm->get(V2_0::IHealth::descriptor, "default");
|
||||
if (base == nullptr) {
|
||||
LOG(WARNING) << "Cannot find passthrough implementation of health 2.0 HAL for instance "
|
||||
"'default' on the device.";
|
||||
return nullptr;
|
||||
}
|
||||
sp<V2_1::IHealth> service = V2_1::IHealth::castFrom(base);
|
||||
if (service == nullptr) {
|
||||
LOG(WARNING)
|
||||
<< "Cannot cast passthrough implementation of health 2.0 HAL to 2.1 for instance "
|
||||
"'default' on the device.";
|
||||
return nullptr;
|
||||
}
|
||||
return service;
|
||||
}
|
||||
|
||||
sp<V2_1::IHealth> GetPassthroughHealth() {
|
||||
auto impl = GetPassthroughHealthImpl();
|
||||
if (impl == nullptr) {
|
||||
sp<V2_1::IHealth> GetHealthServiceOrDefault() {
|
||||
// No need to use get_health_service from libhealthhalutils that
|
||||
// checks for "backup" instance provided by healthd, since
|
||||
// V2_1::implementation::Health does the same thing.
|
||||
sp<V2_1::IHealth> service = V2_1::IHealth::getService();
|
||||
if (service != nullptr) {
|
||||
LOG(INFO) << "Charger uses health HAL service.";
|
||||
} else {
|
||||
LOG(WARNING) << "Charger uses system defaults.";
|
||||
auto config = std::make_unique<healthd_config>();
|
||||
InitHealthdConfig(config.get());
|
||||
impl = new V2_1::implementation::Health(std::move(config));
|
||||
service = new V2_1::implementation::Health(std::move(config));
|
||||
}
|
||||
return impl;
|
||||
return service;
|
||||
}
|
||||
|
||||
} // namespace health
|
||||
|
|
|
@ -21,7 +21,9 @@
|
|||
namespace android {
|
||||
namespace hardware {
|
||||
namespace health {
|
||||
sp<V2_1::IHealth> GetPassthroughHealth();
|
||||
// Return health HAL service. If it is not supported on the device (with
|
||||
// VINTF checks), return a default passthrough implementation.
|
||||
sp<V2_1::IHealth> GetHealthServiceOrDefault();
|
||||
} // namespace health
|
||||
} // namespace hardware
|
||||
} // namespace android
|
||||
|
|
|
@ -60,7 +60,7 @@
|
|||
|
||||
using namespace android;
|
||||
using android::hardware::Return;
|
||||
using android::hardware::health::GetPassthroughHealth;
|
||||
using android::hardware::health::GetHealthServiceOrDefault;
|
||||
using android::hardware::health::HealthLoop;
|
||||
using android::hardware::health::V1_0::BatteryStatus;
|
||||
using android::hardware::health::V2_0::Result;
|
||||
|
@ -742,6 +742,6 @@ int healthd_charger_main(int argc, char** argv) {
|
|||
}
|
||||
}
|
||||
|
||||
Charger charger(GetPassthroughHealth());
|
||||
Charger charger(GetHealthServiceOrDefault());
|
||||
return charger.StartLoop();
|
||||
}
|
||||
|
|
|
@ -20,10 +20,10 @@
|
|||
|
||||
#include "charger_utils.h"
|
||||
|
||||
using android::hardware::health::GetPassthroughHealth;
|
||||
using android::hardware::health::GetHealthServiceOrDefault;
|
||||
using android::hardware::health::V2_1::implementation::HalHealthLoop;
|
||||
|
||||
int healthd_charger_nops(int /* argc */, char** /* argv */) {
|
||||
HalHealthLoop charger("charger", GetPassthroughHealth());
|
||||
HalHealthLoop charger("charger", GetHealthServiceOrDefault());
|
||||
return charger.StartLoop();
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue