blob: c4a4e3ba625d42be937beca48ec6a70a0aff0410 [file] [log] [blame]
Matt Spinlerdae0a8d2017-07-24 13:42:55 -05001#pragma once
2
3#include <memory>
4#include <string>
5
Lei YUab093322019-10-09 16:43:22 +08006namespace phosphor
Matt Spinlerdae0a8d2017-07-24 13:42:55 -05007{
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 */
Patrick Williams48781ae2023-05-10 07:50:50 -050033 Device(const std::string& name, size_t inst) : name(name), instance(inst) {}
Matt Spinlerdae0a8d2017-07-24 13:42:55 -050034
Matt Spinlerf0f02b92018-10-25 16:12:43 -050035 /**
36 * Returns the instance number
37 */
38 inline auto getInstance() const
39 {
40 return instance;
41 }
Matt Spinlerdae0a8d2017-07-24 13:42:55 -050042
Matt Spinlerf0f02b92018-10-25 16:12:43 -050043 /**
44 * Returns the name
45 */
46 inline auto getName() const
47 {
48 return name;
49 }
Matt Spinlerdae0a8d2017-07-24 13:42:55 -050050
Matt Spinlerf0f02b92018-10-25 16:12:43 -050051 /**
52 * Pure virtual function to analyze an error
53 */
54 virtual void analyze() = 0;
Matt Spinlerdae0a8d2017-07-24 13:42:55 -050055
Matt Spinlerf0f02b92018-10-25 16:12:43 -050056 /**
57 * Stubbed virtual function to call when it's known
58 * the chip is in error state. Override if functionality
59 * is required
60 */
Patrick Williams48781ae2023-05-10 07:50:50 -050061 virtual void onFailure() {}
Matt Spinlerdae0a8d2017-07-24 13:42:55 -050062
Matt Spinlerf0f02b92018-10-25 16:12:43 -050063 /**
64 * Pure virtual function to clear faults on the device
65 */
66 virtual void clearFaults() = 0;
Matt Spinlerb54357f2017-08-21 14:38:54 -050067
Matt Spinlerf0f02b92018-10-25 16:12:43 -050068 private:
69 /**
70 * the device name
71 */
72 const std::string name;
Matt Spinlerdae0a8d2017-07-24 13:42:55 -050073
Matt Spinlerf0f02b92018-10-25 16:12:43 -050074 /**
75 * the device instance number
76 */
77 const size_t instance;
Matt Spinlerdae0a8d2017-07-24 13:42:55 -050078};
79
Matt Spinlerf0f02b92018-10-25 16:12:43 -050080} // namespace power
Lei YUab093322019-10-09 16:43:22 +080081} // namespace phosphor