| |
| #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 |