1 #pragma once 2 3 #include <memory> 4 #include <string> 5 6 namespace witherspoon 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 37 /** 38 * Returns the instance number 39 */ 40 inline auto getInstance() const 41 { 42 return instance; 43 } 44 45 /** 46 * Returns the name 47 */ 48 inline auto getName() const 49 { 50 return name; 51 } 52 53 /** 54 * Pure virtual function to analyze an error 55 */ 56 virtual void analyze() = 0; 57 58 /** 59 * Stubbed virtual function to call when it's known 60 * the chip is in error state. Override if functionality 61 * is required 62 */ 63 virtual void onFailure() 64 { 65 } 66 67 /** 68 * Pure virtual function to clear faults on the device 69 */ 70 virtual void clearFaults() = 0; 71 72 private: 73 /** 74 * the device name 75 */ 76 const std::string name; 77 78 /** 79 * the device instance number 80 */ 81 const size_t instance; 82 }; 83 84 } // namespace power 85 } // namespace witherspoon 86