1595d5899Sopenharmony_ci/*
2595d5899Sopenharmony_ci * Copyright (c) 2023-2023 Huawei Device Co., Ltd.
3595d5899Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4595d5899Sopenharmony_ci * you may not use this file except in compliance with the License.
5595d5899Sopenharmony_ci * You may obtain a copy of the License at
6595d5899Sopenharmony_ci *
7595d5899Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8595d5899Sopenharmony_ci *
9595d5899Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10595d5899Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11595d5899Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12595d5899Sopenharmony_ci * See the License for the specific language governing permissions and
13595d5899Sopenharmony_ci * limitations under the License.
14595d5899Sopenharmony_ci */
15595d5899Sopenharmony_ci
16595d5899Sopenharmony_ci#include "config_parser.h"
17595d5899Sopenharmony_ci
18595d5899Sopenharmony_ci#include "display_log.h"
19595d5899Sopenharmony_ci
20595d5899Sopenharmony_cinamespace OHOS {
21595d5899Sopenharmony_cinamespace DisplayPowerMgr {
22595d5899Sopenharmony_cinamespace {
23595d5899Sopenharmony_ciconstexpr int DISPLAY_ID_MAX = 5;
24595d5899Sopenharmony_ciconst std::string CONFIG_NAME = "brightness_lux_threshold_config";
25595d5899Sopenharmony_ci} // namespace
26595d5899Sopenharmony_ci
27595d5899Sopenharmony_ciusing namespace OHOS::DisplayPowerMgr;
28595d5899Sopenharmony_ci
29595d5899Sopenharmony_ciConfigParse& ConfigParse::Get()
30595d5899Sopenharmony_ci{
31595d5899Sopenharmony_ci    static ConfigParse ConfigParse;
32595d5899Sopenharmony_ci    return ConfigParse;
33595d5899Sopenharmony_ci}
34595d5899Sopenharmony_ci
35595d5899Sopenharmony_civoid ConfigParse::Initialize()
36595d5899Sopenharmony_ci{
37595d5899Sopenharmony_ci    std::lock_guard<std::mutex> lock(mLock);
38595d5899Sopenharmony_ci    if (mIsInitialized.load()) [[unlikely]] {
39595d5899Sopenharmony_ci        DISPLAY_HILOGI(FEAT_BRIGHTNESS, "Already init!");
40595d5899Sopenharmony_ci        return;
41595d5899Sopenharmony_ci    }
42595d5899Sopenharmony_ci    BrightnessConfigParser::ParseConfig(mScreenConfig.brightnessConfig);
43595d5899Sopenharmony_ci    BrightnessConfigParser::PrintConfig(mScreenConfig.brightnessConfig);
44595d5899Sopenharmony_ci    for (int displayId = 0; displayId < DISPLAY_ID_MAX; displayId++) {
45595d5899Sopenharmony_ci        DISPLAY_HILOGI(FEAT_BRIGHTNESS, "[%{public}d] Already init!", displayId);
46595d5899Sopenharmony_ci        Config brightnessConfig{};
47595d5899Sopenharmony_ci        ParseConfig(displayId, brightnessConfig);
48595d5899Sopenharmony_ci        PrintConfig(displayId, brightnessConfig);
49595d5899Sopenharmony_ci        mConfig[displayId] = brightnessConfig;
50595d5899Sopenharmony_ci    }
51595d5899Sopenharmony_ci    mIsInitialized = true;
52595d5899Sopenharmony_ci}
53595d5899Sopenharmony_ci
54595d5899Sopenharmony_ciconst std::unordered_map<int, Config>& ConfigParse::GetBrightnessConfig() const
55595d5899Sopenharmony_ci{
56595d5899Sopenharmony_ci    return mConfig;
57595d5899Sopenharmony_ci}
58595d5899Sopenharmony_ci
59595d5899Sopenharmony_ciconst ScreenConfig& ConfigParse::GetScreenConfig() const
60595d5899Sopenharmony_ci{
61595d5899Sopenharmony_ci    return mScreenConfig;
62595d5899Sopenharmony_ci}
63595d5899Sopenharmony_ci
64595d5899Sopenharmony_cibool ConfigParse::ParseConfig(int displayId, Config& data) const
65595d5899Sopenharmony_ci{
66595d5899Sopenharmony_ci    DISPLAY_HILOGI(FEAT_BRIGHTNESS, "[%{public}d] parse Config start!", displayId);
67595d5899Sopenharmony_ci    CalculationConfigParser::ParseConfig(displayId, data.calculationConfig);
68595d5899Sopenharmony_ci    LuxFilterConfigParser::ParseConfig(displayId, data.luxFilterConfig);
69595d5899Sopenharmony_ci    LuxThresholdConfigParser::ParseConfig(displayId, data.luxThresholdConfig);
70595d5899Sopenharmony_ci    DISPLAY_HILOGI(FEAT_BRIGHTNESS, "[%{public}d] parse Config over!", displayId);
71595d5899Sopenharmony_ci    return true;
72595d5899Sopenharmony_ci}
73595d5899Sopenharmony_ci
74595d5899Sopenharmony_civoid ConfigParse::PrintConfig(int displayId, const Config& data) const
75595d5899Sopenharmony_ci{
76595d5899Sopenharmony_ci    CalculationConfigParser::PrintConfig(displayId, data.calculationConfig);
77595d5899Sopenharmony_ci    LuxFilterConfigParser::PrintConfig(displayId, data.luxFilterConfig);
78595d5899Sopenharmony_ci    LuxThresholdConfigParser::PrintConfig(displayId, data.luxThresholdConfig);
79595d5899Sopenharmony_ci}
80595d5899Sopenharmony_ci} // namespace DisplayPowerMgr
81595d5899Sopenharmony_ci} // namespace OHOS
82