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