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