1*c0f7a8b4SAlexander Hansen #pragma once 2*c0f7a8b4SAlexander Hansen 3638d1487SAlexander Hansen #include "grouplayout.hpp" 4638d1487SAlexander Hansen #include "ledlayout.hpp" 5638d1487SAlexander Hansen 6638d1487SAlexander Hansen #include <phosphor-logging/lg2.hpp> 7638d1487SAlexander Hansen #include <sdbusplus/bus.hpp> 8638d1487SAlexander Hansen 9638d1487SAlexander Hansen namespace phosphor 10638d1487SAlexander Hansen { 11638d1487SAlexander Hansen namespace led 12638d1487SAlexander Hansen { 13638d1487SAlexander Hansen namespace error 14638d1487SAlexander Hansen { 15638d1487SAlexander Hansen enum ConfigValidationError 16638d1487SAlexander Hansen { 17638d1487SAlexander Hansen // An LED has different priorities assigned to it in different groups 18638d1487SAlexander Hansen LedPriorityMismatch, 19638d1487SAlexander Hansen 20638d1487SAlexander Hansen // LED priority was needed but not assigned 21638d1487SAlexander Hansen MissingLedPriority, 22638d1487SAlexander Hansen 23638d1487SAlexander Hansen // Mixup of the 2 configuration options 24638d1487SAlexander Hansen MixedLedAndGroupPriority, 25638d1487SAlexander Hansen 26638d1487SAlexander Hansen // An invalid group priority was assigned 27638d1487SAlexander Hansen InvalidGroupPriority, 28638d1487SAlexander Hansen 29638d1487SAlexander Hansen // Group priorities were not unique 30638d1487SAlexander Hansen DuplicateGroupPriority, 31638d1487SAlexander Hansen }; 32638d1487SAlexander Hansen } 33638d1487SAlexander Hansen 34638d1487SAlexander Hansen class ConfigValidationException : std::runtime_error 35638d1487SAlexander Hansen { 36638d1487SAlexander Hansen public: 37638d1487SAlexander Hansen error::ConfigValidationError reason; 38638d1487SAlexander Hansen ConfigValidationException(const error::ConfigValidationError & err,const std::string & msg)39638d1487SAlexander Hansen ConfigValidationException(const error::ConfigValidationError& err, 40638d1487SAlexander Hansen const std::string& msg) : 41638d1487SAlexander Hansen std::runtime_error(msg), reason(err) 42638d1487SAlexander Hansen { 43638d1487SAlexander Hansen lg2::error(msg.c_str()); 44638d1487SAlexander Hansen } 45638d1487SAlexander Hansen ConfigValidationException(const error::ConfigValidationError & err,const std::string & groupName,const std::string & msg)46638d1487SAlexander Hansen ConfigValidationException(const error::ConfigValidationError& err, 47638d1487SAlexander Hansen const std::string& groupName, 48638d1487SAlexander Hansen const std::string& msg) : 49638d1487SAlexander Hansen std::runtime_error(msg), reason(err) 50638d1487SAlexander Hansen { 51638d1487SAlexander Hansen lg2::error("Configuration Validation Error in Group {GROUP}: {MSG}", 52638d1487SAlexander Hansen "GROUP", groupName, "MSG", msg.c_str()); 53638d1487SAlexander Hansen } 54638d1487SAlexander Hansen ConfigValidationException(const error::ConfigValidationError & err,const std::string & groupName,const std::string & ledName,const std::string & msg)55638d1487SAlexander Hansen ConfigValidationException(const error::ConfigValidationError& err, 56638d1487SAlexander Hansen const std::string& groupName, 57638d1487SAlexander Hansen const std::string& ledName, 58638d1487SAlexander Hansen const std::string& msg) : 59638d1487SAlexander Hansen std::runtime_error(msg), reason(err) 60638d1487SAlexander Hansen { 61638d1487SAlexander Hansen lg2::error( 62638d1487SAlexander Hansen "Configuration Validation Error in Group {GROUP}, Led {LED}: {MSG}", 63638d1487SAlexander Hansen "GROUP", groupName, "LED", ledName, "MSG", msg.c_str()); 64638d1487SAlexander Hansen } 65638d1487SAlexander Hansen }; 66638d1487SAlexander Hansen 67638d1487SAlexander Hansen void validateConfigV1(const phosphor::led::GroupMap& ledMap); 68638d1487SAlexander Hansen 69638d1487SAlexander Hansen } // namespace led 70638d1487SAlexander Hansen } // namespace phosphor 71