blob: 16056a7b9de096438c9e70312396ff541870dffe [file] [log] [blame]
Matt Spinlerdae0a8d2017-07-24 13:42:55 -05001#pragma once
2
3#include <memory>
4#include <string>
5
6namespace witherspoon
7{
8namespace 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 */
17class Device
18{
Matt Spinlerf0f02b92018-10-25 16:12:43 -050019 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;
Matt Spinlerdae0a8d2017-07-24 13:42:55 -050026
Matt Spinlerf0f02b92018-10-25 16:12:43 -050027 /**
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)
Patrick Williams2c4fbc42020-06-26 15:33:11 -050034 {}
Matt Spinlerdae0a8d2017-07-24 13:42:55 -050035
Matt Spinlerf0f02b92018-10-25 16:12:43 -050036 /**
37 * Returns the instance number
38 */
39 inline auto getInstance() const
40 {
41 return instance;
42 }
Matt Spinlerdae0a8d2017-07-24 13:42:55 -050043
Matt Spinlerf0f02b92018-10-25 16:12:43 -050044 /**
45 * Returns the name
46 */
47 inline auto getName() const
48 {
49 return name;
50 }
Matt Spinlerdae0a8d2017-07-24 13:42:55 -050051
Matt Spinlerf0f02b92018-10-25 16:12:43 -050052 /**
53 * Pure virtual function to analyze an error
54 */
55 virtual void analyze() = 0;
Matt Spinlerdae0a8d2017-07-24 13:42:55 -050056
Matt Spinlerf0f02b92018-10-25 16:12:43 -050057 /**
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()
Patrick Williams2c4fbc42020-06-26 15:33:11 -050063 {}
Matt Spinlerdae0a8d2017-07-24 13:42:55 -050064
Matt Spinlerf0f02b92018-10-25 16:12:43 -050065 /**
66 * Pure virtual function to clear faults on the device
67 */
68 virtual void clearFaults() = 0;
Matt Spinlerb54357f2017-08-21 14:38:54 -050069
Matt Spinlerf0f02b92018-10-25 16:12:43 -050070 private:
71 /**
72 * the device name
73 */
74 const std::string name;
Matt Spinlerdae0a8d2017-07-24 13:42:55 -050075
Matt Spinlerf0f02b92018-10-25 16:12:43 -050076 /**
77 * the device instance number
78 */
79 const size_t instance;
Matt Spinlerdae0a8d2017-07-24 13:42:55 -050080};
81
Matt Spinlerf0f02b92018-10-25 16:12:43 -050082} // namespace power
83} // namespace witherspoon