1 #pragma once 2 3 #include <map> 4 #include <string> 5 #include <tuple> 6 #include <vector> 7 8 namespace witherspoon 9 { 10 namespace power 11 { 12 13 class UCD90160; 14 15 namespace ucd90160 16 { 17 18 /** 19 * Defines which extra analysis is required 20 * on failures, if any. 21 */ 22 enum class extraAnalysisType 23 { 24 none, 25 gpuPGOOD, 26 gpuOverTemp 27 }; 28 29 /** 30 * Options for the GPIOs 31 * 32 * Used as a bitmask 33 */ 34 enum class optionFlags 35 { 36 none = 0, 37 shutdownOnFault = 1 38 }; 39 40 constexpr auto gpioNumField = 0; 41 constexpr auto gpioCalloutField = 1; 42 using GPIODefinition = std::tuple<gpio::gpioNum_t, std::string>; 43 using GPIODefinitions = std::vector<GPIODefinition>; 44 45 constexpr auto gpioDevicePathField = 0; 46 constexpr auto gpioPolarityField = 1; 47 constexpr auto errorFunctionField = 2; 48 constexpr auto optionFlagsField = 3; 49 constexpr auto gpioDefinitionField = 4; 50 51 using ErrorFunction = std::function<void(UCD90160&, const std::string&)>; 52 53 using GPIOGroup = std::tuple< 54 std::string, gpio::Value, ErrorFunction, optionFlags, GPIODefinitions>; 55 56 using GPIOAnalysis = std::map<extraAnalysisType, GPIOGroup>; 57 58 constexpr auto gpiNumField = 0; 59 constexpr auto pinIDField = 1; 60 constexpr auto gpiNameField = 2; 61 constexpr auto pollField = 3; 62 constexpr auto extraAnalysisField = 4; 63 64 using GPIConfig = std::tuple< 65 size_t, size_t, std::string, bool, extraAnalysisType>; 66 67 using GPIConfigs = std::vector<GPIConfig>; 68 69 using RailNames = std::vector<std::string>; 70 71 constexpr auto pathField = 0; 72 constexpr auto railNamesField = 1; 73 constexpr auto gpiConfigField = 2; 74 constexpr auto gpioAnalysisField = 3; 75 76 using DeviceDefinition = std::tuple< 77 std::string, RailNames, GPIConfigs, GPIOAnalysis>; 78 79 //Maps a device instance to its definition 80 using DeviceMap = std::map<size_t, DeviceDefinition>; 81 82 } 83 } 84 } 85