1*638d1487SAlexander Hansen #include "grouplayout.hpp"
2*638d1487SAlexander Hansen #include "ledlayout.hpp"
3*638d1487SAlexander Hansen 
4*638d1487SAlexander Hansen #include <phosphor-logging/lg2.hpp>
5*638d1487SAlexander Hansen #include <sdbusplus/bus.hpp>
6*638d1487SAlexander Hansen 
7*638d1487SAlexander Hansen namespace phosphor
8*638d1487SAlexander Hansen {
9*638d1487SAlexander Hansen namespace led
10*638d1487SAlexander Hansen {
11*638d1487SAlexander Hansen namespace error
12*638d1487SAlexander Hansen {
13*638d1487SAlexander Hansen enum ConfigValidationError
14*638d1487SAlexander Hansen {
15*638d1487SAlexander Hansen     // An LED has different priorities assigned to it in different groups
16*638d1487SAlexander Hansen     LedPriorityMismatch,
17*638d1487SAlexander Hansen 
18*638d1487SAlexander Hansen     // LED priority was needed but not assigned
19*638d1487SAlexander Hansen     MissingLedPriority,
20*638d1487SAlexander Hansen 
21*638d1487SAlexander Hansen     // Mixup of the 2 configuration options
22*638d1487SAlexander Hansen     MixedLedAndGroupPriority,
23*638d1487SAlexander Hansen 
24*638d1487SAlexander Hansen     // An invalid group priority was assigned
25*638d1487SAlexander Hansen     InvalidGroupPriority,
26*638d1487SAlexander Hansen 
27*638d1487SAlexander Hansen     // Group priorities were not unique
28*638d1487SAlexander Hansen     DuplicateGroupPriority,
29*638d1487SAlexander Hansen };
30*638d1487SAlexander Hansen }
31*638d1487SAlexander Hansen 
32*638d1487SAlexander Hansen class ConfigValidationException : std::runtime_error
33*638d1487SAlexander Hansen {
34*638d1487SAlexander Hansen   public:
35*638d1487SAlexander Hansen     error::ConfigValidationError reason;
36*638d1487SAlexander Hansen 
37*638d1487SAlexander Hansen     ConfigValidationException(const error::ConfigValidationError& err,
38*638d1487SAlexander Hansen                               const std::string& msg) :
39*638d1487SAlexander Hansen         std::runtime_error(msg), reason(err)
40*638d1487SAlexander Hansen     {
41*638d1487SAlexander Hansen         lg2::error(msg.c_str());
42*638d1487SAlexander Hansen     }
43*638d1487SAlexander Hansen 
44*638d1487SAlexander Hansen     ConfigValidationException(const error::ConfigValidationError& err,
45*638d1487SAlexander Hansen                               const std::string& groupName,
46*638d1487SAlexander Hansen                               const std::string& msg) :
47*638d1487SAlexander Hansen         std::runtime_error(msg), reason(err)
48*638d1487SAlexander Hansen     {
49*638d1487SAlexander Hansen         lg2::error("Configuration Validation Error in Group {GROUP}: {MSG}",
50*638d1487SAlexander Hansen                    "GROUP", groupName, "MSG", msg.c_str());
51*638d1487SAlexander Hansen     }
52*638d1487SAlexander Hansen 
53*638d1487SAlexander Hansen     ConfigValidationException(const error::ConfigValidationError& err,
54*638d1487SAlexander Hansen                               const std::string& groupName,
55*638d1487SAlexander Hansen                               const std::string& ledName,
56*638d1487SAlexander Hansen                               const std::string& msg) :
57*638d1487SAlexander Hansen         std::runtime_error(msg), reason(err)
58*638d1487SAlexander Hansen     {
59*638d1487SAlexander Hansen         lg2::error(
60*638d1487SAlexander Hansen             "Configuration Validation Error in Group {GROUP}, Led {LED}: {MSG}",
61*638d1487SAlexander Hansen             "GROUP", groupName, "LED", ledName, "MSG", msg.c_str());
62*638d1487SAlexander Hansen     }
63*638d1487SAlexander Hansen };
64*638d1487SAlexander Hansen 
65*638d1487SAlexander Hansen void validateConfigV1(const phosphor::led::GroupMap& ledMap);
66*638d1487SAlexander Hansen 
67*638d1487SAlexander Hansen } // namespace led
68*638d1487SAlexander Hansen } // namespace phosphor
69