blob: 6410474511fbfbf41264daf4b61696c35f032a53 [file] [log] [blame]
Hridya Valsarajud3e3d722017-12-11 17:31:00 -08001#ifndef ANDROID_HARDWARE_HEALTH_V2_0_HEALTH_H
2#define ANDROID_HARDWARE_HEALTH_V2_0_HEALTH_H
3
4#include <memory>
5#include <vector>
6
7#include <android/hardware/health/1.0/types.h>
8#include <android/hardware/health/2.0/IHealth.h>
9#include <healthd/BatteryMonitor.h>
10#include <hidl/Status.h>
11
Hridya Valsaraju2b520832017-12-20 13:25:29 -080012using android::hardware::health::V2_0::StorageInfo;
13using android::hardware::health::V2_0::DiskStats;
14
15void get_storage_info(std::vector<struct StorageInfo>& info);
16void get_disk_stats(std::vector<struct DiskStats>& stats);
17
Hridya Valsarajud3e3d722017-12-11 17:31:00 -080018namespace android {
19namespace hardware {
20namespace health {
21namespace V2_0 {
22namespace implementation {
23
24using V1_0::BatteryStatus;
Hridya Valsarajud3e3d722017-12-11 17:31:00 -080025
26using ::android::hidl::base::V1_0::IBase;
27
28struct Health : public IHealth, hidl_death_recipient {
29 public:
30 static sp<IHealth> initInstance(struct healthd_config* c);
31 // Should only be called by implementation itself (-impl, -service).
32 // Clients should not call this function. Instead, initInstance() initializes and returns the
33 // global instance that has fewer functions.
Hridya Valsarajud3e3d722017-12-11 17:31:00 -080034 static sp<Health> getImplementation();
35
36 Health(struct healthd_config* c);
37
Hridya Valsarajud31932a2018-01-17 23:09:24 -080038 void notifyListeners(HealthInfo* info);
Hridya Valsarajud3e3d722017-12-11 17:31:00 -080039
40 // Methods from IHealth follow.
41 Return<Result> registerCallback(const sp<IHealthInfoCallback>& callback) override;
42 Return<Result> unregisterCallback(const sp<IHealthInfoCallback>& callback) override;
43 Return<Result> update() override;
44 Return<void> getChargeCounter(getChargeCounter_cb _hidl_cb) override;
45 Return<void> getCurrentNow(getCurrentNow_cb _hidl_cb) override;
46 Return<void> getCurrentAverage(getCurrentAverage_cb _hidl_cb) override;
47 Return<void> getCapacity(getCapacity_cb _hidl_cb) override;
48 Return<void> getEnergyCounter(getEnergyCounter_cb _hidl_cb) override;
49 Return<void> getChargeStatus(getChargeStatus_cb _hidl_cb) override;
Hridya Valsaraju2b520832017-12-20 13:25:29 -080050 Return<void> getStorageInfo(getStorageInfo_cb _hidl_cb) override;
51 Return<void> getDiskStats(getDiskStats_cb _hidl_cb) override;
Hridya Valsaraju1bd37722018-01-12 10:25:59 -080052 Return<void> getHealthInfo(getHealthInfo_cb _hidl_cb) override;
Hridya Valsarajud3e3d722017-12-11 17:31:00 -080053
54 // Methods from ::android::hidl::base::V1_0::IBase follow.
55 Return<void> debug(const hidl_handle& fd, const hidl_vec<hidl_string>& args) override;
56
57 void serviceDied(uint64_t cookie, const wp<IBase>& /* who */) override;
58
59 private:
60 static sp<Health> instance_;
61
Yifan Honga46c0da2018-10-02 14:06:51 -070062 std::recursive_mutex callbacks_lock_;
Hridya Valsarajud3e3d722017-12-11 17:31:00 -080063 std::vector<sp<IHealthInfoCallback>> callbacks_;
64 std::unique_ptr<BatteryMonitor> battery_monitor_;
65
66 bool unregisterCallbackInternal(const sp<IBase>& cb);
Yifan Honge9fc2352018-10-02 14:11:35 -070067
68 // update() and only notify the given callback, but none of the other callbacks.
69 // If cb is null, do not notify any callback at all.
70 Return<Result> updateAndNotify(const sp<IHealthInfoCallback>& cb);
Hridya Valsarajud3e3d722017-12-11 17:31:00 -080071};
72
73} // namespace implementation
74} // namespace V2_0
75} // namespace health
76} // namespace hardware
77} // namespace android
78
79#endif // ANDROID_HARDWARE_HEALTH_V2_0_HEALTH_H