1 #pragma once 2 3 #include <algorithm> 4 #include <map> 5 #include <vector> 6 #include "device.hpp" 7 #include "pmbus.hpp" 8 #include "types.hpp" 9 10 namespace witherspoon 11 { 12 namespace power 13 { 14 15 /** 16 * @class UCD90160 17 * 18 * This class implements fault analysis for the UCD90160 19 * power sequencer device. 20 * 21 */ 22 class UCD90160 : public Device 23 { 24 public: 25 26 UCD90160() = delete; 27 ~UCD90160() = default; 28 UCD90160(const UCD90160&) = delete; 29 UCD90160& operator=(const UCD90160&) = delete; 30 UCD90160(UCD90160&&) = default; 31 UCD90160& operator=(UCD90160&&) = default; 32 33 /** 34 * Constructor 35 * 36 * @param[in] instance - the device instance number 37 */ 38 UCD90160(size_t instance); 39 40 /** 41 * Analyzes the device for errors when the device is 42 * known to be in an error state. A log will be created. 43 */ 44 void onFailure() override; 45 46 /** 47 * Checks the device for errors and only creates a log 48 * if one is found. 49 */ 50 void analyze() override; 51 52 /** 53 * Clears faults in the device 54 */ 55 void clearFaults() override; 56 57 private: 58 59 /** 60 * Checks for VOUT faults on the device. 61 * 62 * This device can monitor voltages of its dependent 63 * devices, and VOUT faults are voltage faults 64 * on these devices. 65 * 66 * @return bool - true if an error log was created 67 */ 68 bool checkVOUTFaults(); 69 70 /** 71 * Checks for PGOOD faults on the device. 72 * 73 * This device can monitor the PGOOD signals of its dependent 74 * devices, and this check will look for faults of 75 * those PGOODs. 76 * 77 * @param[in] polling - If this is running while polling for errors, 78 * as opposing to analyzing a fail condition. 79 * 80 * @return bool - true if an error log was created 81 */ 82 bool checkPGOODFaults(bool polling); 83 84 /** 85 * Creates an error log when the device has an error 86 * but it isn't a PGOOD or voltage failure. 87 */ 88 void createPowerFaultLog(); 89 90 /** 91 * The read/write interface to this hardware 92 */ 93 pmbus::PMBus interface; 94 95 /** 96 * Keeps track of device access errors to avoid repeatedly 97 * logging errors for bad hardware 98 */ 99 bool accessError = false; 100 101 /** 102 * Map of device instance to the instance specific data 103 */ 104 static const ucd90160::DeviceMap deviceMap; 105 }; 106 107 } 108 } 109