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      */
Device(const std::string & name,size_t inst)33     Device(const std::string& name, size_t inst) : name(name), instance(inst) {}
34 
35     /**
36      * Returns the instance number
37      */
getInstance() const38     inline auto getInstance() const
39     {
40         return instance;
41     }
42 
43     /**
44      * Returns the name
45      */
getName() const46     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      */
onFailure()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 witherspoon
82