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