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