You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
2.9 KiB
80 lines
2.9 KiB
7 months ago
|
#ifndef ANDROID_HARDWARE_HEALTH_V2_0_HEALTH_H
|
||
|
#define ANDROID_HARDWARE_HEALTH_V2_0_HEALTH_H
|
||
|
|
||
|
#include <memory>
|
||
|
#include <vector>
|
||
|
|
||
|
#include <android/hardware/health/1.0/types.h>
|
||
|
#include <android/hardware/health/2.0/IHealth.h>
|
||
|
#include <healthd/BatteryMonitor.h>
|
||
|
#include <hidl/Status.h>
|
||
|
|
||
|
using android::hardware::health::V2_0::StorageInfo;
|
||
|
using android::hardware::health::V2_0::DiskStats;
|
||
|
|
||
|
void get_storage_info(std::vector<struct StorageInfo>& info);
|
||
|
void get_disk_stats(std::vector<struct DiskStats>& stats);
|
||
|
|
||
|
namespace android {
|
||
|
namespace hardware {
|
||
|
namespace health {
|
||
|
namespace V2_0 {
|
||
|
namespace implementation {
|
||
|
|
||
|
using V1_0::BatteryStatus;
|
||
|
|
||
|
using ::android::hidl::base::V1_0::IBase;
|
||
|
|
||
|
struct Health : public IHealth, hidl_death_recipient {
|
||
|
public:
|
||
|
static sp<IHealth> initInstance(struct healthd_config* c);
|
||
|
// Should only be called by implementation itself (-impl, -service).
|
||
|
// Clients should not call this function. Instead, initInstance() initializes and returns the
|
||
|
// global instance that has fewer functions.
|
||
|
static sp<Health> getImplementation();
|
||
|
|
||
|
Health(struct healthd_config* c);
|
||
|
|
||
|
void notifyListeners(HealthInfo* info);
|
||
|
|
||
|
// Methods from IHealth follow.
|
||
|
Return<Result> registerCallback(const sp<IHealthInfoCallback>& callback) override;
|
||
|
Return<Result> unregisterCallback(const sp<IHealthInfoCallback>& callback) override;
|
||
|
Return<Result> update() override;
|
||
|
Return<void> getChargeCounter(getChargeCounter_cb _hidl_cb) override;
|
||
|
Return<void> getCurrentNow(getCurrentNow_cb _hidl_cb) override;
|
||
|
Return<void> getCurrentAverage(getCurrentAverage_cb _hidl_cb) override;
|
||
|
Return<void> getCapacity(getCapacity_cb _hidl_cb) override;
|
||
|
Return<void> getEnergyCounter(getEnergyCounter_cb _hidl_cb) override;
|
||
|
Return<void> getChargeStatus(getChargeStatus_cb _hidl_cb) override;
|
||
|
Return<void> getStorageInfo(getStorageInfo_cb _hidl_cb) override;
|
||
|
Return<void> getDiskStats(getDiskStats_cb _hidl_cb) override;
|
||
|
Return<void> getHealthInfo(getHealthInfo_cb _hidl_cb) override;
|
||
|
|
||
|
// Methods from ::android::hidl::base::V1_0::IBase follow.
|
||
|
Return<void> debug(const hidl_handle& fd, const hidl_vec<hidl_string>& args) override;
|
||
|
|
||
|
void serviceDied(uint64_t cookie, const wp<IBase>& /* who */) override;
|
||
|
|
||
|
private:
|
||
|
static sp<Health> instance_;
|
||
|
|
||
|
std::recursive_mutex callbacks_lock_;
|
||
|
std::vector<sp<IHealthInfoCallback>> callbacks_;
|
||
|
std::unique_ptr<BatteryMonitor> battery_monitor_;
|
||
|
|
||
|
bool unregisterCallbackInternal(const sp<IBase>& cb);
|
||
|
|
||
|
// update() and only notify the given callback, but none of the other callbacks.
|
||
|
// If cb is null, do not notify any callback at all.
|
||
|
Return<Result> updateAndNotify(const sp<IHealthInfoCallback>& cb);
|
||
|
};
|
||
|
|
||
|
} // namespace implementation
|
||
|
} // namespace V2_0
|
||
|
} // namespace health
|
||
|
} // namespace hardware
|
||
|
} // namespace android
|
||
|
|
||
|
#endif // ANDROID_HARDWARE_HEALTH_V2_0_HEALTH_H
|