]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - android/platform-hardware-interfaces.git/blob - health/2.0/default/include/health2/Health.h
health: registerCallback() and getHealthInfo() does not notify all callbacks
[android/platform-hardware-interfaces.git] / health / 2.0 / default / include / health2 / Health.h
1 #ifndef ANDROID_HARDWARE_HEALTH_V2_0_HEALTH_H
2 #define ANDROID_HARDWARE_HEALTH_V2_0_HEALTH_H
4 #include <memory>
5 #include <vector>
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>
12 using android::hardware::health::V2_0::StorageInfo;
13 using android::hardware::health::V2_0::DiskStats;
15 void get_storage_info(std::vector<struct StorageInfo>& info);
16 void get_disk_stats(std::vector<struct DiskStats>& stats);
18 namespace android {
19 namespace hardware {
20 namespace health {
21 namespace V2_0 {
22 namespace implementation {
24 using V1_0::BatteryStatus;
26 using ::android::hidl::base::V1_0::IBase;
28 struct 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.
34     static sp<Health> getImplementation();
36     Health(struct healthd_config* c);
38     void notifyListeners(HealthInfo* info);
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;
50     Return<void> getStorageInfo(getStorageInfo_cb _hidl_cb) override;
51     Return<void> getDiskStats(getDiskStats_cb _hidl_cb) override;
52     Return<void> getHealthInfo(getHealthInfo_cb _hidl_cb) override;
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;
57     void serviceDied(uint64_t cookie, const wp<IBase>& /* who */) override;
59    private:
60     static sp<Health> instance_;
62     std::recursive_mutex callbacks_lock_;
63     std::vector<sp<IHealthInfoCallback>> callbacks_;
64     std::unique_ptr<BatteryMonitor> battery_monitor_;
66     bool unregisterCallbackInternal(const sp<IBase>& cb);
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);
71 };
73 }  // namespace implementation
74 }  // namespace V2_0
75 }  // namespace health
76 }  // namespace hardware
77 }  // namespace android
79 #endif  // ANDROID_HARDWARE_HEALTH_V2_0_HEALTH_H