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