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 Device() = delete; 21dae0a8d7SMatt Spinler virtual ~Device() = default; 22dae0a8d7SMatt Spinler Device(const Device&) = delete; 23dae0a8d7SMatt Spinler Device& operator=(const Device&) = delete; 24dae0a8d7SMatt Spinler Device(Device&&) = default; 25dae0a8d7SMatt Spinler Device& operator=(Device&&) = default; 26dae0a8d7SMatt Spinler 27dae0a8d7SMatt Spinler /** 28dae0a8d7SMatt Spinler * Constructor 29dae0a8d7SMatt Spinler * 30dae0a8d7SMatt Spinler * @param name - the device name 31dae0a8d7SMatt Spinler * @param inst - the device instance 32dae0a8d7SMatt Spinler */ 33*f0f02b9aSMatt Spinler Device(const std::string& name, size_t inst) : name(name), instance(inst) 34dae0a8d7SMatt Spinler { 35dae0a8d7SMatt Spinler } 36dae0a8d7SMatt Spinler 37dae0a8d7SMatt Spinler /** 38dae0a8d7SMatt Spinler * Returns the instance number 39dae0a8d7SMatt Spinler */ 40dae0a8d7SMatt Spinler inline auto getInstance() const 41dae0a8d7SMatt Spinler { 42dae0a8d7SMatt Spinler return instance; 43dae0a8d7SMatt Spinler } 44dae0a8d7SMatt Spinler 45dae0a8d7SMatt Spinler /** 46dae0a8d7SMatt Spinler * Returns the name 47dae0a8d7SMatt Spinler */ 48dae0a8d7SMatt Spinler inline auto getName() const 49dae0a8d7SMatt Spinler { 50dae0a8d7SMatt Spinler return name; 51dae0a8d7SMatt Spinler } 52dae0a8d7SMatt Spinler 53dae0a8d7SMatt Spinler /** 54dae0a8d7SMatt Spinler * Pure virtual function to analyze an error 55dae0a8d7SMatt Spinler */ 56dae0a8d7SMatt Spinler virtual void analyze() = 0; 57dae0a8d7SMatt Spinler 58dae0a8d7SMatt Spinler /** 59b54357f6SMatt Spinler * Stubbed virtual function to call when it's known 60b54357f6SMatt Spinler * the chip is in error state. Override if functionality 61b54357f6SMatt Spinler * is required 62b54357f6SMatt Spinler */ 63b54357f6SMatt Spinler virtual void onFailure() 64b54357f6SMatt Spinler { 65b54357f6SMatt Spinler } 66b54357f6SMatt Spinler 67b54357f6SMatt Spinler /** 68dae0a8d7SMatt Spinler * Pure virtual function to clear faults on the device 69dae0a8d7SMatt Spinler */ 70dae0a8d7SMatt Spinler virtual void clearFaults() = 0; 71dae0a8d7SMatt Spinler 72dae0a8d7SMatt Spinler private: 73dae0a8d7SMatt Spinler /** 74dae0a8d7SMatt Spinler * the device name 75dae0a8d7SMatt Spinler */ 76dae0a8d7SMatt Spinler const std::string name; 77dae0a8d7SMatt Spinler 78dae0a8d7SMatt Spinler /** 79dae0a8d7SMatt Spinler * the device instance number 80dae0a8d7SMatt Spinler */ 81dae0a8d7SMatt Spinler const size_t instance; 82dae0a8d7SMatt Spinler }; 83dae0a8d7SMatt Spinler 84*f0f02b9aSMatt Spinler } // namespace power 85*f0f02b9aSMatt Spinler } // namespace witherspoon 86