#ifndef ANDROID_HARDWARE_POWERSTATS_RAILDATAPROVIDER_H #define ANDROID_HARDWARE_POWERSTATS_RAILDATAPROVIDER_H #include <fmq/MessageQueue.h> #include <pixelpowerstats/PowerStats.h> namespace android { namespace hardware { namespace google { namespace pixel { namespace powerstats { typedef MessageQueue<EnergyData, kSynchronizedReadWrite> MessageQueueSync; struct RailData { std::string devicePath; uint32_t index; std::string subsysName; uint32_t samplingRate; }; struct OnDeviceMmt { std::mutex mLock; bool hwEnabled; std::vector<std::string> devicePaths; std::map<std::string, RailData> railsInfo; std::vector<EnergyData> reading; std::unique_ptr<MessageQueueSync> fmqSynchronized; }; class RailDataProvider : public IRailDataProvider { public: RailDataProvider(); // Methods from ::android::hardware::power::stats::V1_0::IPowerStats follow. Return<void> getRailInfo(IPowerStats::getRailInfo_cb _hidl_cb) override; Return<void> getEnergyData(const hidl_vec<uint32_t>& railIndices, IPowerStats::getEnergyData_cb _hidl_cb) override; Return<void> streamEnergyData(uint32_t timeMs, uint32_t samplingRate, IPowerStats::streamEnergyData_cb _hidl_cb) override; private: OnDeviceMmt mOdpm; void findIioPowerMonitorNodes(); size_t parsePowerRails(); int parseIioEnergyNode(std::string devName); Status parseIioEnergyNodes(); }; } // namespace powerstats } // namespace pixel } // namespace google } // namespace hardware } // namespace android #endif // ANDROID_HARDWARE_POWERSTATS_RAILDATAPROVIDER_H