1 #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 12 using android::hardware::health::V2_0::StorageInfo; 13 using android::hardware::health::V2_0::DiskStats; 14 15 void get_storage_info(std::vector<struct StorageInfo>& info); 16 void get_disk_stats(std::vector<struct DiskStats>& stats); 17 18 namespace android { 19 namespace hardware { 20 namespace health { 21 namespace V2_0 { 22 namespace implementation { 23 24 using V1_0::BatteryStatus; 25 26 using ::android::hidl::base::V1_0::IBase; 27 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(); 35 36 Health(struct healthd_config* c); 37 38 void notifyListeners(HealthInfo* info); 39 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; 53 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 62 std::recursive_mutex callbacks_lock_; 63 std::vector<sp<IHealthInfoCallback>> callbacks_; 64 std::unique_ptr<BatteryMonitor> battery_monitor_; 65 66 bool unregisterCallbackInternal(const sp<IBase>& cb); 67 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 }; 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 80