1 #pragma once 2 3 #include <memory> 4 #include <string> 5 6 namespace phosphor 7 { 8 namespace power 9 { 10 11 /** 12 * @class Device 13 * 14 * This object is an abstract base class for a device that 15 * can be monitored for power faults. 16 */ 17 class Device 18 { 19 public: 20 Device() = delete; 21 virtual ~Device() = default; 22 Device(const Device&) = delete; 23 Device& operator=(const Device&) = delete; 24 Device(Device&&) = default; 25 Device& operator=(Device&&) = default; 26 27 /** 28 * Constructor 29 * 30 * @param name - the device name 31 * @param inst - the device instance 32 */ 33 Device(const std::string& name, size_t inst) : name(name), instance(inst) {} 34 35 /** 36 * Returns the instance number 37 */ 38 inline auto getInstance() const 39 { 40 return instance; 41 } 42 43 /** 44 * Returns the name 45 */ 46 inline auto getName() const 47 { 48 return name; 49 } 50 51 /** 52 * Pure virtual function to analyze an error 53 */ 54 virtual void analyze() = 0; 55 56 /** 57 * Stubbed virtual function to call when it's known 58 * the chip is in error state. Override if functionality 59 * is required 60 */ 61 virtual void onFailure() {} 62 63 /** 64 * Pure virtual function to clear faults on the device 65 */ 66 virtual void clearFaults() = 0; 67 68 private: 69 /** 70 * the device name 71 */ 72 const std::string name; 73 74 /** 75 * the device instance number 76 */ 77 const size_t instance; 78 }; 79 80 } // namespace power 81 } // namespace phosphor 82